From f9ea944422ed7d7d1c3036f55a31cdd72a21adc9 Mon Sep 17 00:00:00 2001 From: sblausten Date: Wed, 21 Dec 2022 18:52:30 +0100 Subject: [PATCH 001/137] Add generic Explore tab for entities and refactor existing to use it; Add Systems to default page Signed-off-by: sblausten --- .changeset/itchy-kiwis-unite.md | 5 + plugins/explore/README.md | 7 +- .../DefaultExplorePage/DefaultExplorePage.tsx | 7 +- .../DomainExplorerContent.tsx | 4 +- .../EntityCard.test.tsx} | 6 +- .../EntityCard.tsx} | 4 +- .../{DomainCard => EntityCard}/index.ts | 2 +- .../EntityExplorerContent.test.tsx | 136 ++++++++++++++++++ .../EntityExplorerContent.tsx | 109 ++++++++++++++ .../components/EntityExplorerContent/index.ts | 17 +++ 10 files changed, 285 insertions(+), 12 deletions(-) create mode 100644 .changeset/itchy-kiwis-unite.md rename plugins/explore/src/components/{DomainCard/DomainCard.test.tsx => EntityCard/EntityCard.test.tsx} (93%) rename plugins/explore/src/components/{DomainCard/DomainCard.tsx => EntityCard/EntityCard.tsx} (93%) rename plugins/explore/src/components/{DomainCard => EntityCard}/index.ts (93%) create mode 100644 plugins/explore/src/components/EntityExplorerContent/EntityExplorerContent.test.tsx create mode 100644 plugins/explore/src/components/EntityExplorerContent/EntityExplorerContent.tsx create mode 100644 plugins/explore/src/components/EntityExplorerContent/index.ts diff --git a/.changeset/itchy-kiwis-unite.md b/.changeset/itchy-kiwis-unite.md new file mode 100644 index 0000000000..a17f3072b2 --- /dev/null +++ b/.changeset/itchy-kiwis-unite.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-explore': patch +--- + +Extracted generic EntityExplorerContent component so that is is easy to show any component kinds in their own tab in the Explore page. diff --git a/plugins/explore/README.md b/plugins/explore/README.md index 0204f34714..f60d83eafb 100644 --- a/plugins/explore/README.md +++ b/plugins/explore/README.md @@ -2,7 +2,7 @@ Welcome to the explore plugin! -This plugin helps to visualize the domains and tools in your ecosystem. +This plugin helps to visualize the domains, systems and tools in your ecosystem. ## Setup @@ -116,7 +116,10 @@ export const ExplorePage = () => { subtitle="Browse our ecosystem" > - + + + + diff --git a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.tsx b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.tsx index 54beb59619..49a79f5143 100644 --- a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.tsx +++ b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.tsx @@ -15,11 +15,11 @@ */ import React from 'react'; -import { DomainExplorerContent } from '../DomainExplorerContent'; import { ExploreLayout } from '../ExploreLayout'; import { GroupsExplorerContent } from '../GroupsExplorerContent'; import { ToolExplorerContent } from '../ToolExplorerContent'; import { configApiRef, useApi } from '@backstage/core-plugin-api'; +import { EntityExplorerContent } from '../EntityExplorerContent'; export const DefaultExplorePage = () => { const configApi = useApi(configApiRef); @@ -32,7 +32,10 @@ export const DefaultExplorePage = () => { subtitle="Discover solutions available in your ecosystem" > - + + + + diff --git a/plugins/explore/src/components/DomainExplorerContent/DomainExplorerContent.tsx b/plugins/explore/src/components/DomainExplorerContent/DomainExplorerContent.tsx index 3cfed5b12b..15c0d650cc 100644 --- a/plugins/explore/src/components/DomainExplorerContent/DomainExplorerContent.tsx +++ b/plugins/explore/src/components/DomainExplorerContent/DomainExplorerContent.tsx @@ -19,7 +19,6 @@ import { catalogApiRef } from '@backstage/plugin-catalog-react'; import { Button } from '@material-ui/core'; import React from 'react'; import useAsync from 'react-use/lib/useAsync'; -import { DomainCard } from '../DomainCard'; import { Content, ContentHeader, @@ -30,6 +29,7 @@ import { WarningPanel, } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; +import { EntityCard } from '../EntityCard'; const Body = () => { const catalogApi = useApi(catalogApiRef); @@ -78,7 +78,7 @@ const Body = () => { return ( {entities.map((entity, index) => ( - + ))} ); diff --git a/plugins/explore/src/components/DomainCard/DomainCard.test.tsx b/plugins/explore/src/components/EntityCard/EntityCard.test.tsx similarity index 93% rename from plugins/explore/src/components/DomainCard/DomainCard.test.tsx rename to plugins/explore/src/components/EntityCard/EntityCard.test.tsx index df9b84820a..ccf5deb875 100644 --- a/plugins/explore/src/components/DomainCard/DomainCard.test.tsx +++ b/plugins/explore/src/components/EntityCard/EntityCard.test.tsx @@ -18,9 +18,9 @@ import { DomainEntity } from '@backstage/catalog-model'; import { entityRouteRef } from '@backstage/plugin-catalog-react'; import { renderInTestApp } from '@backstage/test-utils'; import React from 'react'; -import { DomainCard } from './DomainCard'; +import { EntityCard } from './EntityCard'; -describe('', () => { +describe('', () => { it('renders a domain card', async () => { const entity: DomainEntity = { apiVersion: 'backstage.io/v1alpha1', @@ -35,7 +35,7 @@ describe('', () => { }, }; const { getByText } = await renderInTestApp( - , + , { mountedRoutes: { '/catalog/:namespace/:kind/:name': entityRouteRef, diff --git a/plugins/explore/src/components/DomainCard/DomainCard.tsx b/plugins/explore/src/components/EntityCard/EntityCard.tsx similarity index 93% rename from plugins/explore/src/components/DomainCard/DomainCard.tsx rename to plugins/explore/src/components/EntityCard/EntityCard.tsx index a20a5e1f0c..a9ba4f2550 100644 --- a/plugins/explore/src/components/DomainCard/DomainCard.tsx +++ b/plugins/explore/src/components/EntityCard/EntityCard.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { DomainEntity, RELATION_OWNED_BY } from '@backstage/catalog-model'; +import { Entity, RELATION_OWNED_BY } from '@backstage/catalog-model'; import { EntityRefLinks, entityRouteParams, @@ -35,7 +35,7 @@ import { Button, ItemCardHeader } from '@backstage/core-components'; import { useRouteRef } from '@backstage/core-plugin-api'; /** @public */ -export const DomainCard = (props: { entity: DomainEntity }) => { +export const EntityCard = (props: { entity: Entity }) => { const { entity } = props; const catalogEntityRoute = useRouteRef(entityRouteRef); diff --git a/plugins/explore/src/components/DomainCard/index.ts b/plugins/explore/src/components/EntityCard/index.ts similarity index 93% rename from plugins/explore/src/components/DomainCard/index.ts rename to plugins/explore/src/components/EntityCard/index.ts index dbae755460..be80fb3f8f 100644 --- a/plugins/explore/src/components/DomainCard/index.ts +++ b/plugins/explore/src/components/EntityCard/index.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { DomainCard } from './DomainCard'; +export { EntityCard } from './EntityCard'; diff --git a/plugins/explore/src/components/EntityExplorerContent/EntityExplorerContent.test.tsx b/plugins/explore/src/components/EntityExplorerContent/EntityExplorerContent.test.tsx new file mode 100644 index 0000000000..4670a10855 --- /dev/null +++ b/plugins/explore/src/components/EntityExplorerContent/EntityExplorerContent.test.tsx @@ -0,0 +1,136 @@ +/* + * 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 { DomainEntity } from '@backstage/catalog-model'; +import { catalogApiRef, entityRouteRef } from '@backstage/plugin-catalog-react'; +import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; +import { waitFor } from '@testing-library/react'; +import React from 'react'; +import { EntityExplorerContent } from './EntityExplorerContent'; + +describe('', () => { + const catalogApi = { + addLocation: jest.fn(), + getEntities: jest.fn(), + getLocationByRef: jest.fn(), + getLocationById: jest.fn(), + removeLocationById: jest.fn(), + removeEntityByUid: jest.fn(), + getEntityByRef: jest.fn(), + refreshEntity: jest.fn(), + getEntityAncestors: jest.fn(), + getEntityFacets: jest.fn(), + validateEntity: jest.fn(), + }; + + const Wrapper = ({ children }: { children?: React.ReactNode }) => ( + + {children} + + ); + + const mountedRoutes = { + mountedRoutes: { + '/catalog/:namespace/:kind/:name': entityRouteRef, + }, + }; + + beforeEach(() => { + jest.resetAllMocks(); + }); + + it('renders a grid of domains', async () => { + const entities: DomainEntity[] = [ + { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Domain', + metadata: { + name: 'playback', + }, + spec: { + owner: 'guest', + }, + }, + { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Domain', + metadata: { + name: 'artists', + }, + spec: { + owner: 'guest', + }, + }, + ]; + catalogApi.getEntities.mockResolvedValue({ items: entities }); + + const { getByText } = await renderInTestApp( + + + , + mountedRoutes, + ); + + await waitFor(() => { + expect(getByText('artists')).toBeInTheDocument(); + expect(getByText('playback')).toBeInTheDocument(); + }); + }); + + it('renders a custom title', async () => { + catalogApi.getEntities.mockResolvedValue({ items: [] }); + + const { getByText } = await renderInTestApp( + + + , + mountedRoutes, + ); + + await waitFor(() => expect(getByText('Our Areas')).toBeInTheDocument()); + }); + + it('renders empty state', async () => { + catalogApi.getEntities.mockResolvedValue({ items: [] }); + + const { getByText } = await renderInTestApp( + + + , + mountedRoutes, + ); + + await waitFor(() => + expect(getByText('No domains to display')).toBeInTheDocument(), + ); + }); + + it('renders a friendly error if it cannot collect domains', async () => { + const catalogError = new Error('Network timeout'); + catalogApi.getEntities.mockRejectedValueOnce(catalogError); + + const { getByText } = await renderInTestApp( + + + , + mountedRoutes, + ); + + await waitFor(() => + expect(getByText(/Could not load domains/)).toBeInTheDocument(), + ); + }); +}); diff --git a/plugins/explore/src/components/EntityExplorerContent/EntityExplorerContent.tsx b/plugins/explore/src/components/EntityExplorerContent/EntityExplorerContent.tsx new file mode 100644 index 0000000000..55ef13d98e --- /dev/null +++ b/plugins/explore/src/components/EntityExplorerContent/EntityExplorerContent.tsx @@ -0,0 +1,109 @@ +/* + * 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 { catalogApiRef } from '@backstage/plugin-catalog-react'; +import { Button } from '@material-ui/core'; +import React from 'react'; +import useAsync from 'react-use/lib/useAsync'; +import { EntityCard } from '../EntityCard'; +import { + Content, + ContentHeader, + EmptyState, + ItemCardGrid, + Progress, + SupportButton, + WarningPanel, +} from '@backstage/core-components'; +import { useApi } from '@backstage/core-plugin-api'; + +const Body = (props: { kind: string }) => { + const { kind } = props; + const kindPlural = `${kind}s`; + const catalogApi = useApi(catalogApiRef); + const { + value: entities, + loading, + error, + } = useAsync(async () => { + const response = await catalogApi.getEntities({ + filter: { kind }, + }); + return response.items as Entity[]; + }, [catalogApi]); + + if (loading) { + return ; + } + + if (error) { + return ( + + {error.message} + + ); + } + + if (!entities?.length) { + return ( + + Read more + + } + /> + ); + } + + return ( + + {entities.map((entity, index) => ( + + ))} + + ); +}; + +/** @public */ +export const EntityExplorerContent = (props: { + tabTitle?: string; + kind: string; +}) => { + const { kind, tabTitle } = props; + return ( + + + + Discover the {kind.toLocaleLowerCase()}s in your ecosystem. + + + + + ); +}; diff --git a/plugins/explore/src/components/EntityExplorerContent/index.ts b/plugins/explore/src/components/EntityExplorerContent/index.ts new file mode 100644 index 0000000000..ab06193939 --- /dev/null +++ b/plugins/explore/src/components/EntityExplorerContent/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 { EntityExplorerContent } from './EntityExplorerContent'; From 8465e989a6a83262596f4bc55275e90af8979d21 Mon Sep 17 00:00:00 2001 From: sblausten Date: Wed, 21 Dec 2022 18:58:30 +0100 Subject: [PATCH 002/137] Make changeset a minor Signed-off-by: sblausten --- .changeset/itchy-kiwis-unite.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/itchy-kiwis-unite.md b/.changeset/itchy-kiwis-unite.md index a17f3072b2..5fe13d9339 100644 --- a/.changeset/itchy-kiwis-unite.md +++ b/.changeset/itchy-kiwis-unite.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-explore': patch +'@backstage/plugin-explore': minor --- Extracted generic EntityExplorerContent component so that is is easy to show any component kinds in their own tab in the Explore page. From a651c48edd050ca1c3554b2a306376fe0b359071 Mon Sep 17 00:00:00 2001 From: sblausten Date: Wed, 21 Dec 2022 19:19:27 +0100 Subject: [PATCH 003/137] Fix export and typo Signed-off-by: sblausten --- .changeset/itchy-kiwis-unite.md | 2 +- plugins/explore/src/components/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/itchy-kiwis-unite.md b/.changeset/itchy-kiwis-unite.md index 5fe13d9339..e0bee850eb 100644 --- a/.changeset/itchy-kiwis-unite.md +++ b/.changeset/itchy-kiwis-unite.md @@ -2,4 +2,4 @@ '@backstage/plugin-explore': minor --- -Extracted generic EntityExplorerContent component so that is is easy to show any component kinds in their own tab in the Explore page. +Extracted generic EntityExplorerContent component so that it is easy to show any component kinds in their own tab in the Explore page. diff --git a/plugins/explore/src/components/index.ts b/plugins/explore/src/components/index.ts index d3af1b99c2..4cee9f7143 100644 --- a/plugins/explore/src/components/index.ts +++ b/plugins/explore/src/components/index.ts @@ -14,6 +14,6 @@ * limitations under the License. */ -export * from './DomainCard'; +export * from './EntityExplorerContent'; export * from './ExploreLayout'; export * from './ToolSearchResultListItem'; From 18537fedfe293848dd55bf16d3ad4f83d1de9d04 Mon Sep 17 00:00:00 2001 From: sblausten Date: Wed, 21 Dec 2022 19:21:04 +0100 Subject: [PATCH 004/137] Export more stuff for use Signed-off-by: sblausten --- plugins/explore/src/components/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/explore/src/components/index.ts b/plugins/explore/src/components/index.ts index 4cee9f7143..315bd1732a 100644 --- a/plugins/explore/src/components/index.ts +++ b/plugins/explore/src/components/index.ts @@ -15,5 +15,7 @@ */ export * from './EntityExplorerContent'; +export * from './GroupsExplorerContent'; +export * from './DefaultExplorePage'; export * from './ExploreLayout'; export * from './ToolSearchResultListItem'; From 3373cc3e5e2451641054889efacdd44ead01ffcb Mon Sep 17 00:00:00 2001 From: sblausten Date: Thu, 22 Dec 2022 11:45:59 +0100 Subject: [PATCH 005/137] remove duplicate exports Signed-off-by: sblausten --- plugins/explore/src/components/index.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/plugins/explore/src/components/index.ts b/plugins/explore/src/components/index.ts index 315bd1732a..96175770fa 100644 --- a/plugins/explore/src/components/index.ts +++ b/plugins/explore/src/components/index.ts @@ -14,8 +14,5 @@ * limitations under the License. */ -export * from './EntityExplorerContent'; -export * from './GroupsExplorerContent'; -export * from './DefaultExplorePage'; export * from './ExploreLayout'; export * from './ToolSearchResultListItem'; From 7d308d65c7ea15aa7a71b684b7e91e97a2330bc8 Mon Sep 17 00:00:00 2001 From: sblausten Date: Thu, 22 Dec 2022 14:31:21 +0100 Subject: [PATCH 006/137] Fix test and update api-report Signed-off-by: sblausten --- plugins/explore/api-report.md | 4 ---- .../components/DefaultExplorePage/DefaultExplorePage.test.tsx | 3 ++- plugins/explore/src/components/index.ts | 1 + 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/plugins/explore/api-report.md b/plugins/explore/api-report.md index d184ce01a4..d10f5ddf95 100644 --- a/plugins/explore/api-report.md +++ b/plugins/explore/api-report.md @@ -9,7 +9,6 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { default as default_2 } from 'react'; import { DiscoveryApi } from '@backstage/core-plugin-api'; -import { DomainEntity } from '@backstage/catalog-model'; import { ExploreToolsConfig } from '@backstage/plugin-explore-react'; import { ExternalRouteRef } from '@backstage/core-plugin-api'; import { FetchApi } from '@backstage/core-plugin-api'; @@ -31,9 +30,6 @@ export const catalogEntityRouteRef: ExternalRouteRef< true >; -// @public (undocumented) -export const DomainCard: (props: { entity: DomainEntity }) => JSX.Element; - // @public (undocumented) export const DomainExplorerContent: (props: { title?: string | undefined; diff --git a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx index 62d197803f..f2533dbc40 100644 --- a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx +++ b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx @@ -56,8 +56,9 @@ describe('', () => { await waitFor(() => { const elements = getAllByRole('tab'); - expect(elements.length).toBe(3); + expect(elements.length).toBe(4); expect(getByText(elements[0], 'Domains')).toBeInTheDocument(); + expect(getByText(elements[1], 'Systems')).toBeInTheDocument(); expect(getByText(elements[1], 'Groups')).toBeInTheDocument(); expect(getByText(elements[2], 'Tools')).toBeInTheDocument(); }); diff --git a/plugins/explore/src/components/index.ts b/plugins/explore/src/components/index.ts index 96175770fa..4cee9f7143 100644 --- a/plugins/explore/src/components/index.ts +++ b/plugins/explore/src/components/index.ts @@ -14,5 +14,6 @@ * limitations under the License. */ +export * from './EntityExplorerContent'; export * from './ExploreLayout'; export * from './ToolSearchResultListItem'; From b3e213629cf1b965e3da36d75887f1070f775664 Mon Sep 17 00:00:00 2001 From: sblausten Date: Tue, 3 Jan 2023 15:11:57 +0100 Subject: [PATCH 007/137] Fix test Signed-off-by: sblausten --- .../components/DefaultExplorePage/DefaultExplorePage.test.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx index f2533dbc40..c4c6b3011e 100644 --- a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx +++ b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx @@ -59,8 +59,8 @@ describe('', () => { expect(elements.length).toBe(4); expect(getByText(elements[0], 'Domains')).toBeInTheDocument(); expect(getByText(elements[1], 'Systems')).toBeInTheDocument(); - expect(getByText(elements[1], 'Groups')).toBeInTheDocument(); - expect(getByText(elements[2], 'Tools')).toBeInTheDocument(); + expect(getByText(elements[2], 'Groups')).toBeInTheDocument(); + expect(getByText(elements[3], 'Tools')).toBeInTheDocument(); }); }); }); From 6a5dc558f69d521ac63fc0820b8631262cc45673 Mon Sep 17 00:00:00 2001 From: sblausten Date: Tue, 3 Jan 2023 15:47:53 +0100 Subject: [PATCH 008/137] Build api reports Signed-off-by: sblausten --- packages/backend-app-api/api-report.md | 5 - packages/backend-common/api-report.md | 87 ++++++++++++----- packages/backend-plugin-api/api-report.md | 94 ++----------------- packages/catalog-client/api-report.md | 12 --- plugins/apollo-explorer/api-report.md | 2 +- plugins/bazaar/api-report.md | 10 -- .../api-report.md | 8 +- plugins/code-coverage-backend/api-report.md | 3 - plugins/explore/api-report.md | 4 + plugins/rollbar-backend/api-report.md | 6 +- plugins/scaffolder-backend/api-report.md | 40 +++----- plugins/scaffolder/api-report.md | 34 ++----- plugins/techdocs-react/api-report.md | 3 - 13 files changed, 99 insertions(+), 209 deletions(-) diff --git a/packages/backend-app-api/api-report.md b/packages/backend-app-api/api-report.md index ef88d9a9d0..33e732cf05 100644 --- a/packages/backend-app-api/api-report.md +++ b/packages/backend-app-api/api-report.md @@ -83,11 +83,6 @@ export const permissionsFactory: ( options?: undefined, ) => ServiceFactory; -// @public -export const rootLifecycleFactory: ( - options?: undefined, -) => ServiceFactory; - // @public (undocumented) export const rootLoggerFactory: ( options?: undefined, diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md index e8b41e21bb..784f3295c6 100644 --- a/packages/backend-common/api-report.md +++ b/packages/backend-common/api-report.md @@ -30,23 +30,12 @@ import { KubeConfig } from '@kubernetes/client-node'; import { LoadConfigOptionsRemote } from '@backstage/config-loader'; import { Logger } from 'winston'; import { MergeResult } from 'isomorphic-git'; -import { DiscoveryService as PluginEndpointDiscovery } from '@backstage/backend-plugin-api'; import { PushResult } from 'isomorphic-git'; import { Readable } from 'stream'; import { ReadCommitResult } from 'isomorphic-git'; -import { ReadTreeOptions } from '@backstage/backend-plugin-api'; -import { ReadTreeResponse } from '@backstage/backend-plugin-api'; -import { ReadTreeResponseDirOptions } from '@backstage/backend-plugin-api'; -import { ReadTreeResponseFile } from '@backstage/backend-plugin-api'; -import { ReadUrlOptions } from '@backstage/backend-plugin-api'; -import { ReadUrlResponse } from '@backstage/backend-plugin-api'; import { RequestHandler } from 'express'; import { Router } from 'express'; -import { SearchOptions } from '@backstage/backend-plugin-api'; -import { SearchResponse } from '@backstage/backend-plugin-api'; -import { SearchResponseFile } from '@backstage/backend-plugin-api'; import { Server } from 'http'; -import { UrlReaderService as UrlReader } from '@backstage/backend-plugin-api'; import { V1PodTemplateSpec } from '@kubernetes/client-node'; import * as winston from 'winston'; import { Writable } from 'stream'; @@ -531,7 +520,11 @@ export interface PluginDatabaseManager { }; } -export { PluginEndpointDiscovery }; +// @public +export type PluginEndpointDiscovery = { + getBaseUrl(pluginId: string): Promise; + getExternalBaseUrl(pluginId: string): Promise; +}; // @public export type ReaderFactory = (options: { @@ -540,11 +533,30 @@ export type ReaderFactory = (options: { treeResponseFactory: ReadTreeResponseFactory; }) => UrlReaderPredicateTuple[]; -export { ReadTreeOptions }; +// @public +export type ReadTreeOptions = { + filter?( + path: string, + info?: { + size: number; + }, + ): boolean; + etag?: string; + signal?: AbortSignal; +}; -export { ReadTreeResponse }; +// @public +export type ReadTreeResponse = { + files(): Promise; + archive(): Promise; + dir(options?: ReadTreeResponseDirOptions): Promise; + etag: string; +}; -export { ReadTreeResponseDirOptions }; +// @public +export type ReadTreeResponseDirOptions = { + targetDir?: string; +}; // @public export interface ReadTreeResponseFactory { @@ -575,11 +587,24 @@ export type ReadTreeResponseFactoryOptions = { ) => boolean; }; -export { ReadTreeResponseFile }; +// @public +export type ReadTreeResponseFile = { + path: string; + content(): Promise; +}; -export { ReadUrlOptions }; +// @public +export type ReadUrlOptions = { + etag?: string; + signal?: AbortSignal; +}; -export { ReadUrlResponse }; +// @public +export type ReadUrlResponse = { + buffer(): Promise; + stream?(): Readable; + etag?: string; +}; // @public export class ReadUrlResponseFactory { @@ -627,11 +652,23 @@ export type RunContainerOptions = { pullImage?: boolean; }; -export { SearchOptions }; +// @public +export type SearchOptions = { + etag?: string; + signal?: AbortSignal; +}; -export { SearchResponse }; +// @public +export type SearchResponse = { + files: SearchResponseFile[]; + etag: string; +}; -export { SearchResponseFile }; +// @public +export type SearchResponseFile = { + url: string; + content(): Promise; +}; // @public export class ServerTokenManager implements TokenManager { @@ -718,7 +755,13 @@ export interface TokenManager { }>; } -export { UrlReader }; +// @public +export type UrlReader = { + read(url: string): Promise; + readUrl(url: string, options?: ReadUrlOptions): Promise; + readTree(url: string, options?: ReadTreeOptions): Promise; + search(url: string, options?: SearchOptions): Promise; +}; // @public export type UrlReaderPredicateTuple = { diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md index e0fa44eb20..545728b386 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.md @@ -3,8 +3,6 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -/// - import { Config } from '@backstage/config'; import { Handler } from 'express'; import { Logger } from 'winston'; @@ -12,10 +10,11 @@ import { PermissionAuthorizer } from '@backstage/plugin-permission-common'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { PluginCacheManager } from '@backstage/backend-common'; import { PluginDatabaseManager } from '@backstage/backend-common'; +import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; -import { Readable } from 'stream'; import { TokenManager } from '@backstage/backend-common'; import { TransportStreamOptions } from 'winston-transport'; +import { UrlReader } from '@backstage/backend-common'; // @public (undocumented) export interface BackendFeature { @@ -90,7 +89,6 @@ declare namespace coreServices { tokenManagerServiceRef as tokenManager, permissionsServiceRef as permissions, schedulerServiceRef as scheduler, - rootLifecycleServiceRef as rootLifecycle, rootLoggerServiceRef as rootLogger, pluginMetadataServiceRef as pluginMetadata, lifecycleServiceRef as lifecycle, @@ -168,14 +166,11 @@ export type DatabaseService = PluginDatabaseManager; // @public (undocumented) const databaseServiceRef: ServiceRef; -// @public -export type DiscoveryService = { - getBaseUrl(pluginId: string): Promise; - getExternalBaseUrl(pluginId: string): Promise; -}; +// @public (undocumented) +export type DiscoveryService = PluginEndpointDiscovery; // @public (undocumented) -const discoveryServiceRef: ServiceRef; +const discoveryServiceRef: ServiceRef; // @public export type ExtensionPoint = { @@ -205,7 +200,6 @@ const lifecycleServiceRef: ServiceRef; // @public (undocumented) export type LifecycleServiceShutdownHook = { fn: () => void | Promise; - labels?: Record; }; // @public (undocumented) @@ -251,56 +245,6 @@ export interface PluginMetadataService { // @public (undocumented) const pluginMetadataServiceRef: ServiceRef; -// @public -export type ReadTreeOptions = { - filter?( - path: string, - info?: { - size: number; - }, - ): boolean; - etag?: string; - signal?: AbortSignal; -}; - -// @public -export type ReadTreeResponse = { - files(): Promise; - archive(): Promise; - dir(options?: ReadTreeResponseDirOptions): Promise; - etag: string; -}; - -// @public -export type ReadTreeResponseDirOptions = { - targetDir?: string; -}; - -// @public -export type ReadTreeResponseFile = { - path: string; - content(): Promise; -}; - -// @public -export type ReadUrlOptions = { - etag?: string; - signal?: AbortSignal; -}; - -// @public -export type ReadUrlResponse = { - buffer(): Promise; - stream?(): Readable; - etag?: string; -}; - -// @public (undocumented) -export type RootLifecycleService = LifecycleService; - -// @public (undocumented) -const rootLifecycleServiceRef: ServiceRef; - // @public (undocumented) export type RootLoggerService = LoggerService; @@ -313,24 +257,6 @@ export type SchedulerService = PluginTaskScheduler; // @public (undocumented) const schedulerServiceRef: ServiceRef; -// @public -export type SearchOptions = { - etag?: string; - signal?: AbortSignal; -}; - -// @public -export type SearchResponse = { - files: SearchResponseFile[]; - etag: string; -}; - -// @public -export type SearchResponseFile = { - url: string; - content(): Promise; -}; - // @public (undocumented) export type ServiceFactory = | { @@ -381,13 +307,9 @@ export type TypesToServiceRef = { [key in keyof T]: ServiceRef; }; -// @public -export type UrlReaderService = { - readUrl(url: string, options?: ReadUrlOptions): Promise; - readTree(url: string, options?: ReadTreeOptions): Promise; - search(url: string, options?: SearchOptions): Promise; -}; +// @public (undocumented) +export type UrlReaderService = UrlReader; // @public (undocumented) -const urlReaderServiceRef: ServiceRef; +const urlReaderServiceRef: ServiceRef; ``` diff --git a/packages/catalog-client/api-report.md b/packages/catalog-client/api-report.md index a81314308b..2f76be79e2 100644 --- a/packages/catalog-client/api-report.md +++ b/packages/catalog-client/api-report.md @@ -161,17 +161,6 @@ export type EntityFilterQuery = | Record[] | Record; -// @public -export type EntityOrderQuery = - | { - field: string; - order: 'asc' | 'desc'; - } - | Array<{ - field: string; - order: 'asc' | 'desc'; - }>; - // @public export interface GetEntitiesByRefsRequest { entityRefs: string[]; @@ -190,7 +179,6 @@ export interface GetEntitiesRequest { filter?: EntityFilterQuery; limit?: number; offset?: number; - order?: EntityOrderQuery; } // @public diff --git a/plugins/apollo-explorer/api-report.md b/plugins/apollo-explorer/api-report.md index 1d3b41eac1..7272903b0c 100644 --- a/plugins/apollo-explorer/api-report.md +++ b/plugins/apollo-explorer/api-report.md @@ -25,7 +25,7 @@ export const ApolloExplorerPage: (props: { displayOptions: { docsPanelState?: 'closed' | 'open' | undefined; showHeadersAndEnvVars?: boolean | undefined; - theme?: 'dark' | 'light' | undefined; + theme?: 'light' | 'dark' | undefined; }; } | undefined; diff --git a/plugins/bazaar/api-report.md b/plugins/bazaar/api-report.md index afbb7b5504..d7c463888a 100644 --- a/plugins/bazaar/api-report.md +++ b/plugins/bazaar/api-report.md @@ -5,9 +5,7 @@ ```ts /// -import { ApiHolder } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; -import { Entity } from '@backstage/catalog-model'; import { RouteRef } from '@backstage/core-plugin-api'; // @public (undocumented) @@ -38,14 +36,6 @@ export const bazaarPlugin: BackstagePlugin< // @public (undocumented) export const EntityBazaarInfoCard: () => JSX.Element | null; -// @public (undocumented) -export const isBazaarAvailable: ( - entity: Entity, - context: { - apis: ApiHolder; - }, -) => Promise; - // @public (undocumented) export const SortView: () => JSX.Element; diff --git a/plugins/catalog-backend-module-github/api-report.md b/plugins/catalog-backend-module-github/api-report.md index 78ffd5b018..8ccfdb09ee 100644 --- a/plugins/catalog-backend-module-github/api-report.md +++ b/plugins/catalog-backend-module-github/api-report.md @@ -178,9 +178,7 @@ export class GitHubOrgEntityProvider extends GithubOrgEntityProvider { } // @public -export class GithubOrgEntityProvider - implements EntityProvider, EventSubscriber -{ +export class GithubOrgEntityProvider implements EntityProvider { constructor(options: { id: string; orgUrl: string; @@ -199,11 +197,7 @@ export class GithubOrgEntityProvider ): GithubOrgEntityProvider; // (undocumented) getProviderName(): string; - // (undocumented) - onEvent(params: EventParams): Promise; read(options?: { logger?: Logger }): Promise; - // (undocumented) - supportsEventTopics(): string[]; } // @public @deprecated (undocumented) diff --git a/plugins/code-coverage-backend/api-report.md b/plugins/code-coverage-backend/api-report.md index 440af50714..c33874064b 100644 --- a/plugins/code-coverage-backend/api-report.md +++ b/plugins/code-coverage-backend/api-report.md @@ -3,7 +3,6 @@ > 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 express from 'express'; import { Logger } from 'winston'; @@ -16,8 +15,6 @@ export function createRouter(options: RouterOptions): Promise; // @public export interface RouterOptions { - // (undocumented) - catalogApi?: CatalogApi; // (undocumented) config: Config; // (undocumented) diff --git a/plugins/explore/api-report.md b/plugins/explore/api-report.md index d10f5ddf95..d184ce01a4 100644 --- a/plugins/explore/api-report.md +++ b/plugins/explore/api-report.md @@ -9,6 +9,7 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { default as default_2 } from 'react'; import { DiscoveryApi } from '@backstage/core-plugin-api'; +import { DomainEntity } from '@backstage/catalog-model'; import { ExploreToolsConfig } from '@backstage/plugin-explore-react'; import { ExternalRouteRef } from '@backstage/core-plugin-api'; import { FetchApi } from '@backstage/core-plugin-api'; @@ -30,6 +31,9 @@ export const catalogEntityRouteRef: ExternalRouteRef< true >; +// @public (undocumented) +export const DomainCard: (props: { entity: DomainEntity }) => JSX.Element; + // @public (undocumented) export const DomainExplorerContent: (props: { title?: string | undefined; diff --git a/plugins/rollbar-backend/api-report.md b/plugins/rollbar-backend/api-report.md index 58a5fb0252..9086121306 100644 --- a/plugins/rollbar-backend/api-report.md +++ b/plugins/rollbar-backend/api-report.md @@ -29,8 +29,8 @@ export class RollbarApi { }, ): Promise< { - count: number; timestamp: number; + count: number; }[] >; // (undocumented) @@ -51,8 +51,8 @@ export class RollbarApi { }, ): Promise< { - count: number; timestamp: number; + count: number; }[] >; // (undocumented) @@ -64,8 +64,8 @@ export class RollbarApi { }>; // (undocumented) getProjectItems(projectName: string): Promise<{ - page: number; items: RollbarItem[]; + page: number; totalCount: number; }>; // (undocumented) diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 66757a01cd..94377d7720 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -195,12 +195,6 @@ export function createGithubRepoCreateAction(options: { gitAuthorEmail?: string | undefined; allowRebaseMerge?: boolean | undefined; allowSquashMerge?: boolean | undefined; - squashMergeCommitTitle?: 'PR_TITLE' | 'COMMIT_OR_PR_TITLE' | undefined; - squashMergeCommitMessage?: - | 'PR_BODY' - | 'COMMIT_MESSAGES' - | 'BLANK' - | undefined; allowMergeCommit?: boolean | undefined; allowAutoMerge?: boolean | undefined; requireCodeOwnerReviews?: boolean | undefined; @@ -214,16 +208,16 @@ export function createGithubRepoCreateAction(options: { requiredStatusCheckContexts?: string[] | undefined; requireBranchesToBeUpToDate?: boolean | undefined; requiredConversationResolution?: boolean | undefined; - repoVisibility?: 'internal' | 'private' | 'public' | undefined; + repoVisibility?: 'public' | 'private' | 'internal' | undefined; collaborators?: | ( | { user: string; - access: string; + access: 'pull' | 'push' | 'admin' | 'maintain' | 'triage'; } | { team: string; - access: string; + access: 'pull' | 'push' | 'admin' | 'maintain' | 'triage'; } | { username: string; @@ -231,9 +225,6 @@ export function createGithubRepoCreateAction(options: { } )[] | undefined; - hasProjects?: boolean | undefined; - hasWiki?: boolean | undefined; - hasIssues?: boolean | undefined; token?: string | undefined; topics?: string[] | undefined; }>; @@ -307,7 +298,7 @@ export function createPublishBitbucketAction(options: { repoUrl: string; description?: string | undefined; defaultBranch?: string | undefined; - repoVisibility?: 'private' | 'public' | undefined; + repoVisibility?: 'public' | 'private' | undefined; sourcePath?: string | undefined; enableLFS?: boolean | undefined; token?: string | undefined; @@ -324,7 +315,7 @@ export function createPublishBitbucketCloudAction(options: { repoUrl: string; description?: string | undefined; defaultBranch?: string | undefined; - repoVisibility?: 'private' | 'public' | undefined; + repoVisibility?: 'public' | 'private' | undefined; sourcePath?: string | undefined; token?: string | undefined; }>; @@ -337,7 +328,7 @@ export function createPublishBitbucketServerAction(options: { repoUrl: string; description?: string | undefined; defaultBranch?: string | undefined; - repoVisibility?: 'private' | 'public' | undefined; + repoVisibility?: 'public' | 'private' | undefined; sourcePath?: string | undefined; enableLFS?: boolean | undefined; token?: string | undefined; @@ -389,12 +380,6 @@ export function createPublishGithubAction(options: { gitAuthorEmail?: string | undefined; allowRebaseMerge?: boolean | undefined; allowSquashMerge?: boolean | undefined; - squashMergeCommitTitle?: 'PR_TITLE' | 'COMMIT_OR_PR_TITLE' | undefined; - squashMergeCommitMessage?: - | 'PR_BODY' - | 'COMMIT_MESSAGES' - | 'BLANK' - | undefined; allowMergeCommit?: boolean | undefined; allowAutoMerge?: boolean | undefined; sourcePath?: string | undefined; @@ -410,16 +395,16 @@ export function createPublishGithubAction(options: { requiredStatusCheckContexts?: string[] | undefined; requireBranchesToBeUpToDate?: boolean | undefined; requiredConversationResolution?: boolean | undefined; - repoVisibility?: 'internal' | 'private' | 'public' | undefined; + repoVisibility?: 'public' | 'private' | 'internal' | undefined; collaborators?: | ( | { user: string; - access: string; + access: 'pull' | 'push' | 'admin' | 'maintain' | 'triage'; } | { team: string; - access: string; + access: 'pull' | 'push' | 'admin' | 'maintain' | 'triage'; } | { username: string; @@ -427,9 +412,6 @@ export function createPublishGithubAction(options: { } )[] | undefined; - hasProjects?: boolean | undefined; - hasWiki?: boolean | undefined; - hasIssues?: boolean | undefined; token?: string | undefined; topics?: string[] | undefined; }>; @@ -459,7 +441,7 @@ export function createPublishGitlabAction(options: { }): TemplateAction<{ repoUrl: string; defaultBranch?: string | undefined; - repoVisibility?: 'internal' | 'private' | 'public' | undefined; + repoVisibility?: 'public' | 'private' | 'internal' | undefined; sourcePath?: string | undefined; token?: string | undefined; gitCommitMessage?: string | undefined; @@ -480,7 +462,7 @@ export const createPublishGitlabMergeRequestAction: (options: { sourcePath?: string | undefined; targetPath?: string | undefined; token?: string | undefined; - commitAction?: 'update' | 'delete' | 'create' | undefined; + commitAction?: 'create' | 'update' | 'delete' | undefined; projectid?: string | undefined; removeSourceBranch?: boolean | undefined; assignee?: string | undefined; diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index 1c4d163123..d936542cfe 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -11,6 +11,7 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; import { ComponentType } from 'react'; import { DiscoveryApi } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; +import type { ErrorTransformer } from '@rjsf/utils'; import { Extension } from '@backstage/core-plugin-api'; import { ExternalRouteRef } from '@backstage/core-plugin-api'; import { FetchApi } from '@backstage/core-plugin-api'; @@ -18,8 +19,7 @@ import { FieldProps } from '@rjsf/core'; import { FieldProps as FieldProps_2 } from '@rjsf/utils'; import { FieldValidation } from '@rjsf/core'; import { FieldValidation as FieldValidation_2 } from '@rjsf/utils'; -import type { FormProps as FormProps_2 } from '@rjsf/core'; -import type { FormProps as FormProps_3 } from '@rjsf/core-v5'; +import type { FormProps } from '@rjsf/core'; import { IdentityApi } from '@backstage/core-plugin-api'; import { JsonObject } from '@backstage/types'; import { JSONSchema7 } from 'json-schema'; @@ -88,10 +88,6 @@ export const EntityPickerFieldExtension: FieldExtensionComponent< defaultNamespace?: string | false | undefined; allowedKinds?: string[] | undefined; allowArbitraryValues?: boolean | undefined; - catalogFilter?: - | Record - | Record[] - | undefined; } >; @@ -103,10 +99,6 @@ export const EntityPickerFieldSchema: FieldSchema< defaultNamespace?: string | false | undefined; allowedKinds?: string[] | undefined; allowArbitraryValues?: boolean | undefined; - catalogFilter?: - | Record - | Record[] - | undefined; } >; @@ -175,12 +167,6 @@ export interface FieldSchema { readonly uiOptionsType: TUiOptions; } -// @alpha -export type FormProps = Pick< - FormProps_3, - 'transformErrors' | 'noHtml5Validate' ->; - // @public export type LayoutComponent<_TInputProps> = () => null; @@ -193,7 +179,7 @@ export interface LayoutOptions

{ } // @public -export type LayoutTemplate = FormProps_2['ObjectFieldTemplate']; +export type LayoutTemplate = FormProps['ObjectFieldTemplate']; // @public export type ListActionsResponse = Array<{ @@ -278,7 +264,7 @@ export type NextRouterProps = { TaskPageComponent?: React_2.ComponentType<{}>; }; groups?: TemplateGroupFilter[]; - FormProps?: FormProps; + transformErrors?: ErrorTransformer; }; // @alpha @@ -324,10 +310,6 @@ export const OwnerPickerFieldExtension: FieldExtensionComponent< defaultNamespace?: string | false | undefined; allowedKinds?: string[] | undefined; allowArbitraryValues?: boolean | undefined; - catalogFilter?: - | Record - | Record[] - | undefined; } >; @@ -338,10 +320,6 @@ export const OwnerPickerFieldSchema: FieldSchema< defaultNamespace?: string | false | undefined; allowedKinds?: string[] | undefined; allowArbitraryValues?: boolean | undefined; - catalogFilter?: - | Record - | Record[] - | undefined; } >; @@ -370,10 +348,10 @@ export const RepoUrlPickerFieldExtension: FieldExtensionComponent< | { additionalScopes?: | { - azure?: string[] | undefined; github?: string[] | undefined; gitlab?: string[] | undefined; bitbucket?: string[] | undefined; + azure?: string[] | undefined; gerrit?: string[] | undefined; } | undefined; @@ -396,10 +374,10 @@ export const RepoUrlPickerFieldSchema: FieldSchema< | { additionalScopes?: | { - azure?: string[] | undefined; github?: string[] | undefined; gitlab?: string[] | undefined; bitbucket?: string[] | undefined; + azure?: string[] | undefined; gerrit?: string[] | undefined; } | undefined; diff --git a/plugins/techdocs-react/api-report.md b/plugins/techdocs-react/api-report.md index f1d6d3f177..09da4e012c 100644 --- a/plugins/techdocs-react/api-report.md +++ b/plugins/techdocs-react/api-report.md @@ -32,9 +32,6 @@ export const SHADOW_DOM_STYLE_LOAD_EVENT = 'TECH_DOCS_SHADOW_DOM_STYLE_LOAD'; // @public export type SyncResult = 'cached' | 'updated'; -// @public -export const TECHDOCS_ADDONS_KEY = 'techdocs.addons.addon.v1'; - // @public export const TECHDOCS_ADDONS_WRAPPER_KEY = 'techdocs.addons.wrapper.v1'; From 268f58aea16d52b1e2173c4a1602ecc81d493b07 Mon Sep 17 00:00:00 2001 From: sblausten Date: Tue, 3 Jan 2023 15:51:55 +0100 Subject: [PATCH 009/137] Revert "Build api reports" This reverts commit 6a5dc558f69d521ac63fc0820b8631262cc45673. Signed-off-by: sblausten --- packages/backend-app-api/api-report.md | 5 + packages/backend-common/api-report.md | 87 +++++------------ packages/backend-plugin-api/api-report.md | 94 +++++++++++++++++-- packages/catalog-client/api-report.md | 12 +++ plugins/apollo-explorer/api-report.md | 2 +- plugins/bazaar/api-report.md | 10 ++ .../api-report.md | 8 +- plugins/code-coverage-backend/api-report.md | 3 + plugins/explore/api-report.md | 4 - plugins/rollbar-backend/api-report.md | 6 +- plugins/scaffolder-backend/api-report.md | 40 +++++--- plugins/scaffolder/api-report.md | 34 +++++-- plugins/techdocs-react/api-report.md | 3 + 13 files changed, 209 insertions(+), 99 deletions(-) diff --git a/packages/backend-app-api/api-report.md b/packages/backend-app-api/api-report.md index 33e732cf05..ef88d9a9d0 100644 --- a/packages/backend-app-api/api-report.md +++ b/packages/backend-app-api/api-report.md @@ -83,6 +83,11 @@ export const permissionsFactory: ( options?: undefined, ) => ServiceFactory; +// @public +export const rootLifecycleFactory: ( + options?: undefined, +) => ServiceFactory; + // @public (undocumented) export const rootLoggerFactory: ( options?: undefined, diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md index 784f3295c6..e8b41e21bb 100644 --- a/packages/backend-common/api-report.md +++ b/packages/backend-common/api-report.md @@ -30,12 +30,23 @@ import { KubeConfig } from '@kubernetes/client-node'; import { LoadConfigOptionsRemote } from '@backstage/config-loader'; import { Logger } from 'winston'; import { MergeResult } from 'isomorphic-git'; +import { DiscoveryService as PluginEndpointDiscovery } from '@backstage/backend-plugin-api'; import { PushResult } from 'isomorphic-git'; import { Readable } from 'stream'; import { ReadCommitResult } from 'isomorphic-git'; +import { ReadTreeOptions } from '@backstage/backend-plugin-api'; +import { ReadTreeResponse } from '@backstage/backend-plugin-api'; +import { ReadTreeResponseDirOptions } from '@backstage/backend-plugin-api'; +import { ReadTreeResponseFile } from '@backstage/backend-plugin-api'; +import { ReadUrlOptions } from '@backstage/backend-plugin-api'; +import { ReadUrlResponse } from '@backstage/backend-plugin-api'; import { RequestHandler } from 'express'; import { Router } from 'express'; +import { SearchOptions } from '@backstage/backend-plugin-api'; +import { SearchResponse } from '@backstage/backend-plugin-api'; +import { SearchResponseFile } from '@backstage/backend-plugin-api'; import { Server } from 'http'; +import { UrlReaderService as UrlReader } from '@backstage/backend-plugin-api'; import { V1PodTemplateSpec } from '@kubernetes/client-node'; import * as winston from 'winston'; import { Writable } from 'stream'; @@ -520,11 +531,7 @@ export interface PluginDatabaseManager { }; } -// @public -export type PluginEndpointDiscovery = { - getBaseUrl(pluginId: string): Promise; - getExternalBaseUrl(pluginId: string): Promise; -}; +export { PluginEndpointDiscovery }; // @public export type ReaderFactory = (options: { @@ -533,30 +540,11 @@ export type ReaderFactory = (options: { treeResponseFactory: ReadTreeResponseFactory; }) => UrlReaderPredicateTuple[]; -// @public -export type ReadTreeOptions = { - filter?( - path: string, - info?: { - size: number; - }, - ): boolean; - etag?: string; - signal?: AbortSignal; -}; +export { ReadTreeOptions }; -// @public -export type ReadTreeResponse = { - files(): Promise; - archive(): Promise; - dir(options?: ReadTreeResponseDirOptions): Promise; - etag: string; -}; +export { ReadTreeResponse }; -// @public -export type ReadTreeResponseDirOptions = { - targetDir?: string; -}; +export { ReadTreeResponseDirOptions }; // @public export interface ReadTreeResponseFactory { @@ -587,24 +575,11 @@ export type ReadTreeResponseFactoryOptions = { ) => boolean; }; -// @public -export type ReadTreeResponseFile = { - path: string; - content(): Promise; -}; +export { ReadTreeResponseFile }; -// @public -export type ReadUrlOptions = { - etag?: string; - signal?: AbortSignal; -}; +export { ReadUrlOptions }; -// @public -export type ReadUrlResponse = { - buffer(): Promise; - stream?(): Readable; - etag?: string; -}; +export { ReadUrlResponse }; // @public export class ReadUrlResponseFactory { @@ -652,23 +627,11 @@ export type RunContainerOptions = { pullImage?: boolean; }; -// @public -export type SearchOptions = { - etag?: string; - signal?: AbortSignal; -}; +export { SearchOptions }; -// @public -export type SearchResponse = { - files: SearchResponseFile[]; - etag: string; -}; +export { SearchResponse }; -// @public -export type SearchResponseFile = { - url: string; - content(): Promise; -}; +export { SearchResponseFile }; // @public export class ServerTokenManager implements TokenManager { @@ -755,13 +718,7 @@ export interface TokenManager { }>; } -// @public -export type UrlReader = { - read(url: string): Promise; - readUrl(url: string, options?: ReadUrlOptions): Promise; - readTree(url: string, options?: ReadTreeOptions): Promise; - search(url: string, options?: SearchOptions): Promise; -}; +export { UrlReader }; // @public export type UrlReaderPredicateTuple = { diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md index 545728b386..e0fa44eb20 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.md @@ -3,6 +3,8 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +/// + import { Config } from '@backstage/config'; import { Handler } from 'express'; import { Logger } from 'winston'; @@ -10,11 +12,10 @@ import { PermissionAuthorizer } from '@backstage/plugin-permission-common'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { PluginCacheManager } from '@backstage/backend-common'; import { PluginDatabaseManager } from '@backstage/backend-common'; -import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; +import { Readable } from 'stream'; import { TokenManager } from '@backstage/backend-common'; import { TransportStreamOptions } from 'winston-transport'; -import { UrlReader } from '@backstage/backend-common'; // @public (undocumented) export interface BackendFeature { @@ -89,6 +90,7 @@ declare namespace coreServices { tokenManagerServiceRef as tokenManager, permissionsServiceRef as permissions, schedulerServiceRef as scheduler, + rootLifecycleServiceRef as rootLifecycle, rootLoggerServiceRef as rootLogger, pluginMetadataServiceRef as pluginMetadata, lifecycleServiceRef as lifecycle, @@ -166,11 +168,14 @@ export type DatabaseService = PluginDatabaseManager; // @public (undocumented) const databaseServiceRef: ServiceRef; -// @public (undocumented) -export type DiscoveryService = PluginEndpointDiscovery; +// @public +export type DiscoveryService = { + getBaseUrl(pluginId: string): Promise; + getExternalBaseUrl(pluginId: string): Promise; +}; // @public (undocumented) -const discoveryServiceRef: ServiceRef; +const discoveryServiceRef: ServiceRef; // @public export type ExtensionPoint = { @@ -200,6 +205,7 @@ const lifecycleServiceRef: ServiceRef; // @public (undocumented) export type LifecycleServiceShutdownHook = { fn: () => void | Promise; + labels?: Record; }; // @public (undocumented) @@ -245,6 +251,56 @@ export interface PluginMetadataService { // @public (undocumented) const pluginMetadataServiceRef: ServiceRef; +// @public +export type ReadTreeOptions = { + filter?( + path: string, + info?: { + size: number; + }, + ): boolean; + etag?: string; + signal?: AbortSignal; +}; + +// @public +export type ReadTreeResponse = { + files(): Promise; + archive(): Promise; + dir(options?: ReadTreeResponseDirOptions): Promise; + etag: string; +}; + +// @public +export type ReadTreeResponseDirOptions = { + targetDir?: string; +}; + +// @public +export type ReadTreeResponseFile = { + path: string; + content(): Promise; +}; + +// @public +export type ReadUrlOptions = { + etag?: string; + signal?: AbortSignal; +}; + +// @public +export type ReadUrlResponse = { + buffer(): Promise; + stream?(): Readable; + etag?: string; +}; + +// @public (undocumented) +export type RootLifecycleService = LifecycleService; + +// @public (undocumented) +const rootLifecycleServiceRef: ServiceRef; + // @public (undocumented) export type RootLoggerService = LoggerService; @@ -257,6 +313,24 @@ export type SchedulerService = PluginTaskScheduler; // @public (undocumented) const schedulerServiceRef: ServiceRef; +// @public +export type SearchOptions = { + etag?: string; + signal?: AbortSignal; +}; + +// @public +export type SearchResponse = { + files: SearchResponseFile[]; + etag: string; +}; + +// @public +export type SearchResponseFile = { + url: string; + content(): Promise; +}; + // @public (undocumented) export type ServiceFactory = | { @@ -307,9 +381,13 @@ export type TypesToServiceRef = { [key in keyof T]: ServiceRef; }; -// @public (undocumented) -export type UrlReaderService = UrlReader; +// @public +export type UrlReaderService = { + readUrl(url: string, options?: ReadUrlOptions): Promise; + readTree(url: string, options?: ReadTreeOptions): Promise; + search(url: string, options?: SearchOptions): Promise; +}; // @public (undocumented) -const urlReaderServiceRef: ServiceRef; +const urlReaderServiceRef: ServiceRef; ``` diff --git a/packages/catalog-client/api-report.md b/packages/catalog-client/api-report.md index 2f76be79e2..a81314308b 100644 --- a/packages/catalog-client/api-report.md +++ b/packages/catalog-client/api-report.md @@ -161,6 +161,17 @@ export type EntityFilterQuery = | Record[] | Record; +// @public +export type EntityOrderQuery = + | { + field: string; + order: 'asc' | 'desc'; + } + | Array<{ + field: string; + order: 'asc' | 'desc'; + }>; + // @public export interface GetEntitiesByRefsRequest { entityRefs: string[]; @@ -179,6 +190,7 @@ export interface GetEntitiesRequest { filter?: EntityFilterQuery; limit?: number; offset?: number; + order?: EntityOrderQuery; } // @public diff --git a/plugins/apollo-explorer/api-report.md b/plugins/apollo-explorer/api-report.md index 7272903b0c..1d3b41eac1 100644 --- a/plugins/apollo-explorer/api-report.md +++ b/plugins/apollo-explorer/api-report.md @@ -25,7 +25,7 @@ export const ApolloExplorerPage: (props: { displayOptions: { docsPanelState?: 'closed' | 'open' | undefined; showHeadersAndEnvVars?: boolean | undefined; - theme?: 'light' | 'dark' | undefined; + theme?: 'dark' | 'light' | undefined; }; } | undefined; diff --git a/plugins/bazaar/api-report.md b/plugins/bazaar/api-report.md index d7c463888a..afbb7b5504 100644 --- a/plugins/bazaar/api-report.md +++ b/plugins/bazaar/api-report.md @@ -5,7 +5,9 @@ ```ts /// +import { ApiHolder } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; +import { Entity } from '@backstage/catalog-model'; import { RouteRef } from '@backstage/core-plugin-api'; // @public (undocumented) @@ -36,6 +38,14 @@ export const bazaarPlugin: BackstagePlugin< // @public (undocumented) export const EntityBazaarInfoCard: () => JSX.Element | null; +// @public (undocumented) +export const isBazaarAvailable: ( + entity: Entity, + context: { + apis: ApiHolder; + }, +) => Promise; + // @public (undocumented) export const SortView: () => JSX.Element; diff --git a/plugins/catalog-backend-module-github/api-report.md b/plugins/catalog-backend-module-github/api-report.md index 8ccfdb09ee..78ffd5b018 100644 --- a/plugins/catalog-backend-module-github/api-report.md +++ b/plugins/catalog-backend-module-github/api-report.md @@ -178,7 +178,9 @@ export class GitHubOrgEntityProvider extends GithubOrgEntityProvider { } // @public -export class GithubOrgEntityProvider implements EntityProvider { +export class GithubOrgEntityProvider + implements EntityProvider, EventSubscriber +{ constructor(options: { id: string; orgUrl: string; @@ -197,7 +199,11 @@ export class GithubOrgEntityProvider implements EntityProvider { ): GithubOrgEntityProvider; // (undocumented) getProviderName(): string; + // (undocumented) + onEvent(params: EventParams): Promise; read(options?: { logger?: Logger }): Promise; + // (undocumented) + supportsEventTopics(): string[]; } // @public @deprecated (undocumented) diff --git a/plugins/code-coverage-backend/api-report.md b/plugins/code-coverage-backend/api-report.md index c33874064b..440af50714 100644 --- a/plugins/code-coverage-backend/api-report.md +++ b/plugins/code-coverage-backend/api-report.md @@ -3,6 +3,7 @@ > 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 express from 'express'; import { Logger } from 'winston'; @@ -15,6 +16,8 @@ export function createRouter(options: RouterOptions): Promise; // @public export interface RouterOptions { + // (undocumented) + catalogApi?: CatalogApi; // (undocumented) config: Config; // (undocumented) diff --git a/plugins/explore/api-report.md b/plugins/explore/api-report.md index d184ce01a4..d10f5ddf95 100644 --- a/plugins/explore/api-report.md +++ b/plugins/explore/api-report.md @@ -9,7 +9,6 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { default as default_2 } from 'react'; import { DiscoveryApi } from '@backstage/core-plugin-api'; -import { DomainEntity } from '@backstage/catalog-model'; import { ExploreToolsConfig } from '@backstage/plugin-explore-react'; import { ExternalRouteRef } from '@backstage/core-plugin-api'; import { FetchApi } from '@backstage/core-plugin-api'; @@ -31,9 +30,6 @@ export const catalogEntityRouteRef: ExternalRouteRef< true >; -// @public (undocumented) -export const DomainCard: (props: { entity: DomainEntity }) => JSX.Element; - // @public (undocumented) export const DomainExplorerContent: (props: { title?: string | undefined; diff --git a/plugins/rollbar-backend/api-report.md b/plugins/rollbar-backend/api-report.md index 9086121306..58a5fb0252 100644 --- a/plugins/rollbar-backend/api-report.md +++ b/plugins/rollbar-backend/api-report.md @@ -29,8 +29,8 @@ export class RollbarApi { }, ): Promise< { - timestamp: number; count: number; + timestamp: number; }[] >; // (undocumented) @@ -51,8 +51,8 @@ export class RollbarApi { }, ): Promise< { - timestamp: number; count: number; + timestamp: number; }[] >; // (undocumented) @@ -64,8 +64,8 @@ export class RollbarApi { }>; // (undocumented) getProjectItems(projectName: string): Promise<{ - items: RollbarItem[]; page: number; + items: RollbarItem[]; totalCount: number; }>; // (undocumented) diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 94377d7720..66757a01cd 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -195,6 +195,12 @@ export function createGithubRepoCreateAction(options: { gitAuthorEmail?: string | undefined; allowRebaseMerge?: boolean | undefined; allowSquashMerge?: boolean | undefined; + squashMergeCommitTitle?: 'PR_TITLE' | 'COMMIT_OR_PR_TITLE' | undefined; + squashMergeCommitMessage?: + | 'PR_BODY' + | 'COMMIT_MESSAGES' + | 'BLANK' + | undefined; allowMergeCommit?: boolean | undefined; allowAutoMerge?: boolean | undefined; requireCodeOwnerReviews?: boolean | undefined; @@ -208,16 +214,16 @@ export function createGithubRepoCreateAction(options: { requiredStatusCheckContexts?: string[] | undefined; requireBranchesToBeUpToDate?: boolean | undefined; requiredConversationResolution?: boolean | undefined; - repoVisibility?: 'public' | 'private' | 'internal' | undefined; + repoVisibility?: 'internal' | 'private' | 'public' | undefined; collaborators?: | ( | { user: string; - access: 'pull' | 'push' | 'admin' | 'maintain' | 'triage'; + access: string; } | { team: string; - access: 'pull' | 'push' | 'admin' | 'maintain' | 'triage'; + access: string; } | { username: string; @@ -225,6 +231,9 @@ export function createGithubRepoCreateAction(options: { } )[] | undefined; + hasProjects?: boolean | undefined; + hasWiki?: boolean | undefined; + hasIssues?: boolean | undefined; token?: string | undefined; topics?: string[] | undefined; }>; @@ -298,7 +307,7 @@ export function createPublishBitbucketAction(options: { repoUrl: string; description?: string | undefined; defaultBranch?: string | undefined; - repoVisibility?: 'public' | 'private' | undefined; + repoVisibility?: 'private' | 'public' | undefined; sourcePath?: string | undefined; enableLFS?: boolean | undefined; token?: string | undefined; @@ -315,7 +324,7 @@ export function createPublishBitbucketCloudAction(options: { repoUrl: string; description?: string | undefined; defaultBranch?: string | undefined; - repoVisibility?: 'public' | 'private' | undefined; + repoVisibility?: 'private' | 'public' | undefined; sourcePath?: string | undefined; token?: string | undefined; }>; @@ -328,7 +337,7 @@ export function createPublishBitbucketServerAction(options: { repoUrl: string; description?: string | undefined; defaultBranch?: string | undefined; - repoVisibility?: 'public' | 'private' | undefined; + repoVisibility?: 'private' | 'public' | undefined; sourcePath?: string | undefined; enableLFS?: boolean | undefined; token?: string | undefined; @@ -380,6 +389,12 @@ export function createPublishGithubAction(options: { gitAuthorEmail?: string | undefined; allowRebaseMerge?: boolean | undefined; allowSquashMerge?: boolean | undefined; + squashMergeCommitTitle?: 'PR_TITLE' | 'COMMIT_OR_PR_TITLE' | undefined; + squashMergeCommitMessage?: + | 'PR_BODY' + | 'COMMIT_MESSAGES' + | 'BLANK' + | undefined; allowMergeCommit?: boolean | undefined; allowAutoMerge?: boolean | undefined; sourcePath?: string | undefined; @@ -395,16 +410,16 @@ export function createPublishGithubAction(options: { requiredStatusCheckContexts?: string[] | undefined; requireBranchesToBeUpToDate?: boolean | undefined; requiredConversationResolution?: boolean | undefined; - repoVisibility?: 'public' | 'private' | 'internal' | undefined; + repoVisibility?: 'internal' | 'private' | 'public' | undefined; collaborators?: | ( | { user: string; - access: 'pull' | 'push' | 'admin' | 'maintain' | 'triage'; + access: string; } | { team: string; - access: 'pull' | 'push' | 'admin' | 'maintain' | 'triage'; + access: string; } | { username: string; @@ -412,6 +427,9 @@ export function createPublishGithubAction(options: { } )[] | undefined; + hasProjects?: boolean | undefined; + hasWiki?: boolean | undefined; + hasIssues?: boolean | undefined; token?: string | undefined; topics?: string[] | undefined; }>; @@ -441,7 +459,7 @@ export function createPublishGitlabAction(options: { }): TemplateAction<{ repoUrl: string; defaultBranch?: string | undefined; - repoVisibility?: 'public' | 'private' | 'internal' | undefined; + repoVisibility?: 'internal' | 'private' | 'public' | undefined; sourcePath?: string | undefined; token?: string | undefined; gitCommitMessage?: string | undefined; @@ -462,7 +480,7 @@ export const createPublishGitlabMergeRequestAction: (options: { sourcePath?: string | undefined; targetPath?: string | undefined; token?: string | undefined; - commitAction?: 'create' | 'update' | 'delete' | undefined; + commitAction?: 'update' | 'delete' | 'create' | undefined; projectid?: string | undefined; removeSourceBranch?: boolean | undefined; assignee?: string | undefined; diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index d936542cfe..1c4d163123 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -11,7 +11,6 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; import { ComponentType } from 'react'; import { DiscoveryApi } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; -import type { ErrorTransformer } from '@rjsf/utils'; import { Extension } from '@backstage/core-plugin-api'; import { ExternalRouteRef } from '@backstage/core-plugin-api'; import { FetchApi } from '@backstage/core-plugin-api'; @@ -19,7 +18,8 @@ import { FieldProps } from '@rjsf/core'; import { FieldProps as FieldProps_2 } from '@rjsf/utils'; import { FieldValidation } from '@rjsf/core'; import { FieldValidation as FieldValidation_2 } from '@rjsf/utils'; -import type { FormProps } from '@rjsf/core'; +import type { FormProps as FormProps_2 } from '@rjsf/core'; +import type { FormProps as FormProps_3 } from '@rjsf/core-v5'; import { IdentityApi } from '@backstage/core-plugin-api'; import { JsonObject } from '@backstage/types'; import { JSONSchema7 } from 'json-schema'; @@ -88,6 +88,10 @@ export const EntityPickerFieldExtension: FieldExtensionComponent< defaultNamespace?: string | false | undefined; allowedKinds?: string[] | undefined; allowArbitraryValues?: boolean | undefined; + catalogFilter?: + | Record + | Record[] + | undefined; } >; @@ -99,6 +103,10 @@ export const EntityPickerFieldSchema: FieldSchema< defaultNamespace?: string | false | undefined; allowedKinds?: string[] | undefined; allowArbitraryValues?: boolean | undefined; + catalogFilter?: + | Record + | Record[] + | undefined; } >; @@ -167,6 +175,12 @@ export interface FieldSchema { readonly uiOptionsType: TUiOptions; } +// @alpha +export type FormProps = Pick< + FormProps_3, + 'transformErrors' | 'noHtml5Validate' +>; + // @public export type LayoutComponent<_TInputProps> = () => null; @@ -179,7 +193,7 @@ export interface LayoutOptions

{ } // @public -export type LayoutTemplate = FormProps['ObjectFieldTemplate']; +export type LayoutTemplate = FormProps_2['ObjectFieldTemplate']; // @public export type ListActionsResponse = Array<{ @@ -264,7 +278,7 @@ export type NextRouterProps = { TaskPageComponent?: React_2.ComponentType<{}>; }; groups?: TemplateGroupFilter[]; - transformErrors?: ErrorTransformer; + FormProps?: FormProps; }; // @alpha @@ -310,6 +324,10 @@ export const OwnerPickerFieldExtension: FieldExtensionComponent< defaultNamespace?: string | false | undefined; allowedKinds?: string[] | undefined; allowArbitraryValues?: boolean | undefined; + catalogFilter?: + | Record + | Record[] + | undefined; } >; @@ -320,6 +338,10 @@ export const OwnerPickerFieldSchema: FieldSchema< defaultNamespace?: string | false | undefined; allowedKinds?: string[] | undefined; allowArbitraryValues?: boolean | undefined; + catalogFilter?: + | Record + | Record[] + | undefined; } >; @@ -348,10 +370,10 @@ export const RepoUrlPickerFieldExtension: FieldExtensionComponent< | { additionalScopes?: | { + azure?: string[] | undefined; github?: string[] | undefined; gitlab?: string[] | undefined; bitbucket?: string[] | undefined; - azure?: string[] | undefined; gerrit?: string[] | undefined; } | undefined; @@ -374,10 +396,10 @@ export const RepoUrlPickerFieldSchema: FieldSchema< | { additionalScopes?: | { + azure?: string[] | undefined; github?: string[] | undefined; gitlab?: string[] | undefined; bitbucket?: string[] | undefined; - azure?: string[] | undefined; gerrit?: string[] | undefined; } | undefined; diff --git a/plugins/techdocs-react/api-report.md b/plugins/techdocs-react/api-report.md index 09da4e012c..f1d6d3f177 100644 --- a/plugins/techdocs-react/api-report.md +++ b/plugins/techdocs-react/api-report.md @@ -32,6 +32,9 @@ export const SHADOW_DOM_STYLE_LOAD_EVENT = 'TECH_DOCS_SHADOW_DOM_STYLE_LOAD'; // @public export type SyncResult = 'cached' | 'updated'; +// @public +export const TECHDOCS_ADDONS_KEY = 'techdocs.addons.addon.v1'; + // @public export const TECHDOCS_ADDONS_WRAPPER_KEY = 'techdocs.addons.wrapper.v1'; From 26b4bbd8b22fe2104952becdab630ab839321089 Mon Sep 17 00:00:00 2001 From: sblausten Date: Tue, 3 Jan 2023 16:02:08 +0100 Subject: [PATCH 010/137] Api report Signed-off-by: sblausten --- plugins/explore/api-report.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/explore/api-report.md b/plugins/explore/api-report.md index d10f5ddf95..d184ce01a4 100644 --- a/plugins/explore/api-report.md +++ b/plugins/explore/api-report.md @@ -9,6 +9,7 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { default as default_2 } from 'react'; import { DiscoveryApi } from '@backstage/core-plugin-api'; +import { DomainEntity } from '@backstage/catalog-model'; import { ExploreToolsConfig } from '@backstage/plugin-explore-react'; import { ExternalRouteRef } from '@backstage/core-plugin-api'; import { FetchApi } from '@backstage/core-plugin-api'; @@ -30,6 +31,9 @@ export const catalogEntityRouteRef: ExternalRouteRef< true >; +// @public (undocumented) +export const DomainCard: (props: { entity: DomainEntity }) => JSX.Element; + // @public (undocumented) export const DomainExplorerContent: (props: { title?: string | undefined; From a70d460887d6f0487384985aa6ceda9900edd687 Mon Sep 17 00:00:00 2001 From: sblausten Date: Mon, 30 Jan 2023 09:53:47 +0100 Subject: [PATCH 011/137] Fix api report Signed-off-by: sblausten --- plugins/explore/api-report.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/plugins/explore/api-report.md b/plugins/explore/api-report.md index e7adde4b77..b6418fa3e9 100644 --- a/plugins/explore/api-report.md +++ b/plugins/explore/api-report.md @@ -9,7 +9,6 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { default as default_2 } from 'react'; import { DiscoveryApi } from '@backstage/core-plugin-api'; -import { DomainEntity } from '@backstage/catalog-model'; import { ExploreToolsConfig } from '@backstage/plugin-explore-react'; import { ExternalRouteRef } from '@backstage/core-plugin-api'; import { FetchApi } from '@backstage/core-plugin-api'; @@ -31,14 +30,17 @@ export const catalogEntityRouteRef: ExternalRouteRef< true >; -// @public (undocumented) -export const DomainCard: (props: { entity: DomainEntity }) => JSX.Element; - // @public (undocumented) export const DomainExplorerContent: (props: { title?: string | undefined; }) => JSX.Element; +// @public (undocumented) +export const EntityExplorerContent: (props: { + tabTitle?: string; + kind: string; +}) => JSX.Element; + // @public export interface ExploreApi { getTools(request?: GetExploreToolsRequest): Promise; From 3538d9ad2c4d19bef31d4280c56f27d0fed66227 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Thu, 2 Mar 2023 16:19:39 +0000 Subject: [PATCH 012/137] tweak exports to allow decoupling of backend plugins Signed-off-by: Brian Fletcher --- .changeset/tall-meals-dress.md | 5 +++++ packages/backend/src/index.ts | 15 ++++++--------- packages/backend/src/plugins/catalog.ts | 7 ++++--- .../src/plugins/catalogEventBasedProviders.ts | 3 ++- packages/backend/src/plugins/events.ts | 4 +--- packages/backend/src/types.ts | 2 ++ plugins/events-backend/api-report.md | 12 ++++++++++++ plugins/events-backend/src/index.ts | 1 + .../src/service/InMemoryEventBroker.ts | 2 ++ .../service/http/HttpPostIngressEventPublisher.ts | 2 +- 10 files changed, 36 insertions(+), 17 deletions(-) create mode 100644 .changeset/tall-meals-dress.md diff --git a/.changeset/tall-meals-dress.md b/.changeset/tall-meals-dress.md new file mode 100644 index 0000000000..42d50444aa --- /dev/null +++ b/.changeset/tall-meals-dress.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-backend': patch +--- + +Export `InMemoryEventBroker` to allow decoupling of the catalog and events backends in the `example-backend`. diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 011be941cf..3c07c3aad4 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -42,7 +42,6 @@ import { metricsInit, metricsHandler } from './metrics'; import auth from './plugins/auth'; import azureDevOps from './plugins/azure-devops'; import catalog from './plugins/catalog'; -import catalogEventBasedProviders from './plugins/catalogEventBasedProviders'; import codeCoverage from './plugins/codecoverage'; import entityFeedback from './plugins/entityFeedback'; import events from './plugins/events'; @@ -68,6 +67,7 @@ import linguist from './plugins/linguist'; import { PluginEnvironment } from './types'; import { ServerPermissionClient } from '@backstage/plugin-permission-node'; import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; +import { InMemoryEventBroker } from '@backstage/plugin-events-backend'; function makeCreateEnv(config: Config) { const root = getRootLogger(); @@ -85,6 +85,8 @@ function makeCreateEnv(config: Config) { discovery, }); + const eventBroker = new InMemoryEventBroker(root.child({ type: 'plugin' })); + root.info(`Created UrlReader ${reader}`); return (plugin: string): PluginEnvironment => { @@ -99,6 +101,7 @@ function makeCreateEnv(config: Config) { database, config, reader, + eventBroker, discovery, tokenManager, permissions, @@ -156,18 +159,12 @@ async function main() { const exploreEnv = useHotMemoize(module, () => createEnv('explore')); const lighthouseEnv = useHotMemoize(module, () => createEnv('lighthouse')); - const eventBasedEntityProviders = await catalogEventBasedProviders( - catalogEnv, - ); const linguistEnv = useHotMemoize(module, () => createEnv('linguist')); const apiRouter = Router(); - apiRouter.use( - '/catalog', - await catalog(catalogEnv, eventBasedEntityProviders), - ); + apiRouter.use('/catalog', await catalog(catalogEnv)); apiRouter.use('/code-coverage', await codeCoverage(codeCoverageEnv)); - apiRouter.use('/events', await events(eventsEnv, eventBasedEntityProviders)); + apiRouter.use('/events', await events(eventsEnv)); apiRouter.use('/rollbar', await rollbar(rollbarEnv)); apiRouter.use('/scaffolder', await scaffolder(scaffolderEnv)); apiRouter.use('/tech-insights', await techInsights(techInsightsEnv)); diff --git a/packages/backend/src/plugins/catalog.ts b/packages/backend/src/plugins/catalog.ts index f6fe25f86a..cd1a92ad7b 100644 --- a/packages/backend/src/plugins/catalog.ts +++ b/packages/backend/src/plugins/catalog.ts @@ -15,18 +15,19 @@ */ import { CatalogBuilder } from '@backstage/plugin-catalog-backend'; -import { EntityProvider } from '@backstage/plugin-catalog-node'; import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backend'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; +import createCatalogEventBasedProviders from './catalogEventBasedProviders'; export default async function createPlugin( env: PluginEnvironment, - providers?: Array, ): Promise { + const providers = await createCatalogEventBasedProviders(env); const builder = await CatalogBuilder.create(env); builder.addProcessor(new ScaffolderEntitiesProcessor()); - builder.addEntityProvider(providers ?? []); + env.eventBroker.subscribe(providers); + builder.addEntityProvider(providers); const { processingEngine, router } = await builder.build(); await processingEngine.start(); return router; diff --git a/packages/backend/src/plugins/catalogEventBasedProviders.ts b/packages/backend/src/plugins/catalogEventBasedProviders.ts index 346ed40fa6..3f1ea708df 100644 --- a/packages/backend/src/plugins/catalogEventBasedProviders.ts +++ b/packages/backend/src/plugins/catalogEventBasedProviders.ts @@ -29,10 +29,11 @@ class DemoEventBasedEntityProvider implements EntityProvider, EventSubscriber { ) {} async onEvent(params: EventParams): Promise { + const request = params.eventPayload as Request; this.logger.info( `onEvent: topic=${params.topic}, metadata=${JSON.stringify( params.metadata, - )}, payload=${JSON.stringify(params.eventPayload)}`, + )}, payload=${JSON.stringify(request.body)}`, ); } diff --git a/packages/backend/src/plugins/events.ts b/packages/backend/src/plugins/events.ts index 7427d34217..f3ff354240 100644 --- a/packages/backend/src/plugins/events.ts +++ b/packages/backend/src/plugins/events.ts @@ -18,13 +18,11 @@ import { EventsBackend, HttpPostIngressEventPublisher, } from '@backstage/plugin-events-backend'; -import { EventSubscriber } from '@backstage/plugin-events-node'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; export default async function createPlugin( env: PluginEnvironment, - subscribers: EventSubscriber[], ): Promise { const eventsRouter = Router(); @@ -35,8 +33,8 @@ export default async function createPlugin( http.bind(eventsRouter); await new EventsBackend(env.logger) + .setEventBroker(env.eventBroker) .addPublishers(http) - .addSubscribers(subscribers) .start(); return eventsRouter; diff --git a/packages/backend/src/types.ts b/packages/backend/src/types.ts index 895581c702..ab1baf0c95 100644 --- a/packages/backend/src/types.ts +++ b/packages/backend/src/types.ts @@ -26,6 +26,7 @@ import { import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { IdentityApi } from '@backstage/plugin-auth-node'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; +import { EventBroker } from '@backstage/plugin-events-node'; export type PluginEnvironment = { logger: Logger; @@ -38,4 +39,5 @@ export type PluginEnvironment = { permissions: PermissionEvaluator; scheduler: PluginTaskScheduler; identity: IdentityApi; + eventBroker: EventBroker; }; diff --git a/plugins/events-backend/api-report.md b/plugins/events-backend/api-report.md index 7d8ede1979..5d520f10c2 100644 --- a/plugins/events-backend/api-report.md +++ b/plugins/events-backend/api-report.md @@ -5,6 +5,7 @@ ```ts import { Config } from '@backstage/config'; import { EventBroker } from '@backstage/plugin-events-node'; +import { EventParams } from '@backstage/plugin-events-node'; import { EventPublisher } from '@backstage/plugin-events-node'; import { EventSubscriber } from '@backstage/plugin-events-node'; import express from 'express'; @@ -42,4 +43,15 @@ export class HttpPostIngressEventPublisher implements EventPublisher { // (undocumented) setEventBroker(eventBroker: EventBroker): Promise; } + +// @public +export class InMemoryEventBroker implements EventBroker { + constructor(logger: Logger); + // (undocumented) + publish(params: EventParams): Promise; + // (undocumented) + subscribe( + ...subscribers: Array> + ): void; +} ``` diff --git a/plugins/events-backend/src/index.ts b/plugins/events-backend/src/index.ts index 4645e9a479..d443eeabca 100644 --- a/plugins/events-backend/src/index.ts +++ b/plugins/events-backend/src/index.ts @@ -22,3 +22,4 @@ export { EventsBackend } from './service/EventsBackend'; export { HttpPostIngressEventPublisher } from './service/http'; +export { InMemoryEventBroker } from './service/InMemoryEventBroker'; diff --git a/plugins/events-backend/src/service/InMemoryEventBroker.ts b/plugins/events-backend/src/service/InMemoryEventBroker.ts index 04be01f658..d800d88dc5 100644 --- a/plugins/events-backend/src/service/InMemoryEventBroker.ts +++ b/plugins/events-backend/src/service/InMemoryEventBroker.ts @@ -25,6 +25,8 @@ import { Logger } from 'winston'; * In-memory event broker which will pass the event to all registered subscribers * interested in it. * Events will not be persisted in any form. + * + * @public */ // TODO(pjungermann): add prom metrics? (see plugins/catalog-backend/src/util/metrics.ts, etc.) export class InMemoryEventBroker implements EventBroker { diff --git a/plugins/events-backend/src/service/http/HttpPostIngressEventPublisher.ts b/plugins/events-backend/src/service/http/HttpPostIngressEventPublisher.ts index b5a6ccbca1..54dead0afa 100644 --- a/plugins/events-backend/src/service/http/HttpPostIngressEventPublisher.ts +++ b/plugins/events-backend/src/service/http/HttpPostIngressEventPublisher.ts @@ -107,7 +107,7 @@ export class HttpPostIngressEventPublisher implements EventPublisher { return; } - const eventPayload = request.body; + const eventPayload = request; await this.eventBroker!.publish({ topic, eventPayload, From 6be62344a07f7670cc3eee0d323c55ec6204bfb6 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Thu, 2 Mar 2023 16:31:09 +0000 Subject: [PATCH 013/137] fix Signed-off-by: Brian Fletcher --- packages/backend/src/plugins/catalogEventBasedProviders.ts | 3 +-- .../src/service/http/HttpPostIngressEventPublisher.ts | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/backend/src/plugins/catalogEventBasedProviders.ts b/packages/backend/src/plugins/catalogEventBasedProviders.ts index 3f1ea708df..346ed40fa6 100644 --- a/packages/backend/src/plugins/catalogEventBasedProviders.ts +++ b/packages/backend/src/plugins/catalogEventBasedProviders.ts @@ -29,11 +29,10 @@ class DemoEventBasedEntityProvider implements EntityProvider, EventSubscriber { ) {} async onEvent(params: EventParams): Promise { - const request = params.eventPayload as Request; this.logger.info( `onEvent: topic=${params.topic}, metadata=${JSON.stringify( params.metadata, - )}, payload=${JSON.stringify(request.body)}`, + )}, payload=${JSON.stringify(params.eventPayload)}`, ); } diff --git a/plugins/events-backend/src/service/http/HttpPostIngressEventPublisher.ts b/plugins/events-backend/src/service/http/HttpPostIngressEventPublisher.ts index 54dead0afa..b5a6ccbca1 100644 --- a/plugins/events-backend/src/service/http/HttpPostIngressEventPublisher.ts +++ b/plugins/events-backend/src/service/http/HttpPostIngressEventPublisher.ts @@ -107,7 +107,7 @@ export class HttpPostIngressEventPublisher implements EventPublisher { return; } - const eventPayload = request; + const eventPayload = request.body; await this.eventBroker!.publish({ topic, eventPayload, From 90ead6f213d235abf09f8eb66aa56c48c89e0096 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Wed, 8 Mar 2023 09:45:17 +0000 Subject: [PATCH 014/137] addressing code review comments Signed-off-by: Brian Fletcher --- ...dProviders.ts => DemoEventBasedEntityProvider.ts} | 6 ++++-- packages/backend/src/plugins/catalog.ts | 12 ++++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) rename packages/backend/src/plugins/{catalogEventBasedProviders.ts => DemoEventBasedEntityProvider.ts} (91%) diff --git a/packages/backend/src/plugins/catalogEventBasedProviders.ts b/packages/backend/src/plugins/DemoEventBasedEntityProvider.ts similarity index 91% rename from packages/backend/src/plugins/catalogEventBasedProviders.ts rename to packages/backend/src/plugins/DemoEventBasedEntityProvider.ts index 346ed40fa6..57f9f05570 100644 --- a/packages/backend/src/plugins/catalogEventBasedProviders.ts +++ b/packages/backend/src/plugins/DemoEventBasedEntityProvider.ts @@ -22,7 +22,9 @@ import { EventParams, EventSubscriber } from '@backstage/plugin-events-node'; import { Logger } from 'winston'; import { PluginEnvironment } from '../types'; -class DemoEventBasedEntityProvider implements EntityProvider, EventSubscriber { +export class DemoEventBasedEntityProvider + implements EntityProvider, EventSubscriber +{ constructor( private readonly logger: Logger, private readonly topics: string[], @@ -55,7 +57,7 @@ export default async function createCatalogEventBasedProviders( const providers: Array< (EntityProvider & EventSubscriber) | Array > = []; - providers.push(new DemoEventBasedEntityProvider(env.logger, ['example'])); + providers.push(); // add your event-based entity providers here return providers.flat(); } diff --git a/packages/backend/src/plugins/catalog.ts b/packages/backend/src/plugins/catalog.ts index cd1a92ad7b..d895b0e85a 100644 --- a/packages/backend/src/plugins/catalog.ts +++ b/packages/backend/src/plugins/catalog.ts @@ -18,16 +18,20 @@ import { CatalogBuilder } from '@backstage/plugin-catalog-backend'; import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backend'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; -import createCatalogEventBasedProviders from './catalogEventBasedProviders'; +import { DemoEventBasedEntityProvider } from './DemoEventBasedEntityProvider'; export default async function createPlugin( env: PluginEnvironment, ): Promise { - const providers = await createCatalogEventBasedProviders(env); + const { eventBroker, logger } = env; + const builder = await CatalogBuilder.create(env); builder.addProcessor(new ScaffolderEntitiesProcessor()); - env.eventBroker.subscribe(providers); - builder.addEntityProvider(providers); + + const demoProvider = new DemoEventBasedEntityProvider(logger, ['example']); + eventBroker.subscribe(demoProvider); + builder.addEntityProvider(demoProvider); + const { processingEngine, router } = await builder.build(); await processingEngine.start(); return router; From c251ef8007d021c1ab060fd143b59ab78595966d Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Wed, 8 Mar 2023 10:30:20 +0000 Subject: [PATCH 015/137] update readme to indicate changes Signed-off-by: Brian Fletcher --- .../plugins/DemoEventBasedEntityProvider.ts | 12 ------- plugins/events-backend/README.md | 34 ++++++++++++------- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/packages/backend/src/plugins/DemoEventBasedEntityProvider.ts b/packages/backend/src/plugins/DemoEventBasedEntityProvider.ts index 57f9f05570..198349cb06 100644 --- a/packages/backend/src/plugins/DemoEventBasedEntityProvider.ts +++ b/packages/backend/src/plugins/DemoEventBasedEntityProvider.ts @@ -20,7 +20,6 @@ import { } from '@backstage/plugin-catalog-node'; import { EventParams, EventSubscriber } from '@backstage/plugin-events-node'; import { Logger } from 'winston'; -import { PluginEnvironment } from '../types'; export class DemoEventBasedEntityProvider implements EntityProvider, EventSubscriber @@ -50,14 +49,3 @@ export class DemoEventBasedEntityProvider return DemoEventBasedEntityProvider.name; } } - -export default async function createCatalogEventBasedProviders( - env: PluginEnvironment, -): Promise> { - const providers: Array< - (EntityProvider & EventSubscriber) | Array - > = []; - providers.push(); - // add your event-based entity providers here - return providers.flat(); -} diff --git a/plugins/events-backend/README.md b/plugins/events-backend/README.md index cef8ac7330..869ee85ea2 100644 --- a/plugins/events-backend/README.md +++ b/plugins/events-backend/README.md @@ -24,6 +24,20 @@ to the used event broker. yarn add --cwd packages/backend @backstage/plugin-events-backend ``` +You will need to add the following to the backend configuration `#makeCreateEnv`. + +```diff +// packages/backend/src/index.ts ++ const eventBroker = new InMemoryEventBroker(root.child({ type: 'plugin' })); +``` + +Then update plugin environment to include the event broker. + +```diff +// packages/backend/src/types.ts ++ eventBroker: EventBroker; +``` + Add a file [`packages/backend/src/plugins/events.ts`](../../packages/backend/src/plugins/events.ts) to your Backstage project. @@ -38,25 +52,20 @@ Additionally, add the events plugin to your backend. // [...] + const eventsEnv = useHotMemoize(module, () => createEnv('events')); // [...] -+ apiRouter.use('/events', await events(eventsEnv, [])); ++ apiRouter.use('/events', await events(eventsEnv)); // [...] ``` ### With Event-based Entity Providers In case you use event-based `EntityProviders`, -you may need something like the following: +you will need to add the subscription to the catalog plugin creation: ```diff -// packages/backend/src/index.ts -- apiRouter.use('/events', await events(eventsEnv, [])); -+ apiRouter.use('/events', await events(eventsEnv, eventBasedEntityProviders)); +// packages/backend/src/plugins/catalog.ts ++ ``` -as well as a file -[`packages/backend/src/plugins/catalogEventBasedProviders.ts`](../../packages/backend/src/plugins/catalogEventBasedProviders.ts) -which contains event-based entity providers. - In case you don't have this dependency added yet: ```bash @@ -67,18 +76,19 @@ yarn add --cwd packages/backend @backstage/plugin-events-backend ```diff // packages/backend/src/plugins/catalog.ts import { CatalogBuilder } from '@backstage/plugin-catalog-backend'; -+import { EntityProvider } from '@backstage/plugin-catalog-node'; ++import { DemoEventBasedEntityProvider } from './DemoEventBasedEntityProvider'; import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backend'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; export default async function createPlugin( env: PluginEnvironment, -+ providers?: Array, ): Promise { const builder = await CatalogBuilder.create(env); builder.addProcessor(new ScaffolderEntitiesProcessor()); -+ builder.addEntityProvider(providers ?? []); ++ const demoProvider = new DemoEventBasedEntityProvider(logger, ['example']); ++ env.eventBroker.subscribe(demoProvider); ++ builder.addEntityProvider(demoProvider); const { processingEngine, router } = await builder.build(); await processingEngine.start(); return router; From a444c53a033f20b6563566cf46b531357b35fe9f Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Wed, 8 Mar 2023 15:58:40 +0000 Subject: [PATCH 016/137] address code review comments Signed-off-by: Brian Fletcher --- .changeset/tall-meals-dress.md | 4 +++- packages/backend/src/index.ts | 4 ++-- .../plugins/DemoEventBasedEntityProvider.ts | 23 +++++++++++++++---- packages/backend/src/plugins/catalog.ts | 9 ++++---- plugins/events-backend/README.md | 2 +- plugins/events-backend/api-report.md | 22 +++++++++--------- plugins/events-backend/src/index.ts | 2 +- ...ker.test.ts => DefaultEventBroker.test.ts} | 8 +++---- ...ryEventBroker.ts => DefaultEventBroker.ts} | 4 ++-- .../src/service/EventsBackend.ts | 4 ++-- .../src/service/EventsPlugin.ts | 4 ++-- 11 files changed, 51 insertions(+), 35 deletions(-) rename plugins/events-backend/src/service/{InMemoryEventBroker.test.ts => DefaultEventBroker.test.ts} (94%) rename plugins/events-backend/src/service/{InMemoryEventBroker.ts => DefaultEventBroker.ts} (93%) diff --git a/.changeset/tall-meals-dress.md b/.changeset/tall-meals-dress.md index 42d50444aa..25f67847ae 100644 --- a/.changeset/tall-meals-dress.md +++ b/.changeset/tall-meals-dress.md @@ -2,4 +2,6 @@ '@backstage/plugin-events-backend': patch --- -Export `InMemoryEventBroker` to allow decoupling of the catalog and events backends in the `example-backend`. +Export `DefaultEventBroker` to allow decoupling of the catalog and events backends in the `example-backend`. + +Please look at `plugins/events-backend/README.md` for the currently advised was to set up the event backend and catalog providers. diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 3c07c3aad4..593d30bc3b 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -67,7 +67,7 @@ import linguist from './plugins/linguist'; import { PluginEnvironment } from './types'; import { ServerPermissionClient } from '@backstage/plugin-permission-node'; import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; -import { InMemoryEventBroker } from '@backstage/plugin-events-backend'; +import { DefaultEventBroker } from '@backstage/plugin-events-backend'; function makeCreateEnv(config: Config) { const root = getRootLogger(); @@ -85,7 +85,7 @@ function makeCreateEnv(config: Config) { discovery, }); - const eventBroker = new InMemoryEventBroker(root.child({ type: 'plugin' })); + const eventBroker = new DefaultEventBroker(root.child({ type: 'plugin' })); root.info(`Created UrlReader ${reader}`); diff --git a/packages/backend/src/plugins/DemoEventBasedEntityProvider.ts b/packages/backend/src/plugins/DemoEventBasedEntityProvider.ts index 198349cb06..b793816095 100644 --- a/packages/backend/src/plugins/DemoEventBasedEntityProvider.ts +++ b/packages/backend/src/plugins/DemoEventBasedEntityProvider.ts @@ -18,16 +18,29 @@ import { EntityProvider, EntityProviderConnection, } from '@backstage/plugin-catalog-node'; -import { EventParams, EventSubscriber } from '@backstage/plugin-events-node'; +import { + EventBroker, + EventParams, + EventSubscriber, +} from '@backstage/plugin-events-node'; import { Logger } from 'winston'; export class DemoEventBasedEntityProvider implements EntityProvider, EventSubscriber { - constructor( - private readonly logger: Logger, - private readonly topics: string[], - ) {} + private readonly logger: Logger; + private readonly topics: string[]; + + constructor(opts: { + eventBroker: EventBroker; + logger: Logger; + topics: string[]; + }) { + const { eventBroker, logger, topics } = opts; + eventBroker.subscribe(this); + this.logger = logger; + this.topics = topics; + } async onEvent(params: EventParams): Promise { this.logger.info( diff --git a/packages/backend/src/plugins/catalog.ts b/packages/backend/src/plugins/catalog.ts index d895b0e85a..ae00d5a7ec 100644 --- a/packages/backend/src/plugins/catalog.ts +++ b/packages/backend/src/plugins/catalog.ts @@ -23,13 +23,14 @@ import { DemoEventBasedEntityProvider } from './DemoEventBasedEntityProvider'; export default async function createPlugin( env: PluginEnvironment, ): Promise { - const { eventBroker, logger } = env; - const builder = await CatalogBuilder.create(env); builder.addProcessor(new ScaffolderEntitiesProcessor()); - const demoProvider = new DemoEventBasedEntityProvider(logger, ['example']); - eventBroker.subscribe(demoProvider); + const demoProvider = new DemoEventBasedEntityProvider({ + logger: env.logger, + topics: ['example'], + eventBroker: env.eventBroker, + }); builder.addEntityProvider(demoProvider); const { processingEngine, router } = await builder.build(); diff --git a/plugins/events-backend/README.md b/plugins/events-backend/README.md index 869ee85ea2..af9812eab7 100644 --- a/plugins/events-backend/README.md +++ b/plugins/events-backend/README.md @@ -28,7 +28,7 @@ You will need to add the following to the backend configuration `#makeCreateEnv` ```diff // packages/backend/src/index.ts -+ const eventBroker = new InMemoryEventBroker(root.child({ type: 'plugin' })); ++ const eventBroker = new DefaultEventBroker(root.child({ type: 'plugin' })); ``` Then update plugin environment to include the event broker. diff --git a/plugins/events-backend/api-report.md b/plugins/events-backend/api-report.md index 5d520f10c2..aeb6f9363d 100644 --- a/plugins/events-backend/api-report.md +++ b/plugins/events-backend/api-report.md @@ -12,6 +12,17 @@ import express from 'express'; import { HttpPostIngressOptions } from '@backstage/plugin-events-node'; import { Logger } from 'winston'; +// @public +export class DefaultEventBroker implements EventBroker { + constructor(logger: Logger); + // (undocumented) + publish(params: EventParams): Promise; + // (undocumented) + subscribe( + ...subscribers: Array> + ): void; +} + // @public export class EventsBackend { constructor(logger: Logger); @@ -43,15 +54,4 @@ export class HttpPostIngressEventPublisher implements EventPublisher { // (undocumented) setEventBroker(eventBroker: EventBroker): Promise; } - -// @public -export class InMemoryEventBroker implements EventBroker { - constructor(logger: Logger); - // (undocumented) - publish(params: EventParams): Promise; - // (undocumented) - subscribe( - ...subscribers: Array> - ): void; -} ``` diff --git a/plugins/events-backend/src/index.ts b/plugins/events-backend/src/index.ts index d443eeabca..be173b677c 100644 --- a/plugins/events-backend/src/index.ts +++ b/plugins/events-backend/src/index.ts @@ -22,4 +22,4 @@ export { EventsBackend } from './service/EventsBackend'; export { HttpPostIngressEventPublisher } from './service/http'; -export { InMemoryEventBroker } from './service/InMemoryEventBroker'; +export { DefaultEventBroker } from './service/DefaultEventBroker'; diff --git a/plugins/events-backend/src/service/InMemoryEventBroker.test.ts b/plugins/events-backend/src/service/DefaultEventBroker.test.ts similarity index 94% rename from plugins/events-backend/src/service/InMemoryEventBroker.test.ts rename to plugins/events-backend/src/service/DefaultEventBroker.test.ts index 861cdda940..99e5f6f72d 100644 --- a/plugins/events-backend/src/service/InMemoryEventBroker.test.ts +++ b/plugins/events-backend/src/service/DefaultEventBroker.test.ts @@ -17,15 +17,15 @@ import { getVoidLogger } from '@backstage/backend-common'; import { TestEventSubscriber } from '@backstage/plugin-events-backend-test-utils'; import { EventParams, EventSubscriber } from '@backstage/plugin-events-node'; -import { InMemoryEventBroker } from './InMemoryEventBroker'; +import { DefaultEventBroker } from './DefaultEventBroker'; const logger = getVoidLogger(); -describe('InMemoryEventBroker', () => { +describe('DefaultEventBroker', () => { it('passes events to interested subscribers', () => { const subscriber1 = new TestEventSubscriber('test1', ['topicA', 'topicB']); const subscriber2 = new TestEventSubscriber('test2', ['topicB', 'topicC']); - const eventBroker = new InMemoryEventBroker(logger); + const eventBroker = new DefaultEventBroker(logger); eventBroker.subscribe(subscriber1); eventBroker.subscribe(subscriber2); @@ -86,7 +86,7 @@ describe('InMemoryEventBroker', () => { })(); const errorSpy = jest.spyOn(logger, 'error'); - const eventBroker = new InMemoryEventBroker(logger); + const eventBroker = new DefaultEventBroker(logger); eventBroker.subscribe(subscriber1); await eventBroker.publish({ topic, eventPayload: '1' }); diff --git a/plugins/events-backend/src/service/InMemoryEventBroker.ts b/plugins/events-backend/src/service/DefaultEventBroker.ts similarity index 93% rename from plugins/events-backend/src/service/InMemoryEventBroker.ts rename to plugins/events-backend/src/service/DefaultEventBroker.ts index d800d88dc5..c3824b3e7d 100644 --- a/plugins/events-backend/src/service/InMemoryEventBroker.ts +++ b/plugins/events-backend/src/service/DefaultEventBroker.ts @@ -22,14 +22,14 @@ import { import { Logger } from 'winston'; /** - * In-memory event broker which will pass the event to all registered subscribers + * In process event broker which will pass the event to all registered subscribers * interested in it. * Events will not be persisted in any form. * * @public */ // TODO(pjungermann): add prom metrics? (see plugins/catalog-backend/src/util/metrics.ts, etc.) -export class InMemoryEventBroker implements EventBroker { +export class DefaultEventBroker implements EventBroker { constructor(private readonly logger: Logger) {} private readonly subscribers: { diff --git a/plugins/events-backend/src/service/EventsBackend.ts b/plugins/events-backend/src/service/EventsBackend.ts index 77b1b538f7..4415b8703a 100644 --- a/plugins/events-backend/src/service/EventsBackend.ts +++ b/plugins/events-backend/src/service/EventsBackend.ts @@ -20,7 +20,7 @@ import { EventSubscriber, } from '@backstage/plugin-events-node'; import { Logger } from 'winston'; -import { InMemoryEventBroker } from './InMemoryEventBroker'; +import { DefaultEventBroker } from './DefaultEventBroker'; /** * A builder that helps wire up all component parts of the event management. @@ -33,7 +33,7 @@ export class EventsBackend { private subscribers: EventSubscriber[] = []; constructor(logger: Logger) { - this.eventBroker = new InMemoryEventBroker(logger); + this.eventBroker = new DefaultEventBroker(logger); } setEventBroker(eventBroker: EventBroker): EventsBackend { diff --git a/plugins/events-backend/src/service/EventsPlugin.ts b/plugins/events-backend/src/service/EventsPlugin.ts index 1ae038a2ac..07f2b11731 100644 --- a/plugins/events-backend/src/service/EventsPlugin.ts +++ b/plugins/events-backend/src/service/EventsPlugin.ts @@ -29,7 +29,7 @@ import { EventSubscriber, HttpPostIngressOptions, } from '@backstage/plugin-events-node'; -import { InMemoryEventBroker } from './InMemoryEventBroker'; +import { DefaultEventBroker } from './DefaultEventBroker'; import Router from 'express-promise-router'; import { HttpPostIngressEventPublisher } from './http'; @@ -113,7 +113,7 @@ export const eventsPlugin = createBackendPlugin({ router.use(eventsRouter); const eventBroker = - extensionPoint.eventBroker ?? new InMemoryEventBroker(winstonLogger); + extensionPoint.eventBroker ?? new DefaultEventBroker(winstonLogger); eventBroker.subscribe(extensionPoint.subscribers); [extensionPoint.publishers, http] From 586e7f08bba81006187dba9a921e8f95fb03c1a4 Mon Sep 17 00:00:00 2001 From: pitwegner Date: Thu, 9 Mar 2023 12:28:37 +0100 Subject: [PATCH 017/137] replace dns validation regex Signed-off-by: pitwegner --- .../src/validation/CommonValidatorFunctions.test.ts | 1 + .../catalog-model/src/validation/CommonValidatorFunctions.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/catalog-model/src/validation/CommonValidatorFunctions.test.ts b/packages/catalog-model/src/validation/CommonValidatorFunctions.test.ts index a887a9aa2e..5dc3f80694 100644 --- a/packages/catalog-model/src/validation/CommonValidatorFunctions.test.ts +++ b/packages/catalog-model/src/validation/CommonValidatorFunctions.test.ts @@ -155,6 +155,7 @@ describe('CommonValidatorFunctions', () => { ['-a-b', false], ['a-b-', false], ['a--b', false], + ['xn--c6h', true], ['a_b', false], [`${'a'.repeat(63)}`, true], [`${'a'.repeat(64)}`, false], diff --git a/packages/catalog-model/src/validation/CommonValidatorFunctions.ts b/packages/catalog-model/src/validation/CommonValidatorFunctions.ts index 40a85c5331..4532dd9844 100644 --- a/packages/catalog-model/src/validation/CommonValidatorFunctions.ts +++ b/packages/catalog-model/src/validation/CommonValidatorFunctions.ts @@ -91,7 +91,7 @@ export class CommonValidatorFunctions { typeof value === 'string' && value.length >= 1 && value.length <= 63 && - /^[a-z0-9]+(\-[a-z0-9]+)*$/.test(value) + /^((?!\-))(xn\-\-)?[a-z0-9\-]+[a-z0-9]$/.test(value) ); } From be9c42280736e1ae5e0a93fb3fab0605a3c702e3 Mon Sep 17 00:00:00 2001 From: pitwegner Date: Thu, 9 Mar 2023 12:35:32 +0100 Subject: [PATCH 018/137] generate changeset Signed-off-by: pitwegner --- .changeset/stale-files-sniff.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/stale-files-sniff.md diff --git a/.changeset/stale-files-sniff.md b/.changeset/stale-files-sniff.md new file mode 100644 index 0000000000..6ae2bbd110 --- /dev/null +++ b/.changeset/stale-files-sniff.md @@ -0,0 +1,5 @@ +--- +'@backstage/catalog-model': minor +--- + +Modified the regex for dns label validation to support IDN domains From 547726995e5baca2cb305f9092d358519d327d22 Mon Sep 17 00:00:00 2001 From: pitwegner Date: Thu, 9 Mar 2023 13:07:25 +0100 Subject: [PATCH 019/137] fix regex and typo Signed-off-by: pitwegner --- .changeset/stale-files-sniff.md | 2 +- .../catalog-model/src/validation/CommonValidatorFunctions.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/stale-files-sniff.md b/.changeset/stale-files-sniff.md index 6ae2bbd110..b6f35645c4 100644 --- a/.changeset/stale-files-sniff.md +++ b/.changeset/stale-files-sniff.md @@ -2,4 +2,4 @@ '@backstage/catalog-model': minor --- -Modified the regex for dns label validation to support IDN domains +Modified the regex for DNS label validation to support IDN domains diff --git a/packages/catalog-model/src/validation/CommonValidatorFunctions.ts b/packages/catalog-model/src/validation/CommonValidatorFunctions.ts index 4532dd9844..22157b616a 100644 --- a/packages/catalog-model/src/validation/CommonValidatorFunctions.ts +++ b/packages/catalog-model/src/validation/CommonValidatorFunctions.ts @@ -91,7 +91,7 @@ export class CommonValidatorFunctions { typeof value === 'string' && value.length >= 1 && value.length <= 63 && - /^((?!\-))(xn\-\-)?[a-z0-9\-]+[a-z0-9]$/.test(value) + /^((?!\-))(xn\-\-)?[a-z0-9\-]*[a-z0-9]$/.test(value) ); } From 675dadc492143248ac64cd099d3c17415cf668c0 Mon Sep 17 00:00:00 2001 From: pitwegner Date: Thu, 9 Mar 2023 13:29:22 +0100 Subject: [PATCH 020/137] simplify regex Signed-off-by: pitwegner --- .../catalog-model/src/validation/CommonValidatorFunctions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/catalog-model/src/validation/CommonValidatorFunctions.ts b/packages/catalog-model/src/validation/CommonValidatorFunctions.ts index 22157b616a..18132ba561 100644 --- a/packages/catalog-model/src/validation/CommonValidatorFunctions.ts +++ b/packages/catalog-model/src/validation/CommonValidatorFunctions.ts @@ -91,7 +91,7 @@ export class CommonValidatorFunctions { typeof value === 'string' && value.length >= 1 && value.length <= 63 && - /^((?!\-))(xn\-\-)?[a-z0-9\-]*[a-z0-9]$/.test(value) + /^(?!\-)[a-z0-9\-]*[a-z0-9]$/.test(value) ); } From 651c8b414d100b3531ef4cfdc059f9e8b086f629 Mon Sep 17 00:00:00 2001 From: pitwegner Date: Thu, 9 Mar 2023 14:12:20 +0100 Subject: [PATCH 021/137] fix invalid test cases Signed-off-by: pitwegner --- .../src/validation/CommonValidatorFunctions.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/catalog-model/src/validation/CommonValidatorFunctions.test.ts b/packages/catalog-model/src/validation/CommonValidatorFunctions.test.ts index 5dc3f80694..88b6e54113 100644 --- a/packages/catalog-model/src/validation/CommonValidatorFunctions.test.ts +++ b/packages/catalog-model/src/validation/CommonValidatorFunctions.test.ts @@ -125,7 +125,7 @@ describe('CommonValidatorFunctions', () => { ['a-b', true], ['-a-b', false], ['a-b-', false], - ['a--b', false], + ['a--b', true], ['a_b', false], ['adam.bertil.caesar', true], ['adam.ber-til.caesar', true], @@ -154,7 +154,7 @@ describe('CommonValidatorFunctions', () => { ['a-b', true], ['-a-b', false], ['a-b-', false], - ['a--b', false], + ['a--b', true], ['xn--c6h', true], ['a_b', false], [`${'a'.repeat(63)}`, true], From ed734bdd52439a09539c218d636486d90c56c81e Mon Sep 17 00:00:00 2001 From: pitwegner Date: Thu, 9 Mar 2023 15:35:16 +0100 Subject: [PATCH 022/137] fix more test cases Signed-off-by: pitwegner --- .../src/validation/KubernetesValidatorFunctions.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/catalog-model/src/validation/KubernetesValidatorFunctions.test.ts b/packages/catalog-model/src/validation/KubernetesValidatorFunctions.test.ts index c194774906..dad0631b47 100644 --- a/packages/catalog-model/src/validation/KubernetesValidatorFunctions.test.ts +++ b/packages/catalog-model/src/validation/KubernetesValidatorFunctions.test.ts @@ -31,7 +31,7 @@ describe('KubernetesValidatorFunctions', () => { ['a/a', true], ['a/aAb5C', true], ['a-b.c/v1', true], - ['a--b.c/v1', false], + ['a--b.c/v1', true], [ `${'a'.repeat(63)}.${'a'.repeat(63)}.${'a'.repeat(63)}.${'a'.repeat( 61, @@ -96,7 +96,7 @@ describe('KubernetesValidatorFunctions', () => { ['a-b', true], ['-a-b', false], ['a-b-', false], - ['a--b', false], + ['a--b', true], ['a_b', false], ['a.b', false], ])(`isValidNamespace %p ? %p`, (value, matches) => { @@ -121,7 +121,7 @@ describe('KubernetesValidatorFunctions', () => { ['a..b', true], ['a/a', true], ['a-b.c/a', true], - ['a--b.c/a', false], + ['a--b.c/a', true], [ `${'a'.repeat(63)}.${'a'.repeat(63)}.${'a'.repeat(63)}.${'a'.repeat( 61, @@ -178,7 +178,7 @@ describe('KubernetesValidatorFunctions', () => { ['a..b', true], ['a/a', true], ['a-b.c/a', true], - ['a--b.c/a', false], + ['a--b.c/a', true], [ `${'a'.repeat(63)}.${'a'.repeat(63)}.${'a'.repeat(63)}.${'a'.repeat( 61, From ba8fa5e4e1743ae4176064c700a2f6ef71277869 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Fri, 10 Mar 2023 13:28:05 +0000 Subject: [PATCH 023/137] fixing up the readme Signed-off-by: Brian Fletcher --- plugins/events-backend/README.md | 144 +++++++++++++++++++++---------- 1 file changed, 99 insertions(+), 45 deletions(-) diff --git a/plugins/events-backend/README.md b/plugins/events-backend/README.md index af9812eab7..2288c91f2e 100644 --- a/plugins/events-backend/README.md +++ b/plugins/events-backend/README.md @@ -6,7 +6,7 @@ This plugin provides the wiring of all extension points for managing events as defined by [plugin-events-node](../events-node) including backend plugin `EventsPlugin` and `EventsBackend`. -Additionally, it uses a simple in-memory implementation for +Additionally, it uses a simple in-process implementation for the `EventBroker` by default which you can replace with a more sophisticated implementation of your choice as you need (e.g., via module). @@ -24,7 +24,13 @@ to the used event broker. yarn add --cwd packages/backend @backstage/plugin-events-backend ``` -You will need to add the following to the backend configuration `#makeCreateEnv`. +### Event Broker + +First you will need to add and implementation of the `EventBroker` interface to the backend plugin environment. +This will allow event broker instance any backend plugins to publish and subscribe to events in order to communicate +between them. + +Add the following to `makeCreateEnv` ```diff // packages/backend/src/index.ts @@ -38,10 +44,69 @@ Then update plugin environment to include the event broker. + eventBroker: EventBroker; ``` -Add a file [`packages/backend/src/plugins/events.ts`](../../packages/backend/src/plugins/events.ts) -to your Backstage project. +### Publishing and Subscribing to events with the broker -There, you can add all publishers, subscribers, etc. you want. +Backend plugins are passed the event broker in the plugin environment at startup of the application. The plugin can +make use of this to communicate between parts of the application. + +Here is an example of a plugin publishing a payload to a topic. + +```typescript jsx +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + env.eventBroker.publish({ + topic: 'publish.example', + eventPayload: { message: 'Hello, World!' }, + metadata: {}, + }); +} +``` + +Here is an example of a plugin subscribing to a topic. + +```typescript jsx +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + env.eventBroker.subscribe([ + { + supportsEventTopics: ['publish.example'], + onEvent: async (params: EventParams) => { + env.logger.info(`receieved ${params.topic} event`); + }, + }, + ]); +} +``` + +### Implementing an `EventSubscriber` class + +More complex solutions might warrent the creation of a class that implements the `EventSubscriber` interface. e.g. + +```typescript jsx +import { EventSubscriber } from "./EventSubscriber"; + +class ExampleSubscriber implements EventSubscriber { + ... + + supportsEventTopics() { + return ['publish.example'] + } + + async onEvent(params: EventParams) { + env.logger.info(`receieved ${params.topic} event`) + } +} +``` + +### Events Backend + +The events backend plugin provides a router to handler http events and publish the http requests onto the event +broker. + +To configure it add a file [`packages/backend/src/plugins/events.ts`](../../packages/backend/src/plugins/events.ts) +to your Backstage project. Additionally, add the events plugin to your backend. @@ -56,46 +121,7 @@ Additionally, add the events plugin to your backend. // [...] ``` -### With Event-based Entity Providers - -In case you use event-based `EntityProviders`, -you will need to add the subscription to the catalog plugin creation: - -```diff -// packages/backend/src/plugins/catalog.ts -+ -``` - -In case you don't have this dependency added yet: - -```bash -# From your Backstage root directory -yarn add --cwd packages/backend @backstage/plugin-events-backend -``` - -```diff -// packages/backend/src/plugins/catalog.ts - import { CatalogBuilder } from '@backstage/plugin-catalog-backend'; -+import { DemoEventBasedEntityProvider } from './DemoEventBasedEntityProvider'; - import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backend'; - import { Router } from 'express'; - import { PluginEnvironment } from '../types'; - - export default async function createPlugin( - env: PluginEnvironment, - ): Promise { - const builder = await CatalogBuilder.create(env); - builder.addProcessor(new ScaffolderEntitiesProcessor()); -+ const demoProvider = new DemoEventBasedEntityProvider(logger, ['example']); -+ env.eventBroker.subscribe(demoProvider); -+ builder.addEntityProvider(demoProvider); - const { processingEngine, router } = await builder.build(); - await processingEngine.start(); - return router; - } -``` - -## Configuration +#### Configuration In order to create HTTP endpoints to receive events for a certain topic, you need to add them at your configuration: @@ -125,6 +151,34 @@ in combination with suitable event subscribers. However, it is not limited to these use cases. +### Event-based Entity Providers + +You can implement the `EventSubscriber` interface on an `EntityProviders` to allow it to handle events from other plugins e.g. the event backend plugin +mentioned above. + +Assuming you have configured the `eventBroker` into the `PluginEnvironment` you can pass the broker to the entity provider for it to subscribe. + +```diff +// packages/backend/src/plugins/catalog.ts + import { CatalogBuilder } from '@backstage/plugin-catalog-backend'; ++import { DemoEventBasedEntityProvider } from './DemoEventBasedEntityProvider'; + import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backend'; + import { Router } from 'express'; + import { PluginEnvironment } from '../types'; + + export default async function createPlugin( + env: PluginEnvironment, + ): Promise { + const builder = await CatalogBuilder.create(env); + builder.addProcessor(new ScaffolderEntitiesProcessor()); ++ const demoProvider = new DemoEventBasedEntityProvider({ logger: env.logger, topics: ['example'], eventBroker: env.eventBroker }); ++ builder.addEntityProvider(demoProvider); + const { processingEngine, router } = await builder.build(); + await processingEngine.start(); + return router; + } +``` + ## Use Cases ### Custom Event Broker From 2fbaf646110d98c32dc2661973357e69873ecd22 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Fri, 10 Mar 2023 13:33:47 +0000 Subject: [PATCH 024/137] fix typo Signed-off-by: Brian Fletcher --- plugins/events-backend/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/events-backend/README.md b/plugins/events-backend/README.md index 2288c91f2e..d5a321df94 100644 --- a/plugins/events-backend/README.md +++ b/plugins/events-backend/README.md @@ -82,7 +82,7 @@ export default async function createPlugin( ### Implementing an `EventSubscriber` class -More complex solutions might warrent the creation of a class that implements the `EventSubscriber` interface. e.g. +More complex solutions might need the creation of a class that implements the `EventSubscriber` interface. e.g. ```typescript jsx import { EventSubscriber } from "./EventSubscriber"; From 1d9da597be8c9193fcd15af0875ef7a8cae8a360 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Fri, 10 Mar 2023 13:46:33 +0000 Subject: [PATCH 025/137] move review comments Signed-off-by: Brian Fletcher --- .changeset/tall-meals-dress.md | 2 +- docs/integrations/bitbucketCloud/discovery.md | 33 +++++++++---------- docs/integrations/github/discovery.md | 33 ++++++++++--------- docs/integrations/github/org.md | 32 +++++++++--------- 4 files changed, 50 insertions(+), 50 deletions(-) diff --git a/.changeset/tall-meals-dress.md b/.changeset/tall-meals-dress.md index 25f67847ae..3d39c369fe 100644 --- a/.changeset/tall-meals-dress.md +++ b/.changeset/tall-meals-dress.md @@ -4,4 +4,4 @@ Export `DefaultEventBroker` to allow decoupling of the catalog and events backends in the `example-backend`. -Please look at `plugins/events-backend/README.md` for the currently advised was to set up the event backend and catalog providers. +Please look at `plugins/events-backend/README.md` for the currently advised way to set up the event backend and catalog providers. diff --git a/docs/integrations/bitbucketCloud/discovery.md b/docs/integrations/bitbucketCloud/discovery.md index f6ceab9ff7..c5291e3241 100644 --- a/docs/integrations/bitbucketCloud/discovery.md +++ b/docs/integrations/bitbucketCloud/discovery.md @@ -72,30 +72,29 @@ Additionally, you need to decide how you want to receive events from external so Set up your provider ```diff -// packages/backend/src/plugins/catalogEventBasedProviders.ts -+import { CatalogClient } from '@backstage/catalog-client'; +// packages/backend/src/plugins/catalog.ts + import { CatalogBuilder } from '@backstage/plugin-catalog-backend'; +import { BitbucketCloudEntityProvider } from '@backstage/plugin-catalog-backend-module-bitbucket-cloud'; - import { EntityProvider } from '@backstage/plugin-catalog-node'; - import { EventSubscriber } from '@backstage/plugin-events-node'; + import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backend'; + import { Router } from 'express'; import { PluginEnvironment } from '../types'; - export default async function createCatalogEventBasedProviders( -- _: PluginEnvironment, -+ env: PluginEnvironment, - ): Promise> { - const providers: Array< - (EntityProvider & EventSubscriber) | Array - > = []; -- // add your event-based entity providers here -+ providers.push( -+ BitbucketCloudEntityProvider.fromConfig(env.config, { + export default async function createPlugin( + env: PluginEnvironment, + ): Promise { + const builder = await CatalogBuilder.create(env); + builder.addProcessor(new ScaffolderEntitiesProcessor()); ++ const bitBucketProvider = BitbucketCloudEntityProvider.fromConfig(env.config, { + catalogApi: new CatalogClient({ discoveryApi: env.discovery }), + logger: env.logger, + scheduler: env.scheduler, + tokenManager: env.tokenManager, -+ }), -+ ); - return providers.flat(); ++ }); ++ env.eventBroker.subscribe(bitBucketProvider); ++ builder.addEntityProvider(bitBucketProvider); + const { processingEngine, router } = await builder.build(); + await processingEngine.start(); + return router; } ``` diff --git a/docs/integrations/github/discovery.md b/docs/integrations/github/discovery.md index bbbe86a834..da4af4b61b 100644 --- a/docs/integrations/github/discovery.md +++ b/docs/integrations/github/discovery.md @@ -68,21 +68,19 @@ Additionally, you need to decide how you want to receive events from external so Set up your provider ```diff -// packages/backend/src/plugins/catalogEventBasedProviders.ts +// packages/backend/src/plugins/catalog.ts + import { CatalogBuilder } from '@backstage/plugin-catalog-backend'; +import { GithubEntityProvider } from '@backstage/plugin-catalog-backend-module-github'; - import { EntityProvider } from '@backstage/plugin-catalog-node'; - import { EventSubscriber } from '@backstage/plugin-events-node'; + import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backend'; + import { Router } from 'express'; import { PluginEnvironment } from '../types'; - export default async function createCatalogEventBasedProviders( -- _: PluginEnvironment, -+ env: PluginEnvironment, - ): Promise> { - const providers: Array< - (EntityProvider & EventSubscriber) | Array - > = []; -- // add your event-based entity providers here -+ providers.push( -+ GithubEntityProvider.fromConfig(env.config, { + + export default async function createPlugin( + env: PluginEnvironment, + ): Promise { + const builder = await CatalogBuilder.create(env); + builder.addProcessor(new ScaffolderEntitiesProcessor()); ++ const githubProvider = GithubEntityProvider.fromConfig(env.config, { + logger: env.logger, + // optional: alternatively, use scheduler with schedule defined in app-config.yaml + schedule: env.scheduler.createScheduledTaskRunner({ @@ -91,9 +89,12 @@ Set up your provider + }), + // optional: alternatively, use schedule + scheduler: env.scheduler, -+ }), -+ ); - return providers.flat(); ++ }); ++ env.eventBroker.subscribe(githubProvider); ++ builder.addEntityProvider(demoProvider); + const { processingEngine, router } = await builder.build(); + await processingEngine.start(); + return router; } ``` diff --git a/docs/integrations/github/org.md b/docs/integrations/github/org.md index 0aa9997bae..c0b7a74d69 100644 --- a/docs/integrations/github/org.md +++ b/docs/integrations/github/org.md @@ -75,21 +75,19 @@ Additionally, you need to decide how you want to receive events from external so Set up your provider ```diff -// packages/backend/src/plugins/catalogEventBasedProviders.ts +// packages/backend/src/plugins/catalog.ts + import { CatalogBuilder } from '@backstage/plugin-catalog-backend'; +import { GithubOrgEntityProvider } from '@backstage/plugin-catalog-backend-module-github'; - import { EntityProvider } from '@backstage/plugin-catalog-node'; - import { EventSubscriber } from '@backstage/plugin-events-node'; + import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backend'; + import { Router } from 'express'; import { PluginEnvironment } from '../types'; - export default async function createCatalogEventBasedProviders( -- _: PluginEnvironment, -+ env: PluginEnvironment, - ): Promise> { - const providers: Array< - (EntityProvider & EventSubscriber) | Array - > = []; -- // add your event-based entity providers here -+ providers.push( -+ GithubOrgEntityProvider.fromConfig(env.config, { + + export default async function createPlugin( + env: PluginEnvironment, + ): Promise { + const builder = await CatalogBuilder.create(env); + builder.addProcessor(new ScaffolderEntitiesProcessor()); ++ const githubOrgProvider = GithubOrgEntityProvider.fromConfig(env.config, { + id: 'production', + orgUrl: 'https://github.com/backstage', + logger: env.logger, @@ -97,9 +95,11 @@ Set up your provider + frequency: { minutes: 60 }, + timeout: { minutes: 15 }, + }), -+ }), -+ ); - return providers.flat(); ++ env.eventBroker.subscribe(githubOrgProvider); ++ builder.addEntityProvider(githubOrgProvider); + const { processingEngine, router } = await builder.build(); + await processingEngine.start(); + return router; } ``` From 4fa75c0fd7a8ba4b26a52ad56aba5cc554f9b39f Mon Sep 17 00:00:00 2001 From: pitwegner Date: Fri, 10 Mar 2023 17:07:57 +0100 Subject: [PATCH 026/137] Update packages/catalog-model/src/validation/CommonValidatorFunctions.ts Co-authored-by: Patrik Oldsberg Signed-off-by: pitwegner --- .../catalog-model/src/validation/CommonValidatorFunctions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/catalog-model/src/validation/CommonValidatorFunctions.ts b/packages/catalog-model/src/validation/CommonValidatorFunctions.ts index 18132ba561..295c5b8895 100644 --- a/packages/catalog-model/src/validation/CommonValidatorFunctions.ts +++ b/packages/catalog-model/src/validation/CommonValidatorFunctions.ts @@ -91,7 +91,7 @@ export class CommonValidatorFunctions { typeof value === 'string' && value.length >= 1 && value.length <= 63 && - /^(?!\-)[a-z0-9\-]*[a-z0-9]$/.test(value) + /^[a-z0-9]+(?:\-+[a-z0-9]+)*$/.test(value) ); } From 91306c7aa895a356940f62be6e60520d2e192a3f Mon Sep 17 00:00:00 2001 From: sblausten Date: Fri, 17 Mar 2023 15:38:08 +0100 Subject: [PATCH 027/137] Review comments and fixing bug Signed-off-by: sblausten --- .../CatalogKindExploreContent.test.tsx} | 0 .../CatalogKindExploreContent.tsx} | 0 .../index.ts | 0 .../src/components/DomainCard/DomainCard.test.tsx | 15 +++++++++++++++ .../src/components/DomainCard/DomainCard.tsx | 15 +++++++++++++++ .../explore/src/components/DomainCard/index.ts | 15 +++++++++++++++ 6 files changed, 45 insertions(+) rename plugins/explore/src/components/{EntityExplorerContent/EntityExplorerContent.test.tsx => CatalogKindExploreContent/CatalogKindExploreContent.test.tsx} (100%) rename plugins/explore/src/components/{EntityExplorerContent/EntityExplorerContent.tsx => CatalogKindExploreContent/CatalogKindExploreContent.tsx} (100%) rename plugins/explore/src/components/{EntityExplorerContent => CatalogKindExploreContent}/index.ts (100%) create mode 100644 plugins/explore/src/components/DomainCard/DomainCard.test.tsx create mode 100644 plugins/explore/src/components/DomainCard/DomainCard.tsx create mode 100644 plugins/explore/src/components/DomainCard/index.ts diff --git a/plugins/explore/src/components/EntityExplorerContent/EntityExplorerContent.test.tsx b/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.test.tsx similarity index 100% rename from plugins/explore/src/components/EntityExplorerContent/EntityExplorerContent.test.tsx rename to plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.test.tsx diff --git a/plugins/explore/src/components/EntityExplorerContent/EntityExplorerContent.tsx b/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.tsx similarity index 100% rename from plugins/explore/src/components/EntityExplorerContent/EntityExplorerContent.tsx rename to plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.tsx diff --git a/plugins/explore/src/components/EntityExplorerContent/index.ts b/plugins/explore/src/components/CatalogKindExploreContent/index.ts similarity index 100% rename from plugins/explore/src/components/EntityExplorerContent/index.ts rename to plugins/explore/src/components/CatalogKindExploreContent/index.ts diff --git a/plugins/explore/src/components/DomainCard/DomainCard.test.tsx b/plugins/explore/src/components/DomainCard/DomainCard.test.tsx new file mode 100644 index 0000000000..eb2f165350 --- /dev/null +++ b/plugins/explore/src/components/DomainCard/DomainCard.test.tsx @@ -0,0 +1,15 @@ +/* + * Copyright 2023 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. + */ diff --git a/plugins/explore/src/components/DomainCard/DomainCard.tsx b/plugins/explore/src/components/DomainCard/DomainCard.tsx new file mode 100644 index 0000000000..eb2f165350 --- /dev/null +++ b/plugins/explore/src/components/DomainCard/DomainCard.tsx @@ -0,0 +1,15 @@ +/* + * Copyright 2023 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. + */ diff --git a/plugins/explore/src/components/DomainCard/index.ts b/plugins/explore/src/components/DomainCard/index.ts new file mode 100644 index 0000000000..eb2f165350 --- /dev/null +++ b/plugins/explore/src/components/DomainCard/index.ts @@ -0,0 +1,15 @@ +/* + * Copyright 2023 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. + */ From dfecc7db6b3f6bb69243de4a0a50761dd5c7cf07 Mon Sep 17 00:00:00 2001 From: sblausten Date: Fri, 17 Mar 2023 15:41:10 +0100 Subject: [PATCH 028/137] Review comments and fixing bug Signed-off-by: sblausten --- plugins/explore/api-report.md | 14 ++-- plugins/explore/package.json | 3 +- .../CatalogKindExploreContent.test.tsx | 12 +-- .../CatalogKindExploreContent.tsx | 19 +++-- .../CatalogKindExploreContent/index.ts | 2 +- .../DefaultExplorePage/DefaultExplorePage.tsx | 6 +- .../components/DomainCard/DomainCard.test.tsx | 54 +++++++++++++ .../src/components/DomainCard/DomainCard.tsx | 75 +++++++++++++++++++ .../src/components/DomainCard/index.ts | 17 +++++ .../components/EntityCard/EntityCard.test.tsx | 6 +- plugins/explore/src/components/index.ts | 3 +- 11 files changed, 181 insertions(+), 30 deletions(-) diff --git a/plugins/explore/api-report.md b/plugins/explore/api-report.md index d7bafb7ee0..27748aa8c5 100644 --- a/plugins/explore/api-report.md +++ b/plugins/explore/api-report.md @@ -9,6 +9,7 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { default as default_2 } from 'react'; import { DiscoveryApi } from '@backstage/core-plugin-api'; +import { DomainEntity } from '@backstage/catalog-model'; import { ExploreToolsConfig } from '@backstage/plugin-explore-react'; import { ExternalRouteRef } from '@backstage/core-plugin-api'; import { FetchApi } from '@backstage/core-plugin-api'; @@ -32,14 +33,17 @@ export const catalogEntityRouteRef: ExternalRouteRef< >; // @public (undocumented) -export const DomainExplorerContent: (props: { - title?: string | undefined; +export const CatalogKindExploreContent: (props: { + tabTitle?: string; + kind: string; }) => JSX.Element; // @public (undocumented) -export const EntityExplorerContent: (props: { - tabTitle?: string; - kind: string; +export const DomainCard: (props: { entity: DomainEntity }) => JSX.Element; + +// @public (undocumented) +export const DomainExplorerContent: (props: { + title?: string | undefined; }) => JSX.Element; // @public diff --git a/plugins/explore/package.json b/plugins/explore/package.json index d14a276ecc..2f5cad2244 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -46,7 +46,8 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", "classnames": "^2.2.6", - "react-use": "^17.2.4" + "react-use": "^17.2.4", + "pluralize": "^8.0.0" }, "peerDependencies": { "@types/react": "^16.13.1 || ^17.0.0", diff --git a/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.test.tsx b/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.test.tsx index 4670a10855..6075561ff1 100644 --- a/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.test.tsx +++ b/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.test.tsx @@ -19,9 +19,9 @@ import { catalogApiRef, entityRouteRef } from '@backstage/plugin-catalog-react'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; import { waitFor } from '@testing-library/react'; import React from 'react'; -import { EntityExplorerContent } from './EntityExplorerContent'; +import { CatalogKindExploreContent } from './CatalogKindExploreContent'; -describe('', () => { +describe('', () => { const catalogApi = { addLocation: jest.fn(), getEntities: jest.fn(), @@ -79,7 +79,7 @@ describe('', () => { const { getByText } = await renderInTestApp( - + , mountedRoutes, ); @@ -95,7 +95,7 @@ describe('', () => { const { getByText } = await renderInTestApp( - + , mountedRoutes, ); @@ -108,7 +108,7 @@ describe('', () => { const { getByText } = await renderInTestApp( - + , mountedRoutes, ); @@ -124,7 +124,7 @@ describe('', () => { const { getByText } = await renderInTestApp( - + , mountedRoutes, ); diff --git a/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.tsx b/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.tsx index 55ef13d98e..f3f4ccd103 100644 --- a/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.tsx +++ b/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.tsx @@ -30,10 +30,11 @@ import { WarningPanel, } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; +import pluralize from 'pluralize'; const Body = (props: { kind: string }) => { const { kind } = props; - const kindPlural = `${kind}s`; + const kindPlural = pluralize(kind); const catalogApi = useApi(catalogApiRef); const { value: entities, @@ -44,7 +45,7 @@ const Body = (props: { kind: string }) => { filter: { kind }, }); return response.items as Entity[]; - }, [catalogApi]); + }, [kind]); if (loading) { return ; @@ -87,23 +88,21 @@ const Body = (props: { kind: string }) => { }; /** @public */ -export const EntityExplorerContent = (props: { +export const CatalogKindExploreContent = (props: { tabTitle?: string; kind: string; }) => { const { kind, tabTitle } = props; + const kindLowercase = kind.toLocaleLowerCase(); + const kindCapitalized = `${kind[0].toLocaleUpperCase()}${kind.substring(1)}`; return ( - + - Discover the {kind.toLocaleLowerCase()}s in your ecosystem. + Discover the {pluralize(kindLowercase)} in your ecosystem. - + ); }; diff --git a/plugins/explore/src/components/CatalogKindExploreContent/index.ts b/plugins/explore/src/components/CatalogKindExploreContent/index.ts index ab06193939..af4cafae62 100644 --- a/plugins/explore/src/components/CatalogKindExploreContent/index.ts +++ b/plugins/explore/src/components/CatalogKindExploreContent/index.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { EntityExplorerContent } from './EntityExplorerContent'; +export { CatalogKindExploreContent } from './CatalogKindExploreContent'; diff --git a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.tsx b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.tsx index 49a79f5143..689da217fe 100644 --- a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.tsx +++ b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.tsx @@ -19,7 +19,7 @@ import { ExploreLayout } from '../ExploreLayout'; import { GroupsExplorerContent } from '../GroupsExplorerContent'; import { ToolExplorerContent } from '../ToolExplorerContent'; import { configApiRef, useApi } from '@backstage/core-plugin-api'; -import { EntityExplorerContent } from '../EntityExplorerContent'; +import { CatalogKindExploreContent } from '../CatalogKindExploreContent'; export const DefaultExplorePage = () => { const configApi = useApi(configApiRef); @@ -32,10 +32,10 @@ export const DefaultExplorePage = () => { subtitle="Discover solutions available in your ecosystem" > - + - + diff --git a/plugins/explore/src/components/DomainCard/DomainCard.test.tsx b/plugins/explore/src/components/DomainCard/DomainCard.test.tsx index eb2f165350..1e4b9b30f1 100644 --- a/plugins/explore/src/components/DomainCard/DomainCard.test.tsx +++ b/plugins/explore/src/components/DomainCard/DomainCard.test.tsx @@ -1,3 +1,57 @@ +/* + * 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 { DomainEntity } from '@backstage/catalog-model'; +import { entityRouteRef } from '@backstage/plugin-catalog-react'; +import { renderInTestApp } from '@backstage/test-utils'; +import React from 'react'; +import { DomainCard } from './DomainCard'; + +describe('', () => { + it('renders a domain card', async () => { + const entity: DomainEntity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Domain', + metadata: { + name: 'artists', + description: 'Everything about artists', + tags: ['a-tag'], + }, + spec: { + owner: 'guest', + }, + }; + const { getByText } = await renderInTestApp( + , + { + mountedRoutes: { + '/catalog/:namespace/:kind/:name': entityRouteRef, + }, + }, + ); + + expect(getByText('artists')).toBeInTheDocument(); + expect(getByText('Everything about artists')).toBeInTheDocument(); + expect(getByText('a-tag')).toBeInTheDocument(); + expect(getByText('Explore').parentElement).toHaveAttribute( + 'href', + '/catalog/default/domain/artists', + ); + }); +}); /* * Copyright 2023 The Backstage Authors * diff --git a/plugins/explore/src/components/DomainCard/DomainCard.tsx b/plugins/explore/src/components/DomainCard/DomainCard.tsx index eb2f165350..867109f03c 100644 --- a/plugins/explore/src/components/DomainCard/DomainCard.tsx +++ b/plugins/explore/src/components/DomainCard/DomainCard.tsx @@ -1,3 +1,78 @@ +/* + * 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 { DomainEntity, RELATION_OWNED_BY } from '@backstage/catalog-model'; +import { + EntityRefLinks, + entityRouteParams, + getEntityRelations, + entityRouteRef, +} from '@backstage/plugin-catalog-react'; +import { + Box, + Card, + CardActions, + CardContent, + CardMedia, + Chip, +} from '@material-ui/core'; +import React from 'react'; + +import { LinkButton, ItemCardHeader } from '@backstage/core-components'; +import { useRouteRef } from '@backstage/core-plugin-api'; + +/** @public */ +export const DomainCard = (props: { entity: DomainEntity }) => { + const { entity } = props; + + const catalogEntityRoute = useRouteRef(entityRouteRef); + const ownedByRelations = getEntityRelations(entity, RELATION_OWNED_BY); + const url = catalogEntityRoute(entityRouteParams(entity)); + + const owner = ( + + ); + + return ( + + + + + + {entity.metadata.tags?.length ? ( + + {entity.metadata.tags.map(tag => ( + + ))} + + ) : null} + {entity.metadata.description} + + + + Explore + + + + ); +}; /* * Copyright 2023 The Backstage Authors * diff --git a/plugins/explore/src/components/DomainCard/index.ts b/plugins/explore/src/components/DomainCard/index.ts index eb2f165350..47870e5645 100644 --- a/plugins/explore/src/components/DomainCard/index.ts +++ b/plugins/explore/src/components/DomainCard/index.ts @@ -1,3 +1,20 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { DomainCard } from './DomainCard'; /* * Copyright 2023 The Backstage Authors * diff --git a/plugins/explore/src/components/EntityCard/EntityCard.test.tsx b/plugins/explore/src/components/EntityCard/EntityCard.test.tsx index ccf5deb875..4b006e347f 100644 --- a/plugins/explore/src/components/EntityCard/EntityCard.test.tsx +++ b/plugins/explore/src/components/EntityCard/EntityCard.test.tsx @@ -14,15 +14,15 @@ * limitations under the License. */ -import { DomainEntity } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; import { entityRouteRef } from '@backstage/plugin-catalog-react'; import { renderInTestApp } from '@backstage/test-utils'; import React from 'react'; import { EntityCard } from './EntityCard'; describe('', () => { - it('renders a domain card', async () => { - const entity: DomainEntity = { + it('renders an entity card', async () => { + const entity: Entity = { apiVersion: 'backstage.io/v1alpha1', kind: 'Domain', metadata: { diff --git a/plugins/explore/src/components/index.ts b/plugins/explore/src/components/index.ts index e2f7810216..b3aa82bc79 100644 --- a/plugins/explore/src/components/index.ts +++ b/plugins/explore/src/components/index.ts @@ -14,5 +14,6 @@ * limitations under the License. */ -export * from './EntityExplorerContent'; +export * from './CatalogKindExploreContent'; export * from './ExploreLayout'; +export * from './DomainCard'; From 7137f8f1dc6708a7d01f1bdd1e70aa9752f95a43 Mon Sep 17 00:00:00 2001 From: sblausten Date: Fri, 17 Mar 2023 15:43:22 +0100 Subject: [PATCH 029/137] Change to patch changeset Signed-off-by: sblausten --- .changeset/itchy-kiwis-unite.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/itchy-kiwis-unite.md b/.changeset/itchy-kiwis-unite.md index e0bee850eb..c7bcad6759 100644 --- a/.changeset/itchy-kiwis-unite.md +++ b/.changeset/itchy-kiwis-unite.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-explore': minor +'@backstage/plugin-explore': patch --- Extracted generic EntityExplorerContent component so that it is easy to show any component kinds in their own tab in the Explore page. From 2ad6372e450c769cf948641f785bb30cf09786e5 Mon Sep 17 00:00:00 2001 From: sblausten Date: Fri, 17 Mar 2023 15:44:31 +0100 Subject: [PATCH 030/137] Remove systems tab from defaults Signed-off-by: sblausten --- .../components/DefaultExplorePage/DefaultExplorePage.test.tsx | 1 - .../src/components/DefaultExplorePage/DefaultExplorePage.tsx | 3 --- 2 files changed, 4 deletions(-) diff --git a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx index c4c6b3011e..b04e9335e8 100644 --- a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx +++ b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx @@ -58,7 +58,6 @@ describe('', () => { const elements = getAllByRole('tab'); expect(elements.length).toBe(4); expect(getByText(elements[0], 'Domains')).toBeInTheDocument(); - expect(getByText(elements[1], 'Systems')).toBeInTheDocument(); expect(getByText(elements[2], 'Groups')).toBeInTheDocument(); expect(getByText(elements[3], 'Tools')).toBeInTheDocument(); }); diff --git a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.tsx b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.tsx index 689da217fe..098f73be2e 100644 --- a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.tsx +++ b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.tsx @@ -34,9 +34,6 @@ export const DefaultExplorePage = () => { - - - From d12f28c0f249b0eee7ac71f031de9f42097ad048 Mon Sep 17 00:00:00 2001 From: sblausten Date: Fri, 17 Mar 2023 15:45:42 +0100 Subject: [PATCH 031/137] Ammend readme Signed-off-by: sblausten --- plugins/explore/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/explore/README.md b/plugins/explore/README.md index 27093b69b8..44942ab2a3 100644 --- a/plugins/explore/README.md +++ b/plugins/explore/README.md @@ -2,7 +2,7 @@ Welcome to the explore plugin! -This plugin helps to visualize the domains, systems and tools in your ecosystem. +This plugin helps to visualize the top level entities like domains, groups and tools in your ecosystem. ## Setup From bda537de2c440509dae012207426a40bb7665640 Mon Sep 17 00:00:00 2001 From: sblausten Date: Fri, 17 Mar 2023 15:47:07 +0100 Subject: [PATCH 032/137] Rename prop Signed-off-by: sblausten --- .../CatalogKindExploreContent.test.tsx | 2 +- .../CatalogKindExploreContent/CatalogKindExploreContent.tsx | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.test.tsx b/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.test.tsx index 6075561ff1..4f4f0f034c 100644 --- a/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.test.tsx +++ b/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.test.tsx @@ -95,7 +95,7 @@ describe('', () => { const { getByText } = await renderInTestApp( - + , mountedRoutes, ); diff --git a/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.tsx b/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.tsx index f3f4ccd103..f6f76ce1e0 100644 --- a/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.tsx +++ b/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.tsx @@ -89,15 +89,15 @@ const Body = (props: { kind: string }) => { /** @public */ export const CatalogKindExploreContent = (props: { - tabTitle?: string; + title?: string; kind: string; }) => { - const { kind, tabTitle } = props; + const { kind, title } = props; const kindLowercase = kind.toLocaleLowerCase(); const kindCapitalized = `${kind[0].toLocaleUpperCase()}${kind.substring(1)}`; return ( - + Discover the {pluralize(kindLowercase)} in your ecosystem. From 194013944ad099a43767ccb0e1d174e8127b22f0 Mon Sep 17 00:00:00 2001 From: sblausten Date: Fri, 17 Mar 2023 15:48:19 +0100 Subject: [PATCH 033/137] Update api report Signed-off-by: sblausten --- plugins/explore/api-report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/explore/api-report.md b/plugins/explore/api-report.md index 27748aa8c5..70ad479841 100644 --- a/plugins/explore/api-report.md +++ b/plugins/explore/api-report.md @@ -34,7 +34,7 @@ export const catalogEntityRouteRef: ExternalRouteRef< // @public (undocumented) export const CatalogKindExploreContent: (props: { - tabTitle?: string; + title?: string; kind: string; }) => JSX.Element; From 2216940d26db0421fc0b51b0c375747be88d7fde Mon Sep 17 00:00:00 2001 From: sblausten Date: Fri, 17 Mar 2023 15:50:10 +0100 Subject: [PATCH 034/137] deps Signed-off-by: sblausten --- plugins/explore/package.json | 4 ++-- yarn.lock | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/explore/package.json b/plugins/explore/package.json index 2f5cad2244..8f2e0a6126 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -46,8 +46,8 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", "classnames": "^2.2.6", - "react-use": "^17.2.4", - "pluralize": "^8.0.0" + "pluralize": "^8.0.0", + "react-use": "^17.2.4" }, "peerDependencies": { "@types/react": "^16.13.1 || ^17.0.0", diff --git a/yarn.lock b/yarn.lock index ad03a668e0..561e390fd0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6045,6 +6045,7 @@ __metadata: classnames: ^2.2.6 cross-fetch: ^3.1.5 msw: ^1.0.0 + pluralize: ^8.0.0 react-use: ^17.2.4 peerDependencies: "@types/react": ^16.13.1 || ^17.0.0 From f4f50d8eef222bd07cff48d27816ec0b1ec979f8 Mon Sep 17 00:00:00 2001 From: "antonio.bergas" Date: Sat, 18 Mar 2023 23:01:03 +0100 Subject: [PATCH 035/137] [Playlist] feat: added dynamic group noun through the config Signed-off-by: antonio.bergas --- app-config.yaml | 4 ++ plugins/playlist/config.d.ts | 31 +++++++++++ plugins/playlist/package.json | 23 +++++++- .../CreatePlaylistButton.tsx | 14 +++-- .../EntityPlaylistDialog.tsx | 38 +++++++++++--- .../PlaylistEditDialog/PlaylistEditDialog.tsx | 13 +++-- .../PlaylistIndexPage/PlaylistIndexPage.tsx | 52 ++++++++++--------- .../components/PlaylistList/PlaylistList.tsx | 7 ++- .../PlaylistPage/PlaylistEntitiesTable.tsx | 10 ++-- .../PlaylistPage/PlaylistHeader.tsx | 5 +- plugins/playlist/src/hooks/index.ts | 1 + plugins/playlist/src/hooks/useConfig.ts | 27 ++++++++++ .../playlist/src/hooks/usePlaylistList.tsx | 2 +- 13 files changed, 181 insertions(+), 46 deletions(-) create mode 100644 plugins/playlist/config.d.ts create mode 100644 plugins/playlist/src/hooks/useConfig.ts diff --git a/app-config.yaml b/app-config.yaml index 385c9c2e0e..7b94e2fb2e 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -125,6 +125,10 @@ proxy: organization: name: My Company + +playlist: + groupPluralNoun: Collections + groupSingularNoun: Collection # Reference documentation http://backstage.io/docs/features/techdocs/configuration # Note: After experimenting with basic setup, use CI/CD to generate docs diff --git a/plugins/playlist/config.d.ts b/plugins/playlist/config.d.ts new file mode 100644 index 0000000000..5f59ffc236 --- /dev/null +++ b/plugins/playlist/config.d.ts @@ -0,0 +1,31 @@ +/* + * 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. + */ + +export interface Config { + playlist: { + /** + * (Optional) The plural noun for the entities grouping that will shown in the UI; leave empty for `PLaylists`. + * @visibility frontend + */ + groupPluralNoun: string; + + /** + * (Optional) The singular noun for the entities grouping that will shown in the UI; leave empty for `PLaylists`. + * @visibility frontend + */ + groupSingularNoun: string; + }; +} diff --git a/plugins/playlist/package.json b/plugins/playlist/package.json index 59cde3f246..bed1d654c5 100644 --- a/plugins/playlist/package.json +++ b/plugins/playlist/package.json @@ -66,5 +66,26 @@ }, "files": [ "dist" - ] + ], + "configSchema": { + "$schema": "https://backstage.io/schema/config-v1", + "type": "object", + "properties": { + "playlist": { + "type": "object", + "properties": { + "groupPluralNoun": { + "type": "string", + "description": "Frontend plural entities grouping name", + "visibility": "frontend" + }, + "groupSingularNoun": { + "type": "string", + "description": "Frontend singular entities grouping name", + "visibility": "frontend" + } + } + } + } + } } diff --git a/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx b/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx index c064f28591..a615e2cb36 100644 --- a/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx +++ b/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx @@ -14,7 +14,12 @@ * limitations under the License. */ -import { errorApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api'; +import { + configApiRef, + errorApiRef, + useApi, + useRouteRef, +} from '@backstage/core-plugin-api'; import { BackstageTheme } from '@backstage/theme'; import { usePermission } from '@backstage/plugin-permission-react'; import { @@ -29,6 +34,7 @@ import { useNavigate } from 'react-router-dom'; import { playlistApiRef } from '../../api'; import { playlistRouteRef } from '../../routes'; import { PlaylistEditDialog } from '../PlaylistEditDialog'; +import { useGroupNoun } from '../../hooks/useConfig'; export const CreatePlaylistButton = () => { const navigate = useNavigate(); @@ -55,13 +61,15 @@ export const CreatePlaylistButton = () => { [errorApi, navigate, playlistApi, playlistRoute], ); + const groupSingularNounLowerCase = useGroupNoun(false, false); + return ( <> {isXSScreen ? ( setOpenDialog(true)} > @@ -74,7 +82,7 @@ export const CreatePlaylistButton = () => { color="primary" onClick={() => setOpenDialog(true)} > - Create Playlist + Create {groupSingularNounLowerCase} )} { [playlistApi], ); + const groupSingularNoun = useGroupNoun(true, false); + const groupSingularNounLowerCase = useGroupNoun(false, true); + const groupPluralNounLowerCase = useGroupNoun(true, true); + useEffect(() => { if (open) { loadPlaylists(); @@ -120,12 +130,19 @@ export const EntityPlaylistDialog = (props: EntityPlaylistDialogProps) => { navigate(playlistRoute({ playlistId })); } catch (e) { alertApi.post({ - message: `Failed to add entity to playlist: ${e}`, + message: `Failed to add entity to ${groupSingularNounLowerCase}: ${e}`, severity: 'error', }); } }, - [alertApi, entity, navigate, playlistApi, playlistRoute], + [ + alertApi, + entity, + navigate, + playlistApi, + playlistRoute, + groupSingularNounLowerCase, + ], ); const [{ loading: addEntityLoading }, addToPlaylist] = useAsyncFn( @@ -141,12 +158,12 @@ export const EntityPlaylistDialog = (props: EntityPlaylistDialogProps) => { }); } catch (e) { alertApi.post({ - message: `Failed to add entity to playlist: ${e}`, + message: `Failed to add entity to ${groupSingularNounLowerCase}: ${e}`, severity: 'error', }); } }, - [alertApi, closeDialog, entity, playlistApi], + [alertApi, closeDialog, entity, playlistApi, groupSingularNounLowerCase], ); return ( @@ -160,7 +177,7 @@ export const EntityPlaylistDialog = (props: EntityPlaylistDialogProps) => { > {(loading || addEntityLoading) && } - Add to Playlist + Add to {groupSingularNoun} { {error && ( - + )} {playlists && entity && ( @@ -205,7 +225,9 @@ export const EntityPlaylistDialog = (props: EntityPlaylistDialogProps) => { - + )} {playlists diff --git a/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx b/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx index 27cc13fede..ebdf4a1798 100644 --- a/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx +++ b/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx @@ -15,7 +15,11 @@ */ import { parseEntityRef } from '@backstage/catalog-model'; -import { identityApiRef, useApi } from '@backstage/core-plugin-api'; +import { + configApiRef, + identityApiRef, + useApi, +} from '@backstage/core-plugin-api'; import { humanizeEntityRef } from '@backstage/plugin-catalog-react'; import { PlaylistMetadata } from '@backstage/plugin-playlist-common'; import { @@ -39,6 +43,7 @@ import React from 'react'; import { useForm, Controller } from 'react-hook-form'; import useAsync from 'react-use/lib/useAsync'; import useAsyncFn from 'react-use/lib/useAsyncFn'; +import { useGroupNoun } from '../../hooks/useConfig'; const useStyles = makeStyles({ buttonWrapper: { @@ -105,6 +110,8 @@ export const PlaylistEditDialog = ({ } }; + const groupSingularNounLowercase = useGroupNoun(false, false); + return (

@@ -121,7 +128,7 @@ export const PlaylistEditDialog = ({ fullWidth label="Name" margin="dense" - placeholder="Give your playlist name" + placeholder={`Give your ${groupSingularNounLowercase} name`} required type="text" /> @@ -139,7 +146,7 @@ export const PlaylistEditDialog = ({ label="Description" margin="dense" multiline - placeholder="Describe your playlist" + placeholder={`Describe your ${groupSingularNounLowercase}`} type="text" /> )} diff --git a/plugins/playlist/src/components/PlaylistIndexPage/PlaylistIndexPage.tsx b/plugins/playlist/src/components/PlaylistIndexPage/PlaylistIndexPage.tsx index 0ee829018a..6a92718df2 100644 --- a/plugins/playlist/src/components/PlaylistIndexPage/PlaylistIndexPage.tsx +++ b/plugins/playlist/src/components/PlaylistIndexPage/PlaylistIndexPage.tsx @@ -23,7 +23,7 @@ import { } from '@backstage/core-components'; import { CatalogFilterLayout } from '@backstage/plugin-catalog-react'; -import { PlaylistListProvider } from '../../hooks'; +import { PlaylistListProvider, useGroupNoun } from '../../hooks'; import { CreatePlaylistButton } from '../CreatePlaylistButton'; import { PersonalListPicker } from '../PersonalListPicker'; import { PlaylistList } from '../PlaylistList'; @@ -31,26 +31,30 @@ import { PlaylistOwnerPicker } from '../PlaylistOwnerPicker'; import { PlaylistSearchBar } from '../PlaylistSearchBar'; import { PlaylistSortPicker } from '../PlaylistSortPicker'; -export const PlaylistIndexPage = () => ( - - - - - - - - - - - - - - - - - - - - - -); +export const PlaylistIndexPage = () => { + const groupPluralNoun = useGroupNoun(true, false); + + return ( + + + + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/plugins/playlist/src/components/PlaylistList/PlaylistList.tsx b/plugins/playlist/src/components/PlaylistList/PlaylistList.tsx index fcc3971542..fd8569e758 100644 --- a/plugins/playlist/src/components/PlaylistList/PlaylistList.tsx +++ b/plugins/playlist/src/components/PlaylistList/PlaylistList.tsx @@ -23,18 +23,21 @@ import { } from '@backstage/core-components'; import { Typography } from '@material-ui/core'; -import { usePlaylistList } from '../../hooks'; +import { useGroupNoun, usePlaylistList } from '../../hooks'; import { PlaylistCard } from '../PlaylistCard'; export const PlaylistList = () => { const { loading, error, playlists } = usePlaylistList(); + const groupPluralNounLowercase = useGroupNoun(true, true); return ( <> {loading && } {error && ( - + {error.message} )} diff --git a/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.tsx b/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.tsx index f499f59a61..384d51612b 100644 --- a/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.tsx +++ b/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.tsx @@ -21,7 +21,7 @@ import { Table, TableFilter, } from '@backstage/core-components'; -import { errorApiRef, useApi } from '@backstage/core-plugin-api'; +import { configApiRef, errorApiRef, useApi } from '@backstage/core-plugin-api'; import { EntityRefLink } from '@backstage/plugin-catalog-react'; import { usePermission } from '@backstage/plugin-permission-react'; import { permissions } from '@backstage/plugin-playlist-common'; @@ -32,6 +32,7 @@ import React, { forwardRef, useCallback, useEffect, useState } from 'react'; import useAsyncFn from 'react-use/lib/useAsyncFn'; import { playlistApiRef } from '../../api'; +import { useGroupNoun } from '../../hooks/useConfig'; import { AddEntitiesDrawer } from './AddEntitiesDrawer'; export const PlaylistEntitiesTable = ({ @@ -41,6 +42,7 @@ export const PlaylistEntitiesTable = ({ }) => { const errorApi = useApi(errorApiRef); const playlistApi = useApi(playlistApiRef); + const configApi = useApi(configApiRef); const [openAddEntitiesDrawer, setOpenAddEntitiesDrawer] = useState(false); const { allowed: editAllowed } = usePermission({ @@ -84,16 +86,18 @@ export const PlaylistEntitiesTable = ({ [errorApi, loadEntities, playlistApi, playlistId], ); + const groupSingularNounLowerCase = useGroupNoun(false, true); + const actions = editAllowed ? [ { icon: DeleteIcon, - tooltip: 'Remove from playlist', + tooltip: `Remove from ${groupSingularNounLowerCase}`, onClick: removeEntity, }, { icon: AddBoxIcon, - tooltip: 'Add entities to playlist', + tooltip: `Add entities to ${groupSingularNounLowerCase}`, isFreeAction: true, onClick: () => setOpenAddEntitiesDrawer(true), }, diff --git a/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx b/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx index 7f4457062d..ecf443b565 100644 --- a/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx +++ b/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx @@ -45,6 +45,7 @@ import useAsyncFn from 'react-use/lib/useAsyncFn'; import { playlistApiRef } from '../../api'; import { rootRouteRef } from '../../routes'; import { PlaylistEditDialog } from '../PlaylistEditDialog'; +import { useGroupNoun } from '../../hooks/useConfig'; const useStyles = makeStyles({ buttonWrapper: { @@ -109,6 +110,8 @@ export const PlaylistHeader = ({ playlist, onUpdate }: PlaylistHeaderProps) => { } }, [playlistApi]); + const groupSingularNoun = useGroupNoun(false, false); + return (
{ onClick: () => setOpenEditDialog(true), }, { - label: 'Delete Playlist', + label: `Delete ${groupSingularNoun}`, icon: , disabled: !deleteAllowed, onClick: () => setOpenDeleteDialog(true), diff --git a/plugins/playlist/src/hooks/index.ts b/plugins/playlist/src/hooks/index.ts index 316121b515..da045fbf65 100644 --- a/plugins/playlist/src/hooks/index.ts +++ b/plugins/playlist/src/hooks/index.ts @@ -15,3 +15,4 @@ */ export * from './usePlaylistList'; +export * from './useConfig'; diff --git a/plugins/playlist/src/hooks/useConfig.ts b/plugins/playlist/src/hooks/useConfig.ts new file mode 100644 index 0000000000..15d44570a8 --- /dev/null +++ b/plugins/playlist/src/hooks/useConfig.ts @@ -0,0 +1,27 @@ +/* + * Copyright 2022 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 { configApiRef, useApi } from '@backstage/core-plugin-api'; + +export function useGroupNoun(inPlural: boolean, inLowerCase: boolean) { + const configApi = useApi(configApiRef); + const defaultNoun = inPlural ? 'Playlists' : 'Playlist'; + const configProp = inPlural ? 'groupPluralNoun' : 'groupSingularNoun'; + const groupNoun = + configApi.getOptionalString(`playlist.${configProp}`) ?? `${defaultNoun}`; + + return inLowerCase ? groupNoun.toLocaleLowerCase('en-US') : groupNoun; +} diff --git a/plugins/playlist/src/hooks/usePlaylistList.tsx b/plugins/playlist/src/hooks/usePlaylistList.tsx index 69f712413b..4d2b857520 100644 --- a/plugins/playlist/src/hooks/usePlaylistList.tsx +++ b/plugins/playlist/src/hooks/usePlaylistList.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { useApi } from '@backstage/core-plugin-api'; +import { configApiRef, useApi } from '@backstage/core-plugin-api'; import { Playlist } from '@backstage/plugin-playlist-common'; import { compact, isEqual } from 'lodash'; import qs from 'qs'; From 1207646d38af969cd8052d73f4d982c8dcda14c5 Mon Sep 17 00:00:00 2001 From: "antonio.bergas" Date: Sat, 18 Mar 2023 23:13:00 +0100 Subject: [PATCH 036/137] [Playlist] feat: added dynamic group noun through the config Signed-off-by: antonio.bergas --- plugins/playlist/README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/plugins/playlist/README.md b/plugins/playlist/README.md index 6ae3fb84ac..c85eee8f94 100644 --- a/plugins/playlist/README.md +++ b/plugins/playlist/README.md @@ -131,6 +131,18 @@ const defaultEntityPage = ( Note: the above only shows an example for the `defaultEntityPage` for a full example of this you can look at [this EntityPage](../../packages/app/src/components/catalog/EntityPage.tsx) +## Custom Group Noun + +You can define your custom group noun to shown in all the components of the Playlist plugin in the UI. To do this you just need to add some config in your **app-config.yaml**, here's an example: + +```yaml +playlist: + groupPluralNoun: Collections + groupSingularNoun: Collection +``` + +_You will always need the plural and the singular matching to have a consistency in the UI_ + ## Features ### View All Playlists From 03cfdd388cfdac2e27f5d5e0f3b46c417e0840a0 Mon Sep 17 00:00:00 2001 From: "antonio.bergas" Date: Sat, 18 Mar 2023 23:14:14 +0100 Subject: [PATCH 037/137] [Playlist] feat: added dynamic group noun through the config Signed-off-by: antonio.bergas --- app-config.yaml | 4 ---- .../EntityPlaylistDialog/EntityPlaylistDialog.tsx | 7 +------ 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/app-config.yaml b/app-config.yaml index 7b94e2fb2e..385c9c2e0e 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -125,10 +125,6 @@ proxy: organization: name: My Company - -playlist: - groupPluralNoun: Collections - groupSingularNoun: Collection # Reference documentation http://backstage.io/docs/features/techdocs/configuration # Note: After experimenting with basic setup, use CI/CD to generate docs diff --git a/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.tsx b/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.tsx index 1bf26fadd7..cc69a24d78 100644 --- a/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.tsx +++ b/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.tsx @@ -16,12 +16,7 @@ import { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model'; import { ResponseErrorPanel } from '@backstage/core-components'; -import { - alertApiRef, - configApiRef, - useApi, - useRouteRef, -} from '@backstage/core-plugin-api'; +import { alertApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api'; import { humanizeEntityRef, useAsyncEntity, From a3967b9a55c82ec7980ade5ade17f113a6389ff4 Mon Sep 17 00:00:00 2001 From: "antonio.bergas" Date: Sat, 18 Mar 2023 23:16:05 +0100 Subject: [PATCH 038/137] [Playlist] feat: added dynamic group noun through the config Signed-off-by: antonio.bergas --- plugins/playlist/src/hooks/usePlaylistList.test.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/playlist/src/hooks/usePlaylistList.test.tsx b/plugins/playlist/src/hooks/usePlaylistList.test.tsx index 9b4b0ca0fc..f528375db6 100644 --- a/plugins/playlist/src/hooks/usePlaylistList.test.tsx +++ b/plugins/playlist/src/hooks/usePlaylistList.test.tsx @@ -16,7 +16,6 @@ import { ConfigApi, - configApiRef, IdentityApi, identityApiRef, } from '@backstage/core-plugin-api'; From 81933db1259a3a0f4ec84110b59fb8fe57d2edbc Mon Sep 17 00:00:00 2001 From: "antonio.bergas" Date: Sat, 18 Mar 2023 23:24:08 +0100 Subject: [PATCH 039/137] Fixed wrong import delete Signed-off-by: antonio.bergas --- plugins/playlist/src/hooks/usePlaylistList.test.tsx | 1 + plugins/playlist/src/hooks/usePlaylistList.tsx | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/playlist/src/hooks/usePlaylistList.test.tsx b/plugins/playlist/src/hooks/usePlaylistList.test.tsx index f528375db6..9b4b0ca0fc 100644 --- a/plugins/playlist/src/hooks/usePlaylistList.test.tsx +++ b/plugins/playlist/src/hooks/usePlaylistList.test.tsx @@ -16,6 +16,7 @@ import { ConfigApi, + configApiRef, IdentityApi, identityApiRef, } from '@backstage/core-plugin-api'; diff --git a/plugins/playlist/src/hooks/usePlaylistList.tsx b/plugins/playlist/src/hooks/usePlaylistList.tsx index 4d2b857520..69f712413b 100644 --- a/plugins/playlist/src/hooks/usePlaylistList.tsx +++ b/plugins/playlist/src/hooks/usePlaylistList.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { configApiRef, useApi } from '@backstage/core-plugin-api'; +import { useApi } from '@backstage/core-plugin-api'; import { Playlist } from '@backstage/plugin-playlist-common'; import { compact, isEqual } from 'lodash'; import qs from 'qs'; From ed30a8b213b7958cd9fe120daf7f988be8611c92 Mon Sep 17 00:00:00 2001 From: "antonio.bergas" Date: Sat, 18 Mar 2023 23:33:16 +0100 Subject: [PATCH 040/137] Update changelog and version Signed-off-by: antonio.bergas --- plugins/playlist/CHANGELOG.md | 4 ++++ plugins/playlist/package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/playlist/CHANGELOG.md b/plugins/playlist/CHANGELOG.md index 43a7ff4e4d..648ff6319d 100644 --- a/plugins/playlist/CHANGELOG.md +++ b/plugins/playlist/CHANGELOG.md @@ -1,5 +1,9 @@ # @backstage/plugin-playlist +## 0.1.8 + +- Added config properties to change dynamically the group noun for all the components in the UI + ## 0.1.7 ### Patch Changes diff --git a/plugins/playlist/package.json b/plugins/playlist/package.json index bed1d654c5..289236428b 100644 --- a/plugins/playlist/package.json +++ b/plugins/playlist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist", - "version": "0.1.7", + "version": "0.1.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", From 1b3c05460479ec0ebbe1a9e16d859fcc6c4bab86 Mon Sep 17 00:00:00 2001 From: "antonio.bergas" Date: Sat, 18 Mar 2023 23:42:21 +0100 Subject: [PATCH 041/137] Added missing changeset Removed imports not used Signed-off-by: antonio.bergas --- .changeset/perfect-deers-add.md | 5 +++++ .../CreatePlaylistButton/CreatePlaylistButton.tsx | 7 +------ .../components/PlaylistEditDialog/PlaylistEditDialog.tsx | 6 +----- .../src/components/PlaylistPage/PlaylistEntitiesTable.tsx | 3 +-- 4 files changed, 8 insertions(+), 13 deletions(-) create mode 100644 .changeset/perfect-deers-add.md diff --git a/.changeset/perfect-deers-add.md b/.changeset/perfect-deers-add.md new file mode 100644 index 0000000000..c932351a19 --- /dev/null +++ b/.changeset/perfect-deers-add.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-playlist': patch +--- + +Added config properties to change dynamically the group noun for all the components in the UI diff --git a/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx b/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx index a615e2cb36..cc7427c96c 100644 --- a/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx +++ b/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx @@ -14,12 +14,7 @@ * limitations under the License. */ -import { - configApiRef, - errorApiRef, - useApi, - useRouteRef, -} from '@backstage/core-plugin-api'; +import { errorApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api'; import { BackstageTheme } from '@backstage/theme'; import { usePermission } from '@backstage/plugin-permission-react'; import { diff --git a/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx b/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx index ebdf4a1798..d8f48cbecf 100644 --- a/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx +++ b/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx @@ -15,11 +15,7 @@ */ import { parseEntityRef } from '@backstage/catalog-model'; -import { - configApiRef, - identityApiRef, - useApi, -} from '@backstage/core-plugin-api'; +import { identityApiRef, useApi } from '@backstage/core-plugin-api'; import { humanizeEntityRef } from '@backstage/plugin-catalog-react'; import { PlaylistMetadata } from '@backstage/plugin-playlist-common'; import { diff --git a/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.tsx b/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.tsx index 384d51612b..3f9e10c4c8 100644 --- a/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.tsx +++ b/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.tsx @@ -21,7 +21,7 @@ import { Table, TableFilter, } from '@backstage/core-components'; -import { configApiRef, errorApiRef, useApi } from '@backstage/core-plugin-api'; +import { errorApiRef, useApi } from '@backstage/core-plugin-api'; import { EntityRefLink } from '@backstage/plugin-catalog-react'; import { usePermission } from '@backstage/plugin-permission-react'; import { permissions } from '@backstage/plugin-playlist-common'; @@ -42,7 +42,6 @@ export const PlaylistEntitiesTable = ({ }) => { const errorApi = useApi(errorApiRef); const playlistApi = useApi(playlistApiRef); - const configApi = useApi(configApiRef); const [openAddEntitiesDrawer, setOpenAddEntitiesDrawer] = useState(false); const { allowed: editAllowed } = usePermission({ From 386cfe0fc9f490e4b6011548f635be4ed4af17e6 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Mon, 20 Mar 2023 09:04:23 +0000 Subject: [PATCH 042/137] review comment Signed-off-by: Brian Fletcher --- docs/integrations/bitbucketCloud/discovery.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/integrations/bitbucketCloud/discovery.md b/docs/integrations/bitbucketCloud/discovery.md index e1bfc6ad45..6e1533dea0 100644 --- a/docs/integrations/bitbucketCloud/discovery.md +++ b/docs/integrations/bitbucketCloud/discovery.md @@ -92,7 +92,7 @@ export default async function createPlugin( const builder = await CatalogBuilder.create(env); builder.addProcessor(new ScaffolderEntitiesProcessor()); /* highlight-add-start */ - const bitBucketProvider = BitbucketCloudEntityProvider.fromConfig( + const bitbucketCloudProvider = BitbucketCloudEntityProvider.fromConfig( env.config, { catalogApi: new CatalogClient({ discoveryApi: env.discovery }), @@ -101,8 +101,8 @@ export default async function createPlugin( tokenManager: env.tokenManager, }, ); - env.eventBroker.subscribe(bitBucketProvider); - builder.addEntityProvider(bitBucketProvider); + env.eventBroker.subscribe(bitbucketCloudProvider); + builder.addEntityProvider(bitbucketCloudProvider); /* highlight-add-end */ const { processingEngine, router } = await builder.build(); await processingEngine.start(); From e604552e3d99e5b0cf9ed3fd07514e82276a36bb Mon Sep 17 00:00:00 2001 From: sblausten Date: Mon, 20 Mar 2023 11:31:29 +0100 Subject: [PATCH 043/137] Add test Signed-off-by: sblausten --- .../components/DefaultExplorePage/DefaultExplorePage.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx index b04e9335e8..153bcdb73b 100644 --- a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx +++ b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx @@ -56,7 +56,7 @@ describe('', () => { await waitFor(() => { const elements = getAllByRole('tab'); - expect(elements.length).toBe(4); + expect(elements.length).toBe(3); expect(getByText(elements[0], 'Domains')).toBeInTheDocument(); expect(getByText(elements[2], 'Groups')).toBeInTheDocument(); expect(getByText(elements[3], 'Tools')).toBeInTheDocument(); From 66669634ed00bf5ffd8172aecaf8e6f75d40b83a Mon Sep 17 00:00:00 2001 From: sblausten Date: Mon, 20 Mar 2023 13:47:30 +0100 Subject: [PATCH 044/137] Fix test Signed-off-by: sblausten --- .../components/DefaultExplorePage/DefaultExplorePage.test.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx index 153bcdb73b..62d197803f 100644 --- a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx +++ b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx @@ -58,8 +58,8 @@ describe('', () => { const elements = getAllByRole('tab'); expect(elements.length).toBe(3); expect(getByText(elements[0], 'Domains')).toBeInTheDocument(); - expect(getByText(elements[2], 'Groups')).toBeInTheDocument(); - expect(getByText(elements[3], 'Tools')).toBeInTheDocument(); + expect(getByText(elements[1], 'Groups')).toBeInTheDocument(); + expect(getByText(elements[2], 'Tools')).toBeInTheDocument(); }); }); }); From 5f50c92dc3f06b4099be7f5bc7aa48e1469f7a9c Mon Sep 17 00:00:00 2001 From: "antonio.bergas" Date: Mon, 20 Mar 2023 18:06:36 +0100 Subject: [PATCH 045/137] [Playlist]feat: rename new config prop to title and use pluralize to manage nouns Signed-off-by: antonio.bergas --- app-config.yaml | 3 ++ plugins/playlist/CHANGELOG.md | 4 --- plugins/playlist/README.md | 9 ++---- plugins/playlist/config.d.ts | 12 ++------ plugins/playlist/package.json | 28 ++++--------------- .../CreatePlaylistButton.tsx | 8 +++--- .../EntityPlaylistDialog.tsx | 22 +++++++-------- .../PlaylistEditDialog/PlaylistEditDialog.tsx | 8 +++--- .../PlaylistIndexPage/PlaylistIndexPage.tsx | 6 ++-- .../components/PlaylistList/PlaylistList.tsx | 6 ++-- .../PlaylistPage/PlaylistEntitiesTable.tsx | 8 +++--- .../PlaylistPage/PlaylistHeader.tsx | 6 ++-- plugins/playlist/src/hooks/index.ts | 2 +- .../src/hooks/{useConfig.ts => useTitle.ts} | 14 ++++++---- yarn.lock | 1 + 15 files changed, 56 insertions(+), 81 deletions(-) rename plugins/playlist/src/hooks/{useConfig.ts => useTitle.ts} (65%) diff --git a/app-config.yaml b/app-config.yaml index 385c9c2e0e..ba9df18085 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -126,6 +126,9 @@ proxy: organization: name: My Company +playlist: + title: Module + # Reference documentation http://backstage.io/docs/features/techdocs/configuration # Note: After experimenting with basic setup, use CI/CD to generate docs # and an external cloud storage when deploying TechDocs for production use-case. diff --git a/plugins/playlist/CHANGELOG.md b/plugins/playlist/CHANGELOG.md index 648ff6319d..43a7ff4e4d 100644 --- a/plugins/playlist/CHANGELOG.md +++ b/plugins/playlist/CHANGELOG.md @@ -1,9 +1,5 @@ # @backstage/plugin-playlist -## 0.1.8 - -- Added config properties to change dynamically the group noun for all the components in the UI - ## 0.1.7 ### Patch Changes diff --git a/plugins/playlist/README.md b/plugins/playlist/README.md index c85eee8f94..e35f94b9e5 100644 --- a/plugins/playlist/README.md +++ b/plugins/playlist/README.md @@ -131,18 +131,15 @@ const defaultEntityPage = ( Note: the above only shows an example for the `defaultEntityPage` for a full example of this you can look at [this EntityPage](../../packages/app/src/components/catalog/EntityPage.tsx) -## Custom Group Noun +## Custom Title -You can define your custom group noun to shown in all the components of the Playlist plugin in the UI. To do this you just need to add some config in your **app-config.yaml**, here's an example: +You can define a custom title to be shown in all the components of this plugin to replace the default term "playlist" in the UI. To do this you just need to add some config in your **app-config.yaml**, here's an example: ```yaml playlist: - groupPluralNoun: Collections - groupSingularNoun: Collection + title: Collection ``` -_You will always need the plural and the singular matching to have a consistency in the UI_ - ## Features ### View All Playlists diff --git a/plugins/playlist/config.d.ts b/plugins/playlist/config.d.ts index 5f59ffc236..e6245e22a6 100644 --- a/plugins/playlist/config.d.ts +++ b/plugins/playlist/config.d.ts @@ -15,17 +15,11 @@ */ export interface Config { - playlist: { + playlist?: { /** - * (Optional) The plural noun for the entities grouping that will shown in the UI; leave empty for `PLaylists`. + * (Optional) The title that will shown in the UI; leave empty for `PLaylist`. * @visibility frontend */ - groupPluralNoun: string; - - /** - * (Optional) The singular noun for the entities grouping that will shown in the UI; leave empty for `PLaylists`. - * @visibility frontend - */ - groupSingularNoun: string; + title?: string | undefined; }; } diff --git a/plugins/playlist/package.json b/plugins/playlist/package.json index 289236428b..285673a99c 100644 --- a/plugins/playlist/package.json +++ b/plugins/playlist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist", - "version": "0.1.8", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -42,6 +42,7 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "^4.0.0-alpha.57", "lodash": "^4.17.21", + "pluralize": "^8.0.0", "qs": "^6.9.4", "react-hook-form": "^7.13.0", "react-use": "^17.2.4" @@ -65,27 +66,8 @@ "swr": "^2.0.0" }, "files": [ - "dist" + "dist", + "config.d.ts" ], - "configSchema": { - "$schema": "https://backstage.io/schema/config-v1", - "type": "object", - "properties": { - "playlist": { - "type": "object", - "properties": { - "groupPluralNoun": { - "type": "string", - "description": "Frontend plural entities grouping name", - "visibility": "frontend" - }, - "groupSingularNoun": { - "type": "string", - "description": "Frontend singular entities grouping name", - "visibility": "frontend" - } - } - } - } - } + "configSchema": "config.d.ts" } diff --git a/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx b/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx index cc7427c96c..3859b2aa1e 100644 --- a/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx +++ b/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx @@ -29,7 +29,7 @@ import { useNavigate } from 'react-router-dom'; import { playlistApiRef } from '../../api'; import { playlistRouteRef } from '../../routes'; import { PlaylistEditDialog } from '../PlaylistEditDialog'; -import { useGroupNoun } from '../../hooks/useConfig'; +import { useTitle } from '../../hooks'; export const CreatePlaylistButton = () => { const navigate = useNavigate(); @@ -56,7 +56,7 @@ export const CreatePlaylistButton = () => { [errorApi, navigate, playlistApi, playlistRoute], ); - const groupSingularNounLowerCase = useGroupNoun(false, false); + const singularTitle = useTitle(false, false); return ( <> @@ -64,7 +64,7 @@ export const CreatePlaylistButton = () => { setOpenDialog(true)} > @@ -77,7 +77,7 @@ export const CreatePlaylistButton = () => { color="primary" onClick={() => setOpenDialog(true)} > - Create {groupSingularNounLowerCase} + Create {singularTitle} )} { [playlistApi], ); - const groupSingularNoun = useGroupNoun(true, false); - const groupSingularNounLowerCase = useGroupNoun(false, true); - const groupPluralNounLowerCase = useGroupNoun(true, true); + const singularTitle = useTitle(true, false); + const singularTitleLowerCase = useTitle(false, true); + const plurlaTitleLowerCase = useTitle(true, true); useEffect(() => { if (open) { @@ -125,7 +125,7 @@ export const EntityPlaylistDialog = (props: EntityPlaylistDialogProps) => { navigate(playlistRoute({ playlistId })); } catch (e) { alertApi.post({ - message: `Failed to add entity to ${groupSingularNounLowerCase}: ${e}`, + message: `Failed to add entity to ${singularTitleLowerCase}: ${e}`, severity: 'error', }); } @@ -136,7 +136,7 @@ export const EntityPlaylistDialog = (props: EntityPlaylistDialogProps) => { navigate, playlistApi, playlistRoute, - groupSingularNounLowerCase, + singularTitleLowerCase, ], ); @@ -153,12 +153,12 @@ export const EntityPlaylistDialog = (props: EntityPlaylistDialogProps) => { }); } catch (e) { alertApi.post({ - message: `Failed to add entity to ${groupSingularNounLowerCase}: ${e}`, + message: `Failed to add entity to ${singularTitleLowerCase}: ${e}`, severity: 'error', }); } }, - [alertApi, closeDialog, entity, playlistApi, groupSingularNounLowerCase], + [alertApi, closeDialog, entity, playlistApi, singularTitleLowerCase], ); return ( @@ -172,7 +172,7 @@ export const EntityPlaylistDialog = (props: EntityPlaylistDialogProps) => { > {(loading || addEntityLoading) && } - Add to {groupSingularNoun} + Add to {singularTitle} { {error && ( )} @@ -221,7 +221,7 @@ export const EntityPlaylistDialog = (props: EntityPlaylistDialogProps) => { )} diff --git a/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx b/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx index d8f48cbecf..1989f25ae7 100644 --- a/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx +++ b/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx @@ -39,7 +39,7 @@ import React from 'react'; import { useForm, Controller } from 'react-hook-form'; import useAsync from 'react-use/lib/useAsync'; import useAsyncFn from 'react-use/lib/useAsyncFn'; -import { useGroupNoun } from '../../hooks/useConfig'; +import { useTitle } from '../../hooks'; const useStyles = makeStyles({ buttonWrapper: { @@ -106,7 +106,7 @@ export const PlaylistEditDialog = ({ } }; - const groupSingularNounLowercase = useGroupNoun(false, false); + const titleSingularLowerCase = useTitle(false, false); return ( @@ -124,7 +124,7 @@ export const PlaylistEditDialog = ({ fullWidth label="Name" margin="dense" - placeholder={`Give your ${groupSingularNounLowercase} name`} + placeholder={`Give your ${titleSingularLowerCase} name`} required type="text" /> @@ -142,7 +142,7 @@ export const PlaylistEditDialog = ({ label="Description" margin="dense" multiline - placeholder={`Describe your ${groupSingularNounLowercase}`} + placeholder={`Describe your ${titleSingularLowerCase}`} type="text" /> )} diff --git a/plugins/playlist/src/components/PlaylistIndexPage/PlaylistIndexPage.tsx b/plugins/playlist/src/components/PlaylistIndexPage/PlaylistIndexPage.tsx index 6a92718df2..eabce5d0c6 100644 --- a/plugins/playlist/src/components/PlaylistIndexPage/PlaylistIndexPage.tsx +++ b/plugins/playlist/src/components/PlaylistIndexPage/PlaylistIndexPage.tsx @@ -23,7 +23,7 @@ import { } from '@backstage/core-components'; import { CatalogFilterLayout } from '@backstage/plugin-catalog-react'; -import { PlaylistListProvider, useGroupNoun } from '../../hooks'; +import { PlaylistListProvider, useTitle } from '../../hooks'; import { CreatePlaylistButton } from '../CreatePlaylistButton'; import { PersonalListPicker } from '../PersonalListPicker'; import { PlaylistList } from '../PlaylistList'; @@ -32,10 +32,10 @@ import { PlaylistSearchBar } from '../PlaylistSearchBar'; import { PlaylistSortPicker } from '../PlaylistSortPicker'; export const PlaylistIndexPage = () => { - const groupPluralNoun = useGroupNoun(true, false); + const pluralTitle = useTitle(true, false); return ( - + diff --git a/plugins/playlist/src/components/PlaylistList/PlaylistList.tsx b/plugins/playlist/src/components/PlaylistList/PlaylistList.tsx index fd8569e758..6c90914c49 100644 --- a/plugins/playlist/src/components/PlaylistList/PlaylistList.tsx +++ b/plugins/playlist/src/components/PlaylistList/PlaylistList.tsx @@ -23,12 +23,12 @@ import { } from '@backstage/core-components'; import { Typography } from '@material-ui/core'; -import { useGroupNoun, usePlaylistList } from '../../hooks'; +import { useTitle, usePlaylistList } from '../../hooks'; import { PlaylistCard } from '../PlaylistCard'; export const PlaylistList = () => { const { loading, error, playlists } = usePlaylistList(); - const groupPluralNounLowercase = useGroupNoun(true, true); + const pluralTitleLowerCase = useTitle(true, true); return ( <> @@ -36,7 +36,7 @@ export const PlaylistList = () => { {error && ( {error.message} diff --git a/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.tsx b/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.tsx index 3f9e10c4c8..69a6beadb2 100644 --- a/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.tsx +++ b/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.tsx @@ -32,7 +32,7 @@ import React, { forwardRef, useCallback, useEffect, useState } from 'react'; import useAsyncFn from 'react-use/lib/useAsyncFn'; import { playlistApiRef } from '../../api'; -import { useGroupNoun } from '../../hooks/useConfig'; +import { useTitle } from '../../hooks'; import { AddEntitiesDrawer } from './AddEntitiesDrawer'; export const PlaylistEntitiesTable = ({ @@ -85,18 +85,18 @@ export const PlaylistEntitiesTable = ({ [errorApi, loadEntities, playlistApi, playlistId], ); - const groupSingularNounLowerCase = useGroupNoun(false, true); + const singularTitleLowerCase = useTitle(false, true); const actions = editAllowed ? [ { icon: DeleteIcon, - tooltip: `Remove from ${groupSingularNounLowerCase}`, + tooltip: `Remove from ${singularTitleLowerCase}`, onClick: removeEntity, }, { icon: AddBoxIcon, - tooltip: `Add entities to ${groupSingularNounLowerCase}`, + tooltip: `Add entities to ${singularTitleLowerCase}`, isFreeAction: true, onClick: () => setOpenAddEntitiesDrawer(true), }, diff --git a/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx b/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx index ecf443b565..8ead799db2 100644 --- a/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx +++ b/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx @@ -45,7 +45,7 @@ import useAsyncFn from 'react-use/lib/useAsyncFn'; import { playlistApiRef } from '../../api'; import { rootRouteRef } from '../../routes'; import { PlaylistEditDialog } from '../PlaylistEditDialog'; -import { useGroupNoun } from '../../hooks/useConfig'; +import { useTitle } from '../../hooks'; const useStyles = makeStyles({ buttonWrapper: { @@ -110,7 +110,7 @@ export const PlaylistHeader = ({ playlist, onUpdate }: PlaylistHeaderProps) => { } }, [playlistApi]); - const groupSingularNoun = useGroupNoun(false, false); + const singularTitle = useTitle(false, false); return (
{ onClick: () => setOpenEditDialog(true), }, { - label: `Delete ${groupSingularNoun}`, + label: `Delete ${singularTitle}`, icon: , disabled: !deleteAllowed, onClick: () => setOpenDeleteDialog(true), diff --git a/plugins/playlist/src/hooks/index.ts b/plugins/playlist/src/hooks/index.ts index da045fbf65..bb164d961c 100644 --- a/plugins/playlist/src/hooks/index.ts +++ b/plugins/playlist/src/hooks/index.ts @@ -15,4 +15,4 @@ */ export * from './usePlaylistList'; -export * from './useConfig'; +export * from './useTitle'; diff --git a/plugins/playlist/src/hooks/useConfig.ts b/plugins/playlist/src/hooks/useTitle.ts similarity index 65% rename from plugins/playlist/src/hooks/useConfig.ts rename to plugins/playlist/src/hooks/useTitle.ts index 15d44570a8..ade68d03e8 100644 --- a/plugins/playlist/src/hooks/useConfig.ts +++ b/plugins/playlist/src/hooks/useTitle.ts @@ -15,13 +15,15 @@ */ import { configApiRef, useApi } from '@backstage/core-plugin-api'; +import pluralize from 'pluralize'; -export function useGroupNoun(inPlural: boolean, inLowerCase: boolean) { +export function useTitle(inPlural: boolean, inLowerCase: boolean) { const configApi = useApi(configApiRef); - const defaultNoun = inPlural ? 'Playlists' : 'Playlist'; - const configProp = inPlural ? 'groupPluralNoun' : 'groupSingularNoun'; - const groupNoun = - configApi.getOptionalString(`playlist.${configProp}`) ?? `${defaultNoun}`; + let title = configApi.getOptionalString('playlist.title') ?? 'Playlist'; - return inLowerCase ? groupNoun.toLocaleLowerCase('en-US') : groupNoun; + if (inPlural) { + title = pluralize(title); + } + + return inLowerCase ? title.toLocaleLowerCase('en-US') : title; } diff --git a/yarn.lock b/yarn.lock index 3cf7b49696..2687870b8f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7380,6 +7380,7 @@ __metadata: cross-fetch: ^3.1.5 lodash: ^4.17.21 msw: ^1.0.0 + pluralize: ^8.0.0 qs: ^6.9.4 react-hook-form: ^7.13.0 react-use: ^17.2.4 From 39973bcd50476f0ce31904de34c3155ca25cd863 Mon Sep 17 00:00:00 2001 From: "antonio.bergas" Date: Mon, 20 Mar 2023 18:22:30 +0100 Subject: [PATCH 046/137] [Playlist]feat: removed unneccessary playlist config Signed-off-by: antonio.bergas --- app-config.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/app-config.yaml b/app-config.yaml index ba9df18085..385c9c2e0e 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -126,9 +126,6 @@ proxy: organization: name: My Company -playlist: - title: Module - # Reference documentation http://backstage.io/docs/features/techdocs/configuration # Note: After experimenting with basic setup, use CI/CD to generate docs # and an external cloud storage when deploying TechDocs for production use-case. From d48fdc7396d2f8c1e61d32d7060dbb76dccbcbc8 Mon Sep 17 00:00:00 2001 From: "antonio.bergas" Date: Mon, 20 Mar 2023 19:35:36 +0100 Subject: [PATCH 047/137] [Playlist]feat: fixed wrong copyright Signed-off-by: antonio.bergas --- plugins/playlist/config.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/playlist/config.d.ts b/plugins/playlist/config.d.ts index e6245e22a6..5b9ff8aad8 100644 --- a/plugins/playlist/config.d.ts +++ b/plugins/playlist/config.d.ts @@ -1,5 +1,5 @@ /* - * Copyright 2020 The Backstage Authors + * Copyright 2023 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. From 904b7ffd5e044d2f5a9aabb70576c028bc594f9e Mon Sep 17 00:00:00 2001 From: Antonio Bergas Date: Mon, 20 Mar 2023 20:19:22 +0100 Subject: [PATCH 048/137] Update plugins/playlist/config.d.ts Improve description in config interface Co-authored-by: Phil Kuang Signed-off-by: Antonio Bergas --- plugins/playlist/config.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/playlist/config.d.ts b/plugins/playlist/config.d.ts index 5b9ff8aad8..d949cfe73a 100644 --- a/plugins/playlist/config.d.ts +++ b/plugins/playlist/config.d.ts @@ -17,7 +17,7 @@ export interface Config { playlist?: { /** - * (Optional) The title that will shown in the UI; leave empty for `PLaylist`. + * (Optional) The title that will shown in the UI; Defaults to`Playlist` if undefined. * @visibility frontend */ title?: string | undefined; From d08f00fd777d4227c83f97db64d6e10ba96c0a7b Mon Sep 17 00:00:00 2001 From: "antonio.bergas" Date: Mon, 20 Mar 2023 20:45:11 +0100 Subject: [PATCH 049/137] [Playlist]feat: improve useTitle hook and fixing tests Signed-off-by: antonio.bergas --- .../CreatePlaylistButton.tsx | 5 +- .../EntityPlaylistDialog.tsx | 17 ++++- .../PlaylistEditDialog/PlaylistEditDialog.tsx | 7 +- .../PlaylistIndexPage/PlaylistIndexPage.tsx | 5 +- .../PlaylistList/PlaylistList.test.tsx | 76 +++++++++++-------- .../components/PlaylistList/PlaylistList.tsx | 5 +- .../PlaylistPage/PlaylistEntitiesTable.tsx | 5 +- .../PlaylistPage/PlaylistHeader.tsx | 5 +- plugins/playlist/src/hooks/useTitle.ts | 13 +++- 9 files changed, 91 insertions(+), 47 deletions(-) diff --git a/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx b/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx index 3859b2aa1e..7669a48c26 100644 --- a/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx +++ b/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx @@ -56,7 +56,10 @@ export const CreatePlaylistButton = () => { [errorApi, navigate, playlistApi, playlistRoute], ); - const singularTitle = useTitle(false, false); + const singularTitle = useTitle({ + pluralize: false, + lowerCase: false, + }); return ( <> diff --git a/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.tsx b/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.tsx index 711858577a..150ca6bc56 100644 --- a/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.tsx +++ b/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.tsx @@ -105,9 +105,18 @@ export const EntityPlaylistDialog = (props: EntityPlaylistDialogProps) => { [playlistApi], ); - const singularTitle = useTitle(true, false); - const singularTitleLowerCase = useTitle(false, true); - const plurlaTitleLowerCase = useTitle(true, true); + const singularTitle = useTitle({ + pluralize: true, + lowerCase: false, + }); + const singularTitleLowerCase = useTitle({ + pluralize: false, + lowerCase: true, + }); + const pluralTitleLowerCase = useTitle({ + pluralize: true, + lowerCase: true, + }); useEffect(() => { if (open) { @@ -204,7 +213,7 @@ export const EntityPlaylistDialog = (props: EntityPlaylistDialogProps) => { {error && ( )} diff --git a/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx b/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx index 1989f25ae7..a213c7c51c 100644 --- a/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx +++ b/plugins/playlist/src/components/PlaylistEditDialog/PlaylistEditDialog.tsx @@ -106,7 +106,10 @@ export const PlaylistEditDialog = ({ } }; - const titleSingularLowerCase = useTitle(false, false); + const titleSingularLowerCase = useTitle({ + pluralize: false, + lowerCase: false, + }); return ( @@ -124,7 +127,7 @@ export const PlaylistEditDialog = ({ fullWidth label="Name" margin="dense" - placeholder={`Give your ${titleSingularLowerCase} name`} + placeholder={`Give your ${titleSingularLowerCase} a name`} required type="text" /> diff --git a/plugins/playlist/src/components/PlaylistIndexPage/PlaylistIndexPage.tsx b/plugins/playlist/src/components/PlaylistIndexPage/PlaylistIndexPage.tsx index eabce5d0c6..f25df19ee7 100644 --- a/plugins/playlist/src/components/PlaylistIndexPage/PlaylistIndexPage.tsx +++ b/plugins/playlist/src/components/PlaylistIndexPage/PlaylistIndexPage.tsx @@ -32,7 +32,10 @@ import { PlaylistSearchBar } from '../PlaylistSearchBar'; import { PlaylistSortPicker } from '../PlaylistSortPicker'; export const PlaylistIndexPage = () => { - const pluralTitle = useTitle(true, false); + const pluralTitle = useTitle({ + pluralize: true, + lowerCase: false, + }); return ( diff --git a/plugins/playlist/src/components/PlaylistList/PlaylistList.test.tsx b/plugins/playlist/src/components/PlaylistList/PlaylistList.test.tsx index 27030ec1c7..976db99983 100644 --- a/plugins/playlist/src/components/PlaylistList/PlaylistList.test.tsx +++ b/plugins/playlist/src/components/PlaylistList/PlaylistList.test.tsx @@ -14,13 +14,19 @@ * limitations under the License. */ +import { ConfigApi, configApiRef } from '@backstage/core-plugin-api'; import { Playlist } from '@backstage/plugin-playlist-common'; +import { TestApiProvider } from '@backstage/test-utils'; import { render } from '@testing-library/react'; import React from 'react'; import { MockPlaylistListProvider } from '../../testUtils'; import { PlaylistList } from './PlaylistList'; +const mockConfigApi = { + getOptionalString: () => undefined, +} as Partial; + jest.mock('../PlaylistCard', () => ({ PlaylistCard: ({ playlist }: { playlist: Playlist }) => (
{playlist.name}
@@ -30,9 +36,11 @@ jest.mock('../PlaylistCard', () => ({ describe('', () => { it('renders error on error', () => { const rendered = render( - - - , + + + + + , ); expect(rendered.getByText('Test Error')).toBeInTheDocument(); @@ -40,9 +48,11 @@ describe('', () => { it('handles no playlists', () => { const rendered = render( - - - , + + + + + , ); expect( @@ -52,32 +62,34 @@ describe('', () => { it('renders playlists', () => { const rendered = render( - - - , + + + + + , ); expect(rendered.getByText('playlist-1')).toBeInTheDocument(); diff --git a/plugins/playlist/src/components/PlaylistList/PlaylistList.tsx b/plugins/playlist/src/components/PlaylistList/PlaylistList.tsx index 6c90914c49..2f815f07c6 100644 --- a/plugins/playlist/src/components/PlaylistList/PlaylistList.tsx +++ b/plugins/playlist/src/components/PlaylistList/PlaylistList.tsx @@ -28,7 +28,10 @@ import { PlaylistCard } from '../PlaylistCard'; export const PlaylistList = () => { const { loading, error, playlists } = usePlaylistList(); - const pluralTitleLowerCase = useTitle(true, true); + const pluralTitleLowerCase = useTitle({ + pluralize: true, + lowerCase: true, + }); return ( <> diff --git a/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.tsx b/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.tsx index 69a6beadb2..3d8efe3bc5 100644 --- a/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.tsx +++ b/plugins/playlist/src/components/PlaylistPage/PlaylistEntitiesTable.tsx @@ -85,7 +85,10 @@ export const PlaylistEntitiesTable = ({ [errorApi, loadEntities, playlistApi, playlistId], ); - const singularTitleLowerCase = useTitle(false, true); + const singularTitleLowerCase = useTitle({ + pluralize: false, + lowerCase: true, + }); const actions = editAllowed ? [ diff --git a/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx b/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx index 8ead799db2..621f94f75c 100644 --- a/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx +++ b/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx @@ -110,7 +110,10 @@ export const PlaylistHeader = ({ playlist, onUpdate }: PlaylistHeaderProps) => { } }, [playlistApi]); - const singularTitle = useTitle(false, false); + const singularTitle = useTitle({ + pluralize: false, + lowerCase: false, + }); return (
Date: Thu, 23 Mar 2023 15:02:07 +0100 Subject: [PATCH 050/137] OWNERS: add Helm Charts Signed-off-by: Patrik Oldsberg --- OWNERS.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/OWNERS.md b/OWNERS.md index 368620cf42..ffbecbab1b 100644 --- a/OWNERS.md +++ b/OWNERS.md @@ -38,6 +38,18 @@ Scope: Discoverability within Backstage, including the home page, information ar | Raghunandan Balachandran | Spotify | BUX | [soapraj](http://github.com/soapraj) | raghunandanb#1114 | | Renan Mendes Carvalho | Spotify | BUX | [aitherios](http://github.com/aitherios) | aitherios#0593 | +### Helm Charts + +Team: @backstage/helm-chart-maintainers + +Scope: The Backstage [Helm Chart(s)](https://github.com/backstage/charts). + +| Name | Organization | Team | GitHub | Discord | +| -------------------- | ------------ | ---- | ---------------------------------------- | -------------- | +| Andrew Block | Red Hat | | [sabre1041](http://github.com/sabre1041) | sabre1041#2622 | +| Tom Coufal | Red Hat | | [tumido](http://github.com/tumido) | Tumi#4346 | +| Vincenzo Scamporlino | Spotify | | [vinzscam](http://github.com/vinzscam) | vinzscam#6944 | + ### Kubernetes Team: @backstage/kubernetes-maintainers From 77aa3a4d47ee8c3e4d272b51ca8442a7689c9c45 Mon Sep 17 00:00:00 2001 From: Andy Ladjadj Date: Fri, 17 Feb 2023 16:43:12 +0100 Subject: [PATCH 051/137] fix(plugins/adr): use path attribute to fetch file instead of name Signed-off-by: Andy Ladjadj --- .changeset/odd-plums-bake.md | 5 ++++ .../EntityAdrContent/EntityAdrContent.tsx | 27 +++++++++---------- 2 files changed, 17 insertions(+), 15 deletions(-) create mode 100644 .changeset/odd-plums-bake.md diff --git a/.changeset/odd-plums-bake.md b/.changeset/odd-plums-bake.md new file mode 100644 index 0000000000..f06bf4d61d --- /dev/null +++ b/.changeset/odd-plums-bake.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-adr': patch +--- + +use path attribute to fetch files instead of name diff --git a/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx b/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx index eb5b4aed21..58183b5230 100644 --- a/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx +++ b/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx @@ -47,7 +47,7 @@ import { import { rootRouteRef } from '../../routes'; import { AdrContentDecorator, AdrReader } from '../AdrReader'; -import { adrApiRef } from '../../api'; +import { adrApiRef, AdrFileInfo } from '../../api'; import useAsync from 'react-use/lib/useAsync'; const useStyles = makeStyles((theme: Theme) => ({ @@ -68,9 +68,7 @@ export const EntityAdrContent = (props: { const classes = useStyles(); const { entity } = useEntity(); const rootLink = useRouteRef(rootRouteRef); - const [adrList, setAdrList] = useState< - { name: string; title?: string; status?: string; date?: string }[] - >([]); + const [adrList, setAdrList] = useState([]); const [searchParams, setSearchParams] = useSearchParams(); const scmIntegrations = useApi(scmIntegrationsApiRef); const adrApi = useApi(adrApiRef); @@ -82,7 +80,8 @@ export const EntityAdrContent = (props: { }, [entity, scmIntegrations]); const selectedAdr = - adrList.find(adr => adr.name === searchParams.get('record'))?.name ?? ''; + adrList.find(adr => adr.name === searchParams.get('record'))?.path ?? ''; + useEffect(() => { if (adrList.length && !selectedAdr) { searchParams.set('record', adrList[0].name); @@ -95,15 +94,13 @@ export const EntityAdrContent = (props: { return; } - const adrs = value.data - .filter( - (item: { type: string; name: string }) => - item.type === 'file' && - (filePathFilterFn - ? filePathFilterFn(item.name) - : madrFilePathFilter(item.name)), - ) - .map(({ name, title, status, date }) => ({ name, title, status, date })); + const adrs: AdrFileInfo[] = value.data.filter( + (item: AdrFileInfo) => + item.type === 'file' && + (filePathFilterFn + ? filePathFilterFn(item.name) + : madrFilePathFilter(item.name)), + ); setAdrList(adrs); }, [filePathFilterFn, value]); @@ -148,7 +145,7 @@ export const EntityAdrContent = (props: { button component={Link} to={`${rootLink()}?record=${adr.name}`} - selected={selectedAdr === adr.name} + selected={selectedAdr === adr.path} > Date: Tue, 14 Mar 2023 17:54:20 +0100 Subject: [PATCH 052/137] feat(plugins/adr): render subdirectories in list Signed-off-by: Andy Ladjadj --- plugins/adr/package.json | 1 + .../EntityAdrContent/EntityAdrContent.tsx | 155 +++++++++++++----- yarn.lock | 1 + 3 files changed, 118 insertions(+), 39 deletions(-) diff --git a/plugins/adr/package.json b/plugins/adr/package.json index 453ff62792..55bcc21d62 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -34,6 +34,7 @@ "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", + "lodash": "^4.17.21", "react-markdown": "^8.0.0", "react-use": "^17.2.4", "remark-gfm": "^3.0.1" diff --git a/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx b/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx index 58183b5230..846678f718 100644 --- a/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx +++ b/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx @@ -16,9 +16,14 @@ import React, { useEffect, useState } from 'react'; import { Link, useSearchParams } from 'react-router-dom'; +import useAsync from 'react-use/lib/useAsync'; + +import groupBy from 'lodash/groupBy'; + import { Content, ContentHeader, + InfoCard, MissingAnnotationEmptyState, Progress, SupportButton, @@ -35,27 +40,118 @@ import { } from '@backstage/plugin-adr-common'; import { useEntity } from '@backstage/plugin-catalog-react'; import { + Box, Chip, + Collapse, Grid, List, ListItem, + ListItemIcon, ListItemText, makeStyles, Theme, Typography, } from '@material-ui/core'; +import ExpandLess from '@material-ui/icons/ExpandLess'; +import ExpandMore from '@material-ui/icons/ExpandMore'; +import FolderIcon from '@material-ui/icons/Folder'; +import { adrApiRef, AdrFileInfo } from '../../api'; import { rootRouteRef } from '../../routes'; import { AdrContentDecorator, AdrReader } from '../AdrReader'; -import { adrApiRef, AdrFileInfo } from '../../api'; -import useAsync from 'react-use/lib/useAsync'; const useStyles = makeStyles((theme: Theme) => ({ adrMenu: { backgroundColor: theme.palette.background.paper, }, + adrContainerTitle: { + color: theme.palette.grey[700], + marginBottom: theme.spacing(1), + }, + adrChip: { + position: 'absolute', + right: 0, + }, })); +const AdrListContainer = (props: { + adrs: AdrFileInfo[]; + selectedAdr: string; + title: string; +}) => { + const { adrs, selectedAdr, title } = props; + const classes = useStyles(); + const rootLink = useRouteRef(rootRouteRef); + const [open, setOpen] = React.useState(true); + + const getChipColor = (status: string) => { + switch (status) { + case 'accepted': + return 'primary'; + case 'rejected' || 'deprecated': + return 'secondary'; + default: + return 'default'; + } + }; + + const handleClick = () => { + setOpen(!open); + }; + + return ( + <> + {title && ( + + + + + + {open ? : } + + )} + + + {adrs.map((adr, idx) => ( + + + {adr.date} + {adr.status && ( + + )} + + } + /> + + ))} + + + + ); +}; + /** * Component for browsing ADRs on an entity page. * @public @@ -67,7 +163,6 @@ export const EntityAdrContent = (props: { const { contentDecorators, filePathFilterFn } = props; const classes = useStyles(); const { entity } = useEntity(); - const rootLink = useRouteRef(rootRouteRef); const [adrList, setAdrList] = useState([]); const [searchParams, setSearchParams] = useSearchParams(); const scmIntegrations = useApi(scmIntegrationsApiRef); @@ -82,6 +177,10 @@ export const EntityAdrContent = (props: { const selectedAdr = adrList.find(adr => adr.name === searchParams.get('record'))?.path ?? ''; + const adrSubDirectoryFunc = (adr: AdrFileInfo) => { + return adr.path.split('/').slice(0, -1).join('/'); + }; + useEffect(() => { if (adrList.length && !selectedAdr) { searchParams.set('record', adrList[0].name); @@ -105,16 +204,9 @@ export const EntityAdrContent = (props: { setAdrList(adrs); }, [filePathFilterFn, value]); - const getChipColor = (status: string) => { - switch (status) { - case 'accepted': - return 'primary'; - case 'rejected' || 'deprecated': - return 'secondary'; - default: - return 'default'; - } - }; + const adrListGrouped = Object.entries( + groupBy(adrList, adrSubDirectoryFunc), + ).sort(); return ( @@ -138,33 +230,18 @@ export const EntityAdrContent = (props: { (adrList.length ? ( - - {adrList.map((adr, idx) => ( - - + + {adrListGrouped.map(([title, adrs], idx) => ( + - {adr.status && ( - - )} - - ))} - + ))} + + diff --git a/yarn.lock b/yarn.lock index 3f5fbf684b..0c16c829a6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4316,6 +4316,7 @@ __metadata: "@types/git-url-parse": ^9.0.0 "@types/node": "*" cross-fetch: ^3.1.5 + lodash: ^4.17.21 msw: ^1.0.0 react-markdown: ^8.0.0 react-use: ^17.2.4 From 668b5733b15715fdfc030d501be7a5f4d9b56655 Mon Sep 17 00:00:00 2001 From: Andy Ladjadj Date: Wed, 15 Mar 2023 09:46:09 +0100 Subject: [PATCH 053/137] fix(plugins/adr): replace url record by the path Signed-off-by: Andy Ladjadj --- plugins/adr-common/src/index.ts | 2 +- .../components/EntityAdrContent/EntityAdrContent.tsx | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/adr-common/src/index.ts b/plugins/adr-common/src/index.ts index c3a048d9d1..25b61d5aa4 100644 --- a/plugins/adr-common/src/index.ts +++ b/plugins/adr-common/src/index.ts @@ -77,7 +77,7 @@ export type AdrFilePathFilterFn = (path: string) => boolean; * @public */ export const madrFilePathFilter: AdrFilePathFilterFn = (path: string) => - /^\d{4}-.+\.md$/.test(path); + /^(?>.+\/)?\d{4}-.+\.md$/.test(path); /** * ADR indexable document interface diff --git a/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx b/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx index 846678f718..1567306f12 100644 --- a/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx +++ b/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx @@ -122,7 +122,7 @@ const AdrListContainer = (props: { component={Link} key={idx} selected={selectedAdr === adr.path} - to={`${rootLink()}?record=${adr.name}`} + to={`${rootLink()}?record=${adr.path}`} > adr.name === searchParams.get('record'))?.path ?? ''; + adrList.find(adr => adr.path === searchParams.get('record'))?.path ?? ''; const adrSubDirectoryFunc = (adr: AdrFileInfo) => { return adr.path.split('/').slice(0, -1).join('/'); @@ -183,7 +183,7 @@ export const EntityAdrContent = (props: { useEffect(() => { if (adrList.length && !selectedAdr) { - searchParams.set('record', adrList[0].name); + searchParams.set('record', adrList[0].path); setSearchParams(searchParams, { replace: true }); } }); @@ -197,8 +197,8 @@ export const EntityAdrContent = (props: { (item: AdrFileInfo) => item.type === 'file' && (filePathFilterFn - ? filePathFilterFn(item.name) - : madrFilePathFilter(item.name)), + ? filePathFilterFn(item.path) + : madrFilePathFilter(item.path)), ); setAdrList(adrs); From b012dcefba7cf17ca3b9d290d856f6f1644a9741 Mon Sep 17 00:00:00 2001 From: Andy Ladjadj Date: Wed, 15 Mar 2023 10:05:09 +0100 Subject: [PATCH 054/137] ci: update changeset Signed-off-by: Andy Ladjadj --- .changeset/odd-plums-bake.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/odd-plums-bake.md b/.changeset/odd-plums-bake.md index f06bf4d61d..d2d66e67e2 100644 --- a/.changeset/odd-plums-bake.md +++ b/.changeset/odd-plums-bake.md @@ -2,4 +2,4 @@ '@backstage/plugin-adr': patch --- -use path attribute to fetch files instead of name +use path attribute to fetch files instead of name and update the UI to navigate over subdirectories From 059e14136cdb1b004eb0f3ce69276ff1a3fd7fac Mon Sep 17 00:00:00 2001 From: Andy Ladjadj Date: Wed, 15 Mar 2023 11:03:46 +0100 Subject: [PATCH 055/137] fix(plugins/adr): use javascript regex compliant Signed-off-by: Andy Ladjadj --- plugins/adr-common/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/adr-common/src/index.ts b/plugins/adr-common/src/index.ts index 25b61d5aa4..ffdd9b349a 100644 --- a/plugins/adr-common/src/index.ts +++ b/plugins/adr-common/src/index.ts @@ -77,7 +77,7 @@ export type AdrFilePathFilterFn = (path: string) => boolean; * @public */ export const madrFilePathFilter: AdrFilePathFilterFn = (path: string) => - /^(?>.+\/)?\d{4}-.+\.md$/.test(path); + /^(?:.+\/)?\d{4}-.+\.md$/.test(path); /** * ADR indexable document interface From d07e48212018e2dbd959b0b3136dc6249bddac6d Mon Sep 17 00:00:00 2001 From: Andy Ladjadj Date: Fri, 24 Mar 2023 13:42:11 +0100 Subject: [PATCH 056/137] ci: update changeset to include plugin-adr-common Signed-off-by: Andy Ladjadj --- .changeset/odd-plums-bake.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.changeset/odd-plums-bake.md b/.changeset/odd-plums-bake.md index d2d66e67e2..427ab776b5 100644 --- a/.changeset/odd-plums-bake.md +++ b/.changeset/odd-plums-bake.md @@ -1,4 +1,5 @@ --- +'@backstage/plugin-adr-common': patch '@backstage/plugin-adr': patch --- From 0701dfc4b46abfe15e7ef078a069c7407dfc1ffb Mon Sep 17 00:00:00 2001 From: Andy Ladjadj Date: Fri, 24 Mar 2023 13:42:56 +0100 Subject: [PATCH 057/137] fix: update regex to keep retro compatibility Signed-off-by: Andy Ladjadj --- plugins/adr-common/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/adr-common/src/index.ts b/plugins/adr-common/src/index.ts index ffdd9b349a..cf71367cba 100644 --- a/plugins/adr-common/src/index.ts +++ b/plugins/adr-common/src/index.ts @@ -77,7 +77,7 @@ export type AdrFilePathFilterFn = (path: string) => boolean; * @public */ export const madrFilePathFilter: AdrFilePathFilterFn = (path: string) => - /^(?:.+\/)?\d{4}-.+\.md$/.test(path); + /^(?:.*\/)?\d{4}-.+\.md$/.test(path); /** * ADR indexable document interface From cf18c32934afa755138459aefd9ee9b18149c271 Mon Sep 17 00:00:00 2001 From: Katharina Sick Date: Fri, 24 Mar 2023 14:14:17 +0100 Subject: [PATCH 058/137] feat: show details for nested objects and arrays in the Installed Actions page Signed-off-by: Katharina Sick --- .changeset/tender-parrots-fry.md | 5 + .../ActionsPage/ActionsPage.test.tsx | 300 +++++++++++++++++- .../components/ActionsPage/ActionsPage.tsx | 188 +++++++---- 3 files changed, 436 insertions(+), 57 deletions(-) create mode 100644 .changeset/tender-parrots-fry.md diff --git a/.changeset/tender-parrots-fry.md b/.changeset/tender-parrots-fry.md new file mode 100644 index 0000000000..847bd18761 --- /dev/null +++ b/.changeset/tender-parrots-fry.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': minor +--- + +The Installed Actions page now shows details for nested objects and arrays diff --git a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.test.tsx b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.test.tsx index 90f6f9b393..a402e078a8 100644 --- a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.test.tsx +++ b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.test.tsx @@ -16,8 +16,8 @@ import React from 'react'; import { ActionsPage } from './ActionsPage'; import { - scaffolderApiRef, ScaffolderApi, + scaffolderApiRef, } from '@backstage/plugin-scaffolder-react'; import { renderInTestApp, TestApiRegistry } from '@backstage/test-utils'; import { ApiProvider } from '@backstage/core-app-api'; @@ -118,7 +118,7 @@ describe('TemplatePage', () => { expect(rendered.getByText('Test output')).toBeInTheDocument(); }); - it('renders action with multipel input types', async () => { + it('renders action with multiple input types', async () => { scaffolderApiMock.listActions.mockResolvedValue([ { id: 'test', @@ -211,4 +211,300 @@ describe('TemplatePage', () => { expect(rendered.getByText('Bar title')).toBeInTheDocument(); expect(rendered.getByText('Bar description')).toBeInTheDocument(); }); + + it('renders action with object input type', async () => { + scaffolderApiMock.listActions.mockResolvedValue([ + { + id: 'test', + description: 'example description', + schema: { + input: { + type: 'object', + required: ['foobar'], + properties: { + foobar: { + title: 'Test object', + type: ['object'], + properties: { + a: { + title: 'nested prop a', + type: 'string', + }, + b: { + title: 'nested prop b', + type: 'number', + }, + }, + }, + }, + }, + }, + }, + ]); + const rendered = await renderInTestApp( + + + , + { + mountedRoutes: { + '/create/actions': rootRouteRef, + }, + }, + ); + + expect(rendered.getByText('Test object')).toBeInTheDocument(); + const objectChip = rendered.getByText('object'); + expect(objectChip).toBeInTheDocument(); + + expect(rendered.queryByText('nested prop a')).not.toBeInTheDocument(); + expect(rendered.queryByText('string')).not.toBeInTheDocument(); + expect(rendered.queryByText('nested prop b')).not.toBeInTheDocument(); + expect(rendered.queryByText('number')).not.toBeInTheDocument(); + + objectChip.click(); + + expect(rendered.queryByText('nested prop a')).toBeInTheDocument(); + expect(rendered.queryByText('string')).toBeInTheDocument(); + expect(rendered.queryByText('nested prop b')).toBeInTheDocument(); + expect(rendered.queryByText('number')).toBeInTheDocument(); + }); + + it('renders action with nested object input type', async () => { + scaffolderApiMock.listActions.mockResolvedValue([ + { + id: 'test', + description: 'example description', + schema: { + input: { + type: 'object', + required: ['foobar'], + properties: { + foobar: { + title: 'Test object', + type: 'object', + properties: { + a: { + title: 'nested object a', + type: 'object', + properties: { + c: { + title: 'nested object c', + type: 'object', + }, + }, + }, + b: { + title: 'nested prop b', + type: 'number', + }, + }, + }, + }, + }, + }, + }, + ]); + const rendered = await renderInTestApp( + + + , + { + mountedRoutes: { + '/create/actions': rootRouteRef, + }, + }, + ); + + expect(rendered.getByText('Test object')).toBeInTheDocument(); + const objectChip = rendered.getByText('object'); + expect(objectChip).toBeInTheDocument(); + + expect(rendered.queryByText('nested object a')).not.toBeInTheDocument(); + expect(rendered.queryByText('nested prop b')).not.toBeInTheDocument(); + expect(rendered.queryByText('nested object c')).not.toBeInTheDocument(); + + objectChip.click(); + + expect(rendered.queryByText('nested object a')).toBeInTheDocument(); + expect(rendered.queryByText('nested prop b')).toBeInTheDocument(); + expect(rendered.queryByText('nested object c')).not.toBeInTheDocument(); + + const allObjectChips = rendered.getAllByText('object'); + expect(allObjectChips.length).toBe(2); + allObjectChips[1].click(); + + expect(rendered.queryByText('nested object a')).toBeInTheDocument(); + expect(rendered.queryByText('nested prop b')).toBeInTheDocument(); + expect(rendered.queryByText('nested object c')).toBeInTheDocument(); + }); + + it('renders action with object input type and no properties', async () => { + scaffolderApiMock.listActions.mockResolvedValue([ + { + id: 'test', + description: 'example description', + schema: { + input: { + type: 'object', + required: ['foobar'], + properties: { + foobar: { + title: 'Test object', + type: ['object'], + }, + }, + }, + }, + }, + ]); + const rendered = await renderInTestApp( + + + , + { + mountedRoutes: { + '/create/actions': rootRouteRef, + }, + }, + ); + + expect(rendered.getByText('Test object')).toBeInTheDocument(); + const objectChip = rendered.getByText('object'); + expect(objectChip).toBeInTheDocument(); + + expect(rendered.queryByText('No schema defined')).not.toBeInTheDocument(); + + objectChip.click(); + + expect(rendered.queryByText('No schema defined')).toBeInTheDocument(); + }); + + it('renders action with array(string) input type', async () => { + scaffolderApiMock.listActions.mockResolvedValue([ + { + id: 'test', + description: 'example description', + schema: { + input: { + type: 'object', + properties: { + foobar: { + title: 'Test array', + type: 'array', + items: { + type: 'string', + }, + }, + }, + }, + }, + }, + ]); + const rendered = await renderInTestApp( + + + , + { + mountedRoutes: { + '/create/actions': rootRouteRef, + }, + }, + ); + + expect(rendered.getByText('Test array')).toBeInTheDocument(); + expect(rendered.getByText('array(string)')).toBeInTheDocument(); + }); + + it('renders action with array(object) input type', async () => { + scaffolderApiMock.listActions.mockResolvedValue([ + { + id: 'test', + description: 'example description', + schema: { + input: { + type: 'object', + properties: { + foobar: { + title: 'Test array', + type: 'array', + items: { + title: 'nested object', + type: 'object', + properties: { + a: { + title: 'nested object a', + type: 'object', + properties: { + c: { + title: 'nested object c', + type: 'object', + }, + }, + }, + b: { + title: 'nested prop b', + type: 'number', + }, + }, + }, + }, + }, + }, + }, + }, + ]); + const rendered = await renderInTestApp( + + + , + { + mountedRoutes: { + '/create/actions': rootRouteRef, + }, + }, + ); + + expect(rendered.getByText('Test array')).toBeInTheDocument(); + const objectChip = rendered.getByText('array(object)'); + expect(objectChip).toBeInTheDocument(); + + expect(rendered.queryByText('nested object a')).not.toBeInTheDocument(); + expect(rendered.queryByText('nested prop b')).not.toBeInTheDocument(); + + objectChip.click(); + + expect(rendered.queryByText('nested object a')).toBeInTheDocument(); + expect(rendered.queryByText('nested prop b')).toBeInTheDocument(); + }); + + it('renders action with array input type and no items', async () => { + scaffolderApiMock.listActions.mockResolvedValue([ + { + id: 'test', + description: 'example description', + schema: { + input: { + type: 'object', + properties: { + foo: { + type: 'array', + }, + }, + }, + }, + }, + ]); + const rendered = await renderInTestApp( + + + , + { + mountedRoutes: { + '/create/actions': rootRouteRef, + }, + }, + ); + + expect(rendered.getByText('array(unknown)')).toBeInTheDocument(); + }); }); diff --git a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx index 10a272b3cf..3f21b75322 100644 --- a/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx +++ b/plugins/scaffolder/src/components/ActionsPage/ActionsPage.tsx @@ -13,43 +13,45 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import React, { Fragment } from 'react'; +import React, { Fragment, useState } from 'react'; import useAsync from 'react-use/lib/useAsync'; import { ActionExample, scaffolderApiRef, } from '@backstage/plugin-scaffolder-react'; import { - Typography, + Accordion, + AccordionDetails, + AccordionSummary, + Box, + Collapse, + Grid, + makeStyles, Paper, Table, TableBody, - Box, - Chip, TableCell, TableContainer, TableHead, TableRow, - Grid, - makeStyles, - Accordion, - AccordionSummary, - AccordionDetails, + Typography, } from '@material-ui/core'; import { JSONSchema7, JSONSchema7Definition } from 'json-schema'; import classNames from 'classnames'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; +import ExpandLessIcon from '@material-ui/icons/ExpandLess'; import { useApi } from '@backstage/core-plugin-api'; import { - Progress, - Content, - Header, - Page, - ErrorPage, CodeSnippet, + Content, + ErrorPage, + Header, MarkdownContent, + Page, + Progress, } from '@backstage/core-components'; +import Chip from '@material-ui/core/Chip'; const useStyles = makeStyles(theme => ({ code: { @@ -111,6 +113,7 @@ export const ActionsPage = () => { const { loading, value, error } = useAsync(async () => { return api.listActions(); }); + const [isExpanded, setIsExpanded] = useState<{ [key: string]: boolean }>({}); if (loading) { return ; @@ -125,41 +128,9 @@ export const ActionsPage = () => { ); } - const formatRows = (input: JSONSchema7) => { - const properties = input.properties; - if (!properties) { - return undefined; - } - - return Object.entries(properties).map(entry => { - const [key] = entry; - const props = entry[1] as unknown as JSONSchema7; - const codeClassname = classNames(classes.code, { - [classes.codeRequired]: input.required?.includes(key), - }); - - return ( - - -
{key}
-
- {props.title} - {props.description} - - <> - {[props.type].flat().map(type => ( - - ))} - - -
- ); - }); - }; - - const renderTable = (input: JSONSchema7) => { - if (!input.properties) { - return undefined; + const renderTable = (rows?: JSX.Element[]) => { + if (!rows || rows.length < 1) { + return No schema defined; } return ( @@ -172,13 +143,108 @@ export const ActionsPage = () => { Type - {formatRows(input)} + {rows} ); }; - const renderTables = (name: string, input?: JSONSchema7Definition[]) => { + const getTypes = (properties: JSONSchema7) => { + if (!properties.type) { + return ['unknown']; + } + + if (properties.type !== 'array') { + return [properties.type].flat(); + } + + return [ + `${properties.type}(${ + (properties.items as JSONSchema7 | undefined)?.type ?? 'unknown' + })`, + ]; + }; + + const formatRows = (parentId: string, input?: JSONSchema7) => { + const properties = input?.properties; + if (!properties) { + return undefined; + } + + return Object.entries(properties).map(entry => { + const [key] = entry; + const id = `${parentId}.${key}`; + const props = entry[1] as unknown as JSONSchema7; + const codeClassname = classNames(classes.code, { + [classes.codeRequired]: input.required?.includes(key), + }); + const types = getTypes(props); + + return ( + + + +
{key}
+
+ {props.title} + {props.description} + + {types.map(type => + type.includes('object') ? ( + : + } + variant="outlined" + onClick={() => + setIsExpanded(prevState => { + const state = { ...prevState }; + state[id] = !prevState[id]; + return state; + }) + } + /> + ) : ( + + ), + )} + +
+ + + + + + {key} + + {renderTable( + formatRows( + id, + props.type === 'array' + ? ({ + properties: + (props.items as JSONSchema7 | undefined) + ?.properties ?? {}, + } as unknown as JSONSchema7 | undefined) + : props, + ), + )} + + + + +
+ ); + }); + }; + + const renderTables = ( + name: string, + id: string, + input?: JSONSchema7Definition[], + ) => { if (!input) { return undefined; } @@ -187,7 +253,11 @@ export const ActionsPage = () => { <> {name} {input.map((i, index) => ( -
{renderTable(i as unknown as JSONSchema7)}
+
+ {renderTable( + formatRows(`${id}.${index}`, i as unknown as JSONSchema7), + )} +
))} ); @@ -198,7 +268,11 @@ export const ActionsPage = () => { return undefined; } - const oneOf = renderTables('oneOf', action.schema?.input?.oneOf); + const oneOf = renderTables( + 'oneOf', + `${action.id}.input`, + action.schema?.input?.oneOf, + ); return ( @@ -208,14 +282,18 @@ export const ActionsPage = () => { {action.schema?.input && ( Input - {renderTable(action.schema.input)} + {renderTable( + formatRows(`${action.id}.input`, action?.schema?.input), + )} {oneOf} )} {action.schema?.output && ( Output - {renderTable(action.schema.output)} + {renderTable( + formatRows(`${action.id}.output`, action?.schema?.output), + )} )} {action.examples && ( From 79c2dd6d54331433736ebee106102d1c67c874a4 Mon Sep 17 00:00:00 2001 From: Andy Ladjadj Date: Fri, 24 Mar 2023 16:52:53 +0100 Subject: [PATCH 059/137] Update plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx Co-authored-by: Ben Lambert Signed-off-by: Andy Ladjadj --- .../adr/src/components/EntityAdrContent/EntityAdrContent.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx b/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx index 1567306f12..d136de4717 100644 --- a/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx +++ b/plugins/adr/src/components/EntityAdrContent/EntityAdrContent.tsx @@ -88,7 +88,8 @@ const AdrListContainer = (props: { switch (status) { case 'accepted': return 'primary'; - case 'rejected' || 'deprecated': + case 'rejected': + case 'deprecated': return 'secondary'; default: return 'default'; From 3b0ac0d7e28038e800f7d57e9e2deed4b86d18de Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Fri, 3 Feb 2023 22:47:11 -0500 Subject: [PATCH 060/137] convert module mock to msw This should allow for easier refactoring and adding new microsoft-specific features. Signed-off-by: Jamie Klassen --- .../src/providers/microsoft/provider.test.ts | 146 +++++++++--------- 1 file changed, 69 insertions(+), 77 deletions(-) diff --git a/plugins/auth-backend/src/providers/microsoft/provider.test.ts b/plugins/auth-backend/src/providers/microsoft/provider.test.ts index e4e919004c..f455b0e3f6 100644 --- a/plugins/auth-backend/src/providers/microsoft/provider.test.ts +++ b/plugins/auth-backend/src/providers/microsoft/provider.test.ts @@ -15,84 +15,60 @@ */ import { MicrosoftAuthProvider } from './provider'; -import * as helpers from '../../lib/passport/PassportStrategyHelper'; -import { OAuthResult } from '../../lib/oauth'; import { getVoidLogger } from '@backstage/backend-common'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; import { AuthResolverContext } from '../types'; +import express from 'express'; -jest.mock('../../lib/passport/PassportStrategyHelper', () => { - return { - executeFrameHandlerStrategy: jest.fn(), - }; -}); +describe('MicrosoftAuthProvider#handle', () => { + const server = setupServer(); + setupRequestMockHandlers(server); -const mockFrameHandler = jest.spyOn( - helpers, - 'executeFrameHandlerStrategy', -) as unknown as jest.MockedFunction< - () => Promise<{ result: OAuthResult; privateInfo: any }> ->; - -const mockResult = { - result: { - fullProfile: { - emails: [ - { - type: 'work', - value: 'conrad@example.com', + beforeEach(() => { + server.use( + rest.post( + 'https://login.microsoftonline.com/common/oauth2/v2.0/token', + (_, res, ctx) => + res( + ctx.json({ + token_type: 'Bearer', + scope: 'email openid profile User.Read', + expires_in: 123, + ext_expires_in: 123, + access_token: 'accessToken', + refresh_token: 'refreshToken', + id_token: 'idToken', + }), + ), + ), + rest.get('https://graph.microsoft.com/v1.0/me/', (_, res, ctx) => + res( + ctx.json({ + id: 'conrad', + displayName: 'Conrad', + surname: 'Ribas', + givenName: 'Francisco', + mail: 'conrad@example.com', + }), + ), + ), + rest.get( + 'https://graph.microsoft.com/v1.0/me/photos/*', + async (_, res, ctx) => { + const imageBuffer = new Uint8Array([104, 111, 119, 100, 121]).buffer; + return res( + ctx.set('Content-Length', imageBuffer.byteLength.toString()), + ctx.set('Content-Type', 'image/jpeg'), + ctx.body(imageBuffer), + ); }, - ], - displayName: 'Conrad', - name: { - familyName: 'Ribas', - givenName: 'Francisco', - }, - id: 'conrad', - provider: 'microsoft', - photos: [ - { - value: 'some-data', - }, - ], - }, - params: { - id_token: 'idToken', - scope: 'scope', - expires_in: 123, - }, - accessToken: 'accessToken', - }, - privateInfo: { - refreshToken: 'wacka', - }, -}; - -const server = setupServer(); -setupRequestMockHandlers(server); - -const setupHandlers = () => { - server.use( - rest.get( - 'https://graph.microsoft.com/v1.0/me/photos/*', - async (_, res, ctx) => { - const imageBuffer = new Uint8Array([104, 111, 119, 100, 121]).buffer; - return res( - ctx.set('Content-Length', imageBuffer.byteLength.toString()), - ctx.set('Content-Type', 'image/jpeg'), - ctx.body(imageBuffer), - ); - }, - ), - ); -}; - -describe('createMicrosoftProvider', () => { - it('should auth', async () => { - setupHandlers(); + ), + ); + }); + it('returns providerInfo and profile', async () => { const provider = new MicrosoftAuthProvider({ logger: getVoidLogger(), resolverContext: {} as AuthResolverContext, @@ -105,17 +81,25 @@ describe('createMicrosoftProvider', () => { }), clientId: 'mock', clientSecret: 'mock', - callbackUrl: 'mock', + callbackUrl: 'http://backstage.test/api/auth/microsoft/handler/frame', }); - mockFrameHandler.mockResolvedValueOnce(mockResult); - const { response } = await provider.handler({} as any); + const { response } = await provider.handler({ + method: 'GET', + url: 'http://backstage.test/api/auth/microsoft/handler/frame', + query: { + code: 'authorizationcode', + }, + headers: { host: 'backstage.test' }, + connection: {}, + } as unknown as express.Request); + expect(response).toEqual({ providerInfo: { accessToken: 'accessToken', expiresInSeconds: 123, idToken: 'idToken', - scope: 'scope', + scope: 'email openid profile User.Read', }, profile: { email: 'conrad@example.com', @@ -125,8 +109,7 @@ describe('createMicrosoftProvider', () => { }); }); - it('should return the base64 encoded photo data of the profile', async () => { - setupHandlers(); + it('returns base64 encoded photo data', async () => { const provider = new MicrosoftAuthProvider({ logger: getVoidLogger(), resolverContext: {} as AuthResolverContext, @@ -149,8 +132,17 @@ describe('createMicrosoftProvider', () => { }; }, }); - mockFrameHandler.mockResolvedValueOnce(mockResult); - const { response } = await provider.handler({} as any); + + const { response } = await provider.handler({ + method: 'GET', + url: 'http://backstage.test/api/auth/microsoft/handler/frame', + query: { + code: 'authorizationcode', + }, + headers: { host: 'backstage.test' }, + connection: {}, + } as unknown as express.Request); + const overloadedIdentity = response.backstageIdentity as any; const photo = overloadedIdentity.info.result.fullProfile.photos[0]; expect(photo.value).toEqual('data:image/jpeg;base64,aG93ZHk='); From 646025786e2bc985c61d5368510599364e467c15 Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Fri, 3 Feb 2023 22:47:56 -0500 Subject: [PATCH 061/137] construct test subject via factory function Rather than using the MicrosoftAuthProvider constructor directly -- this is more faithful to how this object is instantiated in practice. Also, introduce FakeMicrosoftAPI to simulate negotiating scopes, authorization codes, access tokens, and refresh tokens with Azure. Signed-off-by: Jamie Klassen --- .../microsoft/__testUtils__/fake.test.ts | 90 ++++ .../providers/microsoft/__testUtils__/fake.ts | 126 ++++++ .../src/providers/microsoft/provider.test.ts | 394 ++++++++++++++---- 3 files changed, 525 insertions(+), 85 deletions(-) create mode 100644 plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.test.ts create mode 100644 plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.ts diff --git a/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.test.ts b/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.test.ts new file mode 100644 index 0000000000..dee37f0f6b --- /dev/null +++ b/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.test.ts @@ -0,0 +1,90 @@ +/* + * Copyright 2023 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 { FakeMicrosoftAPI } from './fake'; + +describe('FakeMicrosoftAPI', () => { + const api = new FakeMicrosoftAPI(); + + describe('#token', () => { + it('exchanges auth codes', () => { + const { access_token } = api.token( + new URLSearchParams({ + grant_type: 'authorization_code', + code: api.generateAuthCode('User.Read'), + }), + ); + + expect(api.tokenHasScope(access_token, 'User.Read')).toBe(true); + }); + + it('supports scopes for the first requested audience only', () => { + const { access_token } = api.token( + new URLSearchParams({ + grant_type: 'authorization_code', + code: api.generateAuthCode('someaudience/somescope User.Read'), + }), + ); + + expect(api.tokenHasScope(access_token, 'User.Read')).toBe(false); + }); + + it('special openid scopes do not count towards the 1-audience limit', () => { + const { access_token } = api.token( + new URLSearchParams({ + grant_type: 'authorization_code', + code: api.generateAuthCode('openid offline_access User.Read'), + }), + ); + + expect(api.tokenHasScope(access_token, 'User.Read')).toBe(true); + }); + + it('refreshes tokens', () => { + const { access_token } = api.token( + new URLSearchParams({ + grant_type: 'refresh_token', + refresh_token: api.generateRefreshToken( + 'email openid profile User.Read', + ), + }), + ); + + expect( + api.tokenHasScope(access_token, 'email openid profile User.Read'), + ).toBe(true); + }); + it('requires `openid` scope for ID token', () => { + const { id_token } = api.token( + new URLSearchParams({ + grant_type: 'authorization_code', + code: api.generateAuthCode('User.Read'), + }), + ); + + expect(id_token).toBeUndefined(); + }); + it('requires `offline_access` scope for refresh token', () => { + const { refresh_token } = api.token( + new URLSearchParams({ + grant_type: 'authorization_code', + code: api.generateAuthCode('User.Read'), + }), + ); + + expect(refresh_token).toBeUndefined(); + }); + }); +}); diff --git a/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.ts b/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.ts new file mode 100644 index 0000000000..9b3ca09c57 --- /dev/null +++ b/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.ts @@ -0,0 +1,126 @@ +/* + * Copyright 2023 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 { decodeJwt } from 'jose'; + +type Claims = { aud: string; scp: string }; + +export class FakeMicrosoftAPI { + generateAccessToken(scope: string): string { + return this.tokenWithClaims(this.allClaimsForScope(scope)).access_token; + } + generateAuthCode(scope: string): string { + return this.encodeClaims(this.allClaimsForScope(scope)); + } + generateRefreshToken(scope: string): string { + return this.encodeClaims(this.allClaimsForScope(scope)); + } + token(formData: URLSearchParams): { + access_token: string; + scope: string; + refresh_token?: string; + id_token?: string; + } { + const scopeParameter = formData.get('scope'); + const claims = + (scopeParameter && this.allClaimsForScope(scopeParameter)) ?? + formData.get('grant_type') === 'refresh_token' + ? this.decodeClaims(formData.get('refresh_token')!) + : this.decodeClaims(formData.get('code')!); + return { + ...this.tokenWithClaims(claims), + ...(this.hasScope(claims, 'offline_access') && { + refresh_token: this.encodeClaims(claims), + }), + ...(this.hasScope(claims, 'openid') && { + id_token: 'header.e30K.microsoft', + }), + }; + } + tokenHasScope(token: string, scope: string): boolean { + const { aud, scp } = decodeJwt(token); + return this.hasScope({ aud: aud as string, scp: scp as string }, scope); + } + private tokenWithClaims(claims: Claims): { + access_token: string; + scope: string; + } { + const filteredClaims = { + ...claims, + scp: claims.scp + .split(' ') + .filter(s => s !== 'offline_access') + .join(' '), + }; + return { + access_token: `header.${Buffer.from( + JSON.stringify(filteredClaims), + ).toString('base64')}.signature`, + scope: this.scopeFromClaims(filteredClaims), + }; + } + private allClaimsForScope(scope: string): Claims { + const scopes = scope.split(' ').map(this.parseScope); + const firstAudience = scopes + .map(({ aud }) => aud) + .find(aud => aud !== 'openid'); + return { + aud: firstAudience ?? '00000003-0000-0000-c000-000000000000', + scp: scopes + .filter(({ aud }) => aud === 'openid' || aud === firstAudience) + .map(({ scp }) => scp) + .join(' '), + }; + } + // auth codes and refresh tokens in this fake system are base64-encoded JSON + // strings of claims + private encodeClaims(claims: Claims): string { + return Buffer.from(JSON.stringify(claims)).toString('base64'); + } + private decodeClaims(encoded: string): Claims { + return JSON.parse(Buffer.from(encoded, 'base64').toString()); + } + private hasScope(claims: Claims, scope: string): boolean { + return this.scopeFromClaims(claims).includes(scope); + } + private parseScope(s: string): Claims { + if (s.includes('/')) { + const [aud, scp] = s.split('/'); + return { aud, scp }; + } + switch (s) { + case 'email': + case 'openid': + case 'offline_access': + case 'profile': { + return { aud: 'openid', scp: s }; + } + default: + return { aud: '00000003-0000-0000-c000-000000000000', scp: s }; + } + } + private scopeFromClaims(claims: Claims): string { + return claims.scp + .split(' ') + .map(this.parseScope) + .map(({ aud, scp }) => + aud === 'openid' || + claims.aud === '00000003-0000-0000-c000-000000000000' + ? scp + : `${claims.aud}/${scp}`, + ) + .join(' '); + } +} diff --git a/plugins/auth-backend/src/providers/microsoft/provider.test.ts b/plugins/auth-backend/src/providers/microsoft/provider.test.ts index f455b0e3f6..00ee34bc79 100644 --- a/plugins/auth-backend/src/providers/microsoft/provider.test.ts +++ b/plugins/auth-backend/src/providers/microsoft/provider.test.ts @@ -14,37 +14,73 @@ * limitations under the License. */ -import { MicrosoftAuthProvider } from './provider'; +import { microsoft } from './provider'; import { getVoidLogger } from '@backstage/backend-common'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; +import { ConfigReader } from '@backstage/config'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; -import { AuthResolverContext } from '../types'; +import { AuthProviderRouteHandlers, AuthResolverContext } from '../types'; import express from 'express'; +import crypto from 'crypto'; +import { FakeMicrosoftAPI } from './__testUtils__/fake'; + +describe('MicrosoftAuthProvider', () => { + const nonce = 'AAAAAAAAAAAAAAAAAAAAAA=='; // 16 bytes of zeros in base64 + const state = Buffer.from( + `nonce=${encodeURIComponent(nonce)}&env=development`, + ).toString('hex'); -describe('MicrosoftAuthProvider#handle', () => { const server = setupServer(); + const microsoftApi = new FakeMicrosoftAPI(); + let provider: AuthProviderRouteHandlers; + let response: jest.Mocked; + setupRequestMockHandlers(server); beforeEach(() => { + provider = microsoft.create()({ + providerId: 'microsoft', + globalConfig: { + baseUrl: 'http://backstage.test/api/auth', + appUrl: 'http://backstage.test', + isOriginAllowed: _ => true, + }, + config: new ConfigReader({ + development: { + tenantId: 'tenantId', + clientId: 'clientId', + clientSecret: 'clientSecret', + }, + }), + logger: getVoidLogger(), + resolverContext: {} as AuthResolverContext, + }); + server.use( rest.post( - 'https://login.microsoftonline.com/common/oauth2/v2.0/token', - (_, res, ctx) => - res( + 'https://login.microsoftonline.com/tenantId/oauth2/v2.0/token', + async (req, res, ctx) => { + return res( ctx.json({ + ...microsoftApi.token(new URLSearchParams(await req.text())), token_type: 'Bearer', - scope: 'email openid profile User.Read', expires_in: 123, ext_expires_in: 123, - access_token: 'accessToken', - refresh_token: 'refreshToken', - id_token: 'idToken', }), - ), + ); + }, ), - rest.get('https://graph.microsoft.com/v1.0/me/', (_, res, ctx) => - res( + rest.get('https://graph.microsoft.com/v1.0/me/', (req, res, ctx) => { + if ( + !microsoftApi.tokenHasScope( + req.headers.get('authorization')!.replace(/^Bearer /, ''), + 'User.Read', + ) + ) { + return res(ctx.status(403)); + } + return res( ctx.json({ id: 'conrad', displayName: 'Conrad', @@ -52,11 +88,19 @@ describe('MicrosoftAuthProvider#handle', () => { givenName: 'Francisco', mail: 'conrad@example.com', }), - ), - ), + ); + }), rest.get( 'https://graph.microsoft.com/v1.0/me/photos/*', - async (_, res, ctx) => { + async (req, res, ctx) => { + if ( + !microsoftApi.tokenHasScope( + req.headers.get('authorization')!.replace(/^Bearer /, ''), + 'User.Read', + ) + ) { + return res(ctx.status(403)); + } const imageBuffer = new Uint8Array([104, 111, 119, 100, 121]).buffer; return res( ctx.set('Content-Length', imageBuffer.byteLength.toString()), @@ -66,85 +110,265 @@ describe('MicrosoftAuthProvider#handle', () => { }, ), ); + response = { + cookie: jest.fn(), + end: jest.fn(), + json: jest.fn(), + setHeader: jest.fn(), + status: jest.fn(), + } as unknown as jest.Mocked; + response.status.mockReturnValue(response); }); - it('returns providerInfo and profile', async () => { - const provider = new MicrosoftAuthProvider({ - logger: getVoidLogger(), - resolverContext: {} as AuthResolverContext, - authHandler: async ({ fullProfile }) => ({ - profile: { - email: fullProfile.emails![0]!.value, - displayName: fullProfile.displayName, - picture: 'http://microsoft.com/lols', - }, - }), - clientId: 'mock', - clientSecret: 'mock', - callbackUrl: 'http://backstage.test/api/auth/microsoft/handler/frame', + describe('#start', () => { + const randomBytes = jest.spyOn( + crypto, + 'randomBytes', + ) as unknown as jest.MockedFunction<(size: number) => Buffer>; + + afterEach(() => { + randomBytes.mockRestore(); }); - const { response } = await provider.handler({ - method: 'GET', - url: 'http://backstage.test/api/auth/microsoft/handler/frame', - query: { - code: 'authorizationcode', - }, - headers: { host: 'backstage.test' }, - connection: {}, - } as unknown as express.Request); + it('redirects to authorize URL', async () => { + randomBytes.mockReturnValue(Buffer.from(nonce, 'base64')); - expect(response).toEqual({ - providerInfo: { - accessToken: 'accessToken', - expiresInSeconds: 123, - idToken: 'idToken', - scope: 'email openid profile User.Read', - }, - profile: { - email: 'conrad@example.com', - displayName: 'Conrad', - picture: 'http://microsoft.com/lols', - }, + await provider.start( + { + query: { + env: 'development', + scope: 'email openid profile User.Read', + }, + } as unknown as express.Request, + response, + ); + + expect(response.setHeader).toHaveBeenCalledWith( + 'Location', + 'https://login.microsoftonline.com/tenantId/oauth2/v2.0/authorize' + + '?response_type=code' + + '&redirect_uri=http%3A%2F%2Fbackstage.test%2Fapi%2Fauth%2Fmicrosoft%2Fhandler%2Fframe' + + '&scope=email%20openid%20profile%20User.Read' + + `&state=${state}` + + '&client_id=clientId', + ); }); }); - it('returns base64 encoded photo data', async () => { - const provider = new MicrosoftAuthProvider({ - logger: getVoidLogger(), - resolverContext: {} as AuthResolverContext, - authHandler: async ({ fullProfile }) => ({ - profile: { - email: fullProfile.emails![0]!.value, - displayName: fullProfile.displayName, - picture: 'http://microsoft.com/lols', - }, - }), - clientId: 'mock', - clientSecret: 'mock', - callbackUrl: 'mock', - // define resolver to return user `info` for photo validation - signInResolver: async (info, _) => { - return { - id: 'user.name', - token: 'token', - info: info, - }; - }, + describe('#handle', () => { + it('returns provider info and profile with photo data', async () => { + await provider.frameHandler( + { + query: { + env: 'development', + code: microsoftApi.generateAuthCode( + 'email openid profile User.Read', + ), + state, + }, + cookies: { + 'microsoft-nonce': nonce, + }, + } as unknown as express.Request, + response, + ); + + expect(response.end).toHaveBeenCalledWith( + expect.stringContaining( + encodeURIComponent( + JSON.stringify({ + type: 'authorization_response', + response: { + providerInfo: { + idToken: 'header.e30K.microsoft', + accessToken: microsoftApi.generateAccessToken( + 'email openid profile User.Read', + ), + scope: 'email openid profile User.Read', + expiresInSeconds: 123, + }, + profile: { + email: 'conrad@example.com', + picture: 'data:image/jpeg;base64,aG93ZHk=', + displayName: 'Conrad', + }, + }, + }), + ), + ), + ); }); - const { response } = await provider.handler({ - method: 'GET', - url: 'http://backstage.test/api/auth/microsoft/handler/frame', - query: { - code: 'authorizationcode', - }, - headers: { host: 'backstage.test' }, - connection: {}, - } as unknown as express.Request); + it('sets refresh token', async () => { + await provider.frameHandler( + { + query: { + env: 'development', + code: microsoftApi.generateAuthCode( + 'email offline_access openid profile User.Read', + ), + state, + }, + cookies: { + 'microsoft-nonce': nonce, + }, + } as unknown as express.Request, + response, + ); - const overloadedIdentity = response.backstageIdentity as any; - const photo = overloadedIdentity.info.result.fullProfile.photos[0]; - expect(photo.value).toEqual('data:image/jpeg;base64,aG93ZHk='); + expect(response.cookie).toHaveBeenCalledWith( + 'microsoft-refresh-token', + microsoftApi.generateRefreshToken( + 'email offline_access openid profile User.Read', + ), + { + domain: 'backstage.test', + httpOnly: true, + maxAge: 86400000000, + path: '/api/auth/microsoft', + sameSite: 'lax', + secure: false, + }, + ); + }); + + it('omits photo data when fetching it fails', async () => { + server.use( + rest.get('https://graph.microsoft.com/v1.0/me/photos/*', (_, res) => + res.networkError('remote hung up'), + ), + ); + + await provider.frameHandler( + { + query: { + env: 'development', + code: microsoftApi.generateAuthCode( + 'email openid profile User.Read', + ), + state, + }, + cookies: { + 'microsoft-nonce': nonce, + }, + } as unknown as express.Request, + response, + ); + + expect(response.end).toHaveBeenCalledWith( + expect.stringContaining( + encodeURIComponent( + JSON.stringify({ + type: 'authorization_response', + response: { + providerInfo: { + idToken: 'header.e30K.microsoft', + accessToken: microsoftApi.generateAccessToken( + 'email openid profile User.Read', + ), + scope: 'email openid profile User.Read', + expiresInSeconds: 123, + }, + profile: { + email: 'conrad@example.com', + displayName: 'Conrad', + }, + }, + }), + ), + ), + ); + }); + }); + + describe('#refresh', () => { + it('returns provider info and profile with photo data', async () => { + await provider.refresh!( + { + query: { + env: 'development', + scope: 'email openid profile User.Read', + }, + header: jest.fn(_ => 'XMLHttpRequest'), + cookies: { + 'microsoft-refresh-token': microsoftApi.generateRefreshToken( + 'email openid profile User.Read', + ), + }, + get: jest.fn(), + } as unknown as express.Request, + response, + ); + + expect(response.json).toHaveBeenCalledWith( + expect.objectContaining({ + providerInfo: { + accessToken: microsoftApi.generateAccessToken( + 'email openid profile User.Read', + ), + expiresInSeconds: 123, + idToken: 'header.e30K.microsoft', + scope: 'email openid profile User.Read', + }, + profile: { + email: 'conrad@example.com', + displayName: 'Conrad', + picture: 'data:image/jpeg;base64,aG93ZHk=', + }, + }), + ); + }); + + it('returns backstage identity when sign-in resolver is configured', async () => { + provider = microsoft.create({ + signIn: { + resolver: _ => + Promise.resolve({ + token: 'protectedheader.e30K.signature', + }), + }, + })({ + providerId: 'microsoft', + globalConfig: { + baseUrl: 'http://backstage.test/api/auth', + appUrl: 'http://backstage.test', + isOriginAllowed: _ => true, + }, + config: new ConfigReader({ + development: { + tenantId: 'tenantId', + clientId: 'clientId', + clientSecret: 'clientSecret', + }, + }), + logger: getVoidLogger(), + resolverContext: {} as AuthResolverContext, + }) as AuthProviderRouteHandlers; + + await provider.refresh!( + { + query: { + env: 'development', + scope: 'email openid profile User.Read', + }, + header: jest.fn(_ => 'XMLHttpRequest'), + cookies: { + 'microsoft-refresh-token': microsoftApi.generateRefreshToken( + 'email openid profile User.Read', + ), + }, + get: jest.fn(), + } as unknown as express.Request, + response, + ); + + expect(response.json).toHaveBeenCalledWith( + expect.objectContaining({ + backstageIdentity: expect.objectContaining({ + token: 'protectedheader.e30K.signature', + }), + }), + ); + }); }); }); From 475abd1dc3fa3cfe41b77d7f5337b23e04147cc0 Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Tue, 14 Feb 2023 09:27:08 -0500 Subject: [PATCH 062/137] support non-microsoft graph scopes Signed-off-by: Jamie Klassen --- .changeset/mighty-tips-flow.md | 11 ++ .../src/providers/microsoft/provider.test.ts | 130 +++++++++++++----- .../src/providers/microsoft/provider.ts | 80 +++++++---- 3 files changed, 161 insertions(+), 60 deletions(-) create mode 100644 .changeset/mighty-tips-flow.md diff --git a/.changeset/mighty-tips-flow.md b/.changeset/mighty-tips-flow.md new file mode 100644 index 0000000000..d876942fde --- /dev/null +++ b/.changeset/mighty-tips-flow.md @@ -0,0 +1,11 @@ +--- +'@backstage/plugin-auth-backend': patch +--- + +The `microsoft` (i.e. Azure) auth provider now supports negotiating tokens for +Azure resources besides Microsoft Graph (e.g. AKS, Virtual Machines, Machine +Learning Services, etc.). When the `/frame/handler` endpoint is called with an +authorization code for a non-Microsoft Graph scope, the user profile will not be +fetched. Similarly no user profile or photo data will be fetched by the backend +if the `/refresh` endpoint is called with the `scope` query parameter strictly +containing scopes for resources besides Microsoft Graph. diff --git a/plugins/auth-backend/src/providers/microsoft/provider.test.ts b/plugins/auth-backend/src/providers/microsoft/provider.test.ts index 00ee34bc79..6f8df2d4df 100644 --- a/plugins/auth-backend/src/providers/microsoft/provider.test.ts +++ b/plugins/auth-backend/src/providers/microsoft/provider.test.ts @@ -39,7 +39,11 @@ describe('MicrosoftAuthProvider', () => { setupRequestMockHandlers(server); beforeEach(() => { - provider = microsoft.create()({ + provider = microsoft.create({ + signIn: { + resolver: microsoft.resolvers.emailMatchingUserEntityAnnotation(), + }, + })({ providerId: 'microsoft', globalConfig: { baseUrl: 'http://backstage.test/api/auth', @@ -54,8 +58,15 @@ describe('MicrosoftAuthProvider', () => { }, }), logger: getVoidLogger(), - resolverContext: {} as AuthResolverContext, - }); + resolverContext: { + issueToken: jest.fn(), + findCatalogUser: jest.fn(), + signInWithCatalogUser: _ => + Promise.resolve({ + token: 'header.e30K.backstage', + }), + } as AuthResolverContext, + }) as AuthProviderRouteHandlers; server.use( rest.post( @@ -147,8 +158,10 @@ describe('MicrosoftAuthProvider', () => { 'Location', 'https://login.microsoftonline.com/tenantId/oauth2/v2.0/authorize' + '?response_type=code' + - '&redirect_uri=http%3A%2F%2Fbackstage.test%2Fapi%2Fauth%2Fmicrosoft%2Fhandler%2Fframe' + - '&scope=email%20openid%20profile%20User.Read' + + `&redirect_uri=${encodeURIComponent( + 'http://backstage.test/api/auth/microsoft/handler/frame', + )}` + + `&scope=${encodeURIComponent('email openid profile User.Read')}` + `&state=${state}` + '&client_id=clientId', ); @@ -180,18 +193,58 @@ describe('MicrosoftAuthProvider', () => { type: 'authorization_response', response: { providerInfo: { - idToken: 'header.e30K.microsoft', accessToken: microsoftApi.generateAccessToken( 'email openid profile User.Read', ), scope: 'email openid profile User.Read', expiresInSeconds: 123, + idToken: 'header.e30K.microsoft', }, profile: { email: 'conrad@example.com', picture: 'data:image/jpeg;base64,aG93ZHk=', displayName: 'Conrad', }, + backstageIdentity: { + token: 'header.e30K.backstage', + identity: { type: 'user', ownershipEntityRefs: [] }, + }, + }, + }), + ), + ), + ); + }); + + it('returns access token for non-microsoft graph scope', async () => { + await provider.frameHandler( + { + query: { + env: 'development', + code: microsoftApi.generateAuthCode('aks-audience/user.read'), + state, + }, + cookies: { + 'microsoft-nonce': nonce, + }, + } as unknown as express.Request, + response, + ); + + expect(response.end).toHaveBeenCalledWith( + expect.stringContaining( + encodeURIComponent( + JSON.stringify({ + type: 'authorization_response', + response: { + providerInfo: { + accessToken: microsoftApi.generateAccessToken( + 'aks-audience/user.read', + ), + scope: 'aks-audience/user.read', + expiresInSeconds: 123, + }, + profile: {}, }, }), ), @@ -262,17 +315,21 @@ describe('MicrosoftAuthProvider', () => { type: 'authorization_response', response: { providerInfo: { - idToken: 'header.e30K.microsoft', accessToken: microsoftApi.generateAccessToken( 'email openid profile User.Read', ), scope: 'email openid profile User.Read', expiresInSeconds: 123, + idToken: 'header.e30K.microsoft', }, profile: { email: 'conrad@example.com', displayName: 'Conrad', }, + backstageIdentity: { + token: 'header.e30K.backstage', + identity: { type: 'user', ownershipEntityRefs: [] }, + }, }, }), ), @@ -306,45 +363,50 @@ describe('MicrosoftAuthProvider', () => { accessToken: microsoftApi.generateAccessToken( 'email openid profile User.Read', ), + scope: 'email openid profile User.Read', expiresInSeconds: 123, idToken: 'header.e30K.microsoft', - scope: 'email openid profile User.Read', }, profile: { email: 'conrad@example.com', - displayName: 'Conrad', picture: 'data:image/jpeg;base64,aG93ZHk=', + displayName: 'Conrad', }, }), ); }); - it('returns backstage identity when sign-in resolver is configured', async () => { - provider = microsoft.create({ - signIn: { - resolver: _ => - Promise.resolve({ - token: 'protectedheader.e30K.signature', - }), - }, - })({ - providerId: 'microsoft', - globalConfig: { - baseUrl: 'http://backstage.test/api/auth', - appUrl: 'http://backstage.test', - isOriginAllowed: _ => true, - }, - config: new ConfigReader({ - development: { - tenantId: 'tenantId', - clientId: 'clientId', - clientSecret: 'clientSecret', + it('returns access token for non-microsoft graph scope', async () => { + await provider.refresh!( + { + query: { + env: 'development', + scope: 'aks-audience/user.read', }, - }), - logger: getVoidLogger(), - resolverContext: {} as AuthResolverContext, - }) as AuthProviderRouteHandlers; + header: jest.fn(_ => 'XMLHttpRequest'), + cookies: { + 'microsoft-refresh-token': microsoftApi.generateRefreshToken( + 'aks-audience/user.read', + ), + }, + get: jest.fn(), + } as unknown as express.Request, + response, + ); + expect(response.json).toHaveBeenCalledWith({ + providerInfo: { + accessToken: microsoftApi.generateAccessToken( + 'aks-audience/user.read', + ), + expiresInSeconds: 123, + scope: 'aks-audience/user.read', + }, + profile: {}, + }); + }); + + it('returns backstage identity', async () => { await provider.refresh!( { query: { @@ -365,7 +427,7 @@ describe('MicrosoftAuthProvider', () => { expect(response.json).toHaveBeenCalledWith( expect.objectContaining({ backstageIdentity: expect.objectContaining({ - token: 'protectedheader.e30K.signature', + token: 'header.e30K.backstage', }), }), ); diff --git a/plugins/auth-backend/src/providers/microsoft/provider.ts b/plugins/auth-backend/src/providers/microsoft/provider.ts index 9b14a3c91b..5d02b7ef61 100644 --- a/plugins/auth-backend/src/providers/microsoft/provider.ts +++ b/plugins/auth-backend/src/providers/microsoft/provider.ts @@ -49,6 +49,8 @@ import { } from '../resolvers'; import { Logger } from 'winston'; import fetch from 'node-fetch'; +import { decodeJwt } from 'jose'; +import { Profile as PassportProfile } from 'passport'; const BACKSTAGE_SESSION_EXPIRATION = 3600; @@ -86,6 +88,12 @@ export class MicrosoftAuthProvider implements OAuthHandlers { authorizationURL: options.authorizationUrl, tokenURL: options.tokenUrl, passReqToCallback: false, + skipUserProfile: ( + accessToken: string, + done: (err: unknown, skip: boolean) => void, + ) => { + done(null, this.skipUserProfile(accessToken)); + }, }, ( accessToken: any, @@ -99,6 +107,17 @@ export class MicrosoftAuthProvider implements OAuthHandlers { ); } + private skipUserProfile = (accessToken: string): boolean => { + const { aud, scp } = decodeJwt(accessToken); + const hasGraphReadScope = + aud === '00000003-0000-0000-c000-000000000000' && + (scp as string) + .split(' ') + .map(s => s.toLowerCase()) + .includes('user.read'); + return !hasGraphReadScope; + }; + async start(req: OAuthStartRequest): Promise { return await executeRedirectStrategy(req, this._strategy, { scope: req.scope, @@ -126,53 +145,62 @@ export class MicrosoftAuthProvider implements OAuthHandlers { req.scope, ); - const fullProfile = await executeFetchUserProfileStrategy( - this._strategy, - accessToken, - ); - return { response: await this.handleResult({ - fullProfile, params, accessToken, + ...(!this.skipUserProfile(accessToken) && { + fullProfile: await executeFetchUserProfileStrategy( + this._strategy, + accessToken, + ), + }), }), refreshToken, }; } - private async handleResult(result: OAuthResult) { - const photo = await this.getUserPhoto(result.accessToken); - result.fullProfile.photos = photo ? [{ value: photo }] : undefined; - - const { profile } = await this.authHandler(result, this.resolverContext); + private async handleResult(result: { + fullProfile?: PassportProfile; + params: { + id_token?: string; + scope: string; + expires_in: number; + }; + accessToken: string; + refreshToken?: string; + }): Promise { + let profile = {}; + if (result.fullProfile) { + const photo = await this.getUserPhoto(result.accessToken); + result.fullProfile.photos = photo ? [{ value: photo }] : undefined; + ({ profile } = await this.authHandler( + result as OAuthResult, + this.resolverContext, + )); + } const expiresInSeconds = result.params.expires_in === undefined ? BACKSTAGE_SESSION_EXPIRATION : Math.min(result.params.expires_in, BACKSTAGE_SESSION_EXPIRATION); - const response: OAuthResponse = { + return { providerInfo: { - idToken: result.params.id_token, accessToken: result.accessToken, scope: result.params.scope, expiresInSeconds, + ...{ idToken: result.params.id_token }, }, profile, + ...(result.fullProfile && + this.signInResolver && { + backstageIdentity: await this.signInResolver( + { result: result as OAuthResult, profile }, + this.resolverContext, + ), + }), }; - - if (this.signInResolver) { - response.backstageIdentity = await this.signInResolver( - { - result, - profile, - }, - this.resolverContext, - ); - } - - return response; } private async getUserPhoto(accessToken: string): Promise { @@ -236,7 +264,7 @@ export const microsoft = createAuthProviderIntegration({ const authHandler: AuthHandler = options?.authHandler ? options.authHandler : async ({ fullProfile, params }) => ({ - profile: makeProfileInfo(fullProfile, params.id_token), + profile: makeProfileInfo(fullProfile ?? {}, params.id_token), }); const provider = new MicrosoftAuthProvider({ From c5a12022d88d63e52e78c4a847fabeba02330988 Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Wed, 8 Feb 2023 15:26:20 -0500 Subject: [PATCH 063/137] refactor MicrosoftAuth to allow overriding some behaviors in subsequent commits Signed-off-by: Jamie Klassen --- packages/core-app-api/api-report.md | 19 +++++ .../auth/microsoft/MicrosoftAuth.ts | 75 ++++++++++++++++--- 2 files changed, 85 insertions(+), 9 deletions(-) diff --git a/packages/core-app-api/api-report.md b/packages/core-app-api/api-report.md index d7e4a22873..f2df03d806 100644 --- a/packages/core-app-api/api-report.md +++ b/packages/core-app-api/api-report.md @@ -442,6 +442,25 @@ export class LocalStorageFeatureFlags implements FeatureFlagsApi { export class MicrosoftAuth { // (undocumented) static create(options: OAuthApiCreateOptions): typeof microsoftAuthApiRef.T; + // (undocumented) + getAccessToken( + scope?: string | string[], + options?: AuthRequestOptions, + ): Promise; + // (undocumented) + getBackstageIdentity( + options?: AuthRequestOptions, + ): Promise; + // (undocumented) + getIdToken(options?: AuthRequestOptions): Promise; + // (undocumented) + getProfile(options?: AuthRequestOptions): Promise; + // (undocumented) + sessionState$(): Observable; + // (undocumented) + signIn(): Promise; + // (undocumented) + signOut(): Promise; } // @public diff --git a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts index 30cfde7c6e..3f08ecaac7 100644 --- a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts @@ -14,7 +14,13 @@ * limitations under the License. */ -import { microsoftAuthApiRef } from '@backstage/core-plugin-api'; +import { + microsoftAuthApiRef, + AuthRequestOptions, + AuthProviderInfo, + DiscoveryApi, + OAuthRequestApi, +} from '@backstage/core-plugin-api'; import { OAuth2 } from '../oauth2'; import { OAuthApiCreateOptions } from '../types'; @@ -30,7 +36,18 @@ const DEFAULT_PROVIDER = { * @public */ export default class MicrosoftAuth { + private oauth2: Record; + private environment: string; + private provider: AuthProviderInfo; + private oauthRequestApi: OAuthRequestApi; + private discoveryApi: DiscoveryApi; + + private static MicrosoftGraphID = '00000003-0000-0000-c000-000000000000'; + static create(options: OAuthApiCreateOptions): typeof microsoftAuthApiRef.T { + return new MicrosoftAuth(options); + } + private constructor(options: OAuthApiCreateOptions) { const { configApi, environment = 'development', @@ -46,13 +63,53 @@ export default class MicrosoftAuth { ], } = options; - return OAuth2.create({ - configApi, - discoveryApi, - oauthRequestApi, - provider, - environment, - defaultScopes, - }); + this.configApi = configApi; + this.environment = environment; + this.provider = provider; + this.oauthRequestApi = oauthRequestApi; + this.discoveryApi = discoveryApi; + + this.oauth2 = { + [MicrosoftAuth.MicrosoftGraphID]: OAuth2.create({ + configApi: this.configApi, + discoveryApi: this.discoveryApi, + oauthRequestApi: this.oauthRequestApi, + provider: this.provider, + environment: this.environment, + defaultScopes, + }), + }; + } + + private microsoftGraph(): OAuth2 { + return this.oauth2[MicrosoftAuth.MicrosoftGraphID]; + } + + getAccessToken(scope?: string | string[], options?: AuthRequestOptions) { + return this.microsoftGraph().getAccessToken(scope, options); + } + + getIdToken(options?: AuthRequestOptions) { + return this.microsoftGraph().getIdToken(options); + } + + getProfile(options?: AuthRequestOptions) { + return this.microsoftGraph().getProfile(options); + } + + getBackstageIdentity(options?: AuthRequestOptions) { + return this.microsoftGraph().getBackstageIdentity(options); + } + + signIn() { + return this.microsoftGraph().signIn(); + } + + signOut() { + return this.microsoftGraph().signOut(); + } + + sessionState$() { + return this.microsoftGraph().sessionState$(); } } From 000cbcc99a448c19bba369c196bef8e6ed9c5dda Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Thu, 9 Feb 2023 18:24:24 -0500 Subject: [PATCH 064/137] can get non-microsoft graph tokens via popup These tokens will need to be requested on demand with a popup every time: Azure does allow you to get a refresh token from its `/token` endpoint for a set of Microsoft Graph scopes and use that refresh token to get access tokens for other resources, but our session manager isn't quite subtle enough to handle use cases like that yet. Signed-off-by: Jamie Klassen --- .../auth/microsoft/MicrosoftAuth.test.ts | 178 ++++++++++++++++++ .../auth/microsoft/MicrosoftAuth.ts | 54 +++++- 2 files changed, 229 insertions(+), 3 deletions(-) create mode 100644 packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.test.ts diff --git a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.test.ts b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.test.ts new file mode 100644 index 0000000000..e2aedbc9b4 --- /dev/null +++ b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.test.ts @@ -0,0 +1,178 @@ +/* + * Copyright 2023 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 MicrosoftAuth from './MicrosoftAuth'; +import MockOAuthApi from '../../OAuthRequestApi/MockOAuthApi'; +import { UrlPatternDiscovery } from '../../DiscoveryApi'; +import { ConfigReader } from '@backstage/config'; +import { microsoftAuthApiRef } from '@backstage/core-plugin-api'; +import { setupRequestMockHandlers } from '@backstage/test-utils'; +import { setupServer } from 'msw/node'; +import { rest } from 'msw'; + +describe('MicrosoftAuth', () => { + const server = setupServer(); + setupRequestMockHandlers(server); + const microsoftAuth = MicrosoftAuth.create({ + configApi: new ConfigReader(undefined), + oauthRequestApi: new MockOAuthApi(), + discoveryApi: UrlPatternDiscovery.compile( + 'http://backstage.test/api/{{ pluginId }}', + ), + }); + + const toHaveJWTClaims = function toHaveJWTClaims( + this: jest.MatcherContext, + received: string, + expected: Record, + ): jest.CustomMatcherResult { + let parsedClaims: Record; + try { + parsedClaims = JSON.parse( + Buffer.from(received.split('.')[1], 'base64').toString(), + ); + } catch (e) { + return { + pass: false, + message: () => + `Expected JWT with claims: ${this.utils.printExpected( + expected, + )}\nReceived invalid JWT ${this.utils.printReceived( + received, + )}\nError: ${e}`, + }; + } + const expectedResult = expect.objectContaining(expected); + return { + pass: this.equals(parsedClaims, expectedResult), + message: () => + `Expected JWT with claims: ${this.utils.printExpected( + expected, + )}\nReceived JWT with claims: ${this.utils.printReceived( + parsedClaims, + )}\n\n${this.utils.diff(expectedResult, parsedClaims)}`, + }; + }; + expect.extend({ toHaveJWTClaims }); + + describe('with a refresh token', () => { + beforeEach(() => { + server.use( + rest.get( + 'http://backstage.test/api/auth/microsoft/refresh', + (req, res, ctx) => { + const scope = + req.url.searchParams.get('scope') || + 'openid profile email User.Read'; + return res( + ctx.json({ + providerInfo: { + accessToken: `header.${Buffer.from( + JSON.stringify({ + aud: '00000003-0000-0000-c000-000000000000', + scp: 'openid profile email User.Read', + }), + ).toString('base64')}.signature`, + scope, + }, + }), + ); + }, + ), + ); + }); + + it('gets access token for Microsoft Graph', async () => { + const accessToken = await microsoftAuth.getAccessToken(); + + expect(accessToken).toHaveJWTClaims({ + aud: '00000003-0000-0000-c000-000000000000', + scp: 'openid profile email User.Read', + }); + }); + }); + + describe('without a refresh token', () => { + let mockRequester: jest.Mock; + let sut: typeof microsoftAuthApiRef.T; + + beforeEach(() => { + mockRequester = jest.fn(); + sut = MicrosoftAuth.create({ + configApi: new ConfigReader(undefined), + oauthRequestApi: { + createAuthRequester: jest.fn().mockReturnValue(mockRequester), + authRequest$: jest.fn(), + }, + discoveryApi: UrlPatternDiscovery.compile( + 'http://backstage.test/api/{{ pluginId }}', + ), + }); + server.use( + rest.get( + 'http://backstage.test/api/auth/microsoft/refresh', + (_, res, ctx) => { + return res( + ctx.status(401), + ctx.json({ + error: { + name: 'AuthenticationError', + message: + 'Refresh failed; caused by InputError: Missing session cookie', + cause: { + name: 'InputError', + message: 'Missing session cookie', + }, + }, + request: { + method: 'GET', + url: '/api/auth/microsoft/refresh?env=development', + }, + response: { + statusCode: 401, + }, + }), + ); + }, + ), + ); + }); + + it('gets access token for Microsoft Graph via popup', async () => { + await sut.getAccessToken(); + + expect(mockRequester).toHaveBeenCalledWith( + new Set(['User.Read', 'email', 'offline_access', 'openid', 'profile']), + ); + }); + + it('gets access token for other azure resources via popup', async () => { + await sut.getAccessToken('azure-resource/scope'); + + expect(mockRequester).toHaveBeenCalledWith( + new Set(['azure-resource/scope']), + ); + }); + + it('requests scopes for resource ID when scope contains a resource URI', async () => { + await sut.getAccessToken('api://customApiClientId/some.scope'); + + expect(mockRequester).toHaveBeenCalledWith( + new Set(['api://customApiClientId/some.scope']), + ); + }); + }); +}); diff --git a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts index 3f08ecaac7..1b2fc20f37 100644 --- a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts @@ -18,6 +18,7 @@ import { microsoftAuthApiRef, AuthRequestOptions, AuthProviderInfo, + ConfigApi, DiscoveryApi, OAuthRequestApi, } from '@backstage/core-plugin-api'; @@ -36,7 +37,8 @@ const DEFAULT_PROVIDER = { * @public */ export default class MicrosoftAuth { - private oauth2: Record; + private oauth2: { [aud: string]: OAuth2 }; + private configApi: ConfigApi | undefined; private environment: string; private provider: AuthProviderInfo; private oauthRequestApi: OAuthRequestApi; @@ -85,8 +87,54 @@ export default class MicrosoftAuth { return this.oauth2[MicrosoftAuth.MicrosoftGraphID]; } - getAccessToken(scope?: string | string[], options?: AuthRequestOptions) { - return this.microsoftGraph().getAccessToken(scope, options); + private static resourceForScopes(scope: string): Promise { + const audience = + scope + .split(' ') + .map(MicrosoftAuth.resourceForScope) + .find(aud => aud !== 'openid') ?? MicrosoftAuth.MicrosoftGraphID; + return Promise.resolve(audience); + } + + private static resourceForScope(scope: string): string { + const groups = scope.match(/^(?.*)\/(?[^\/]*)$/)?.groups; + if (groups) { + const { resourceURI } = groups; + const aud = resourceURI.replace(/^api:\/\//, ''); + return aud; + } + switch (scope) { + case 'email': + case 'openid': + case 'offline_access': + case 'profile': { + return 'openid'; + } + default: + return MicrosoftAuth.MicrosoftGraphID; + } + } + + async getAccessToken( + scope?: string | string[], + options?: AuthRequestOptions, + ): Promise { + const aud = + scope === undefined + ? MicrosoftAuth.MicrosoftGraphID + : await MicrosoftAuth.resourceForScopes( + Array.isArray(scope) ? scope.join(' ') : scope, + ); + if (!(aud in this.oauth2)) { + this.oauth2[aud] = OAuth2.create({ + configApi: this.configApi, + discoveryApi: this.discoveryApi, + oauthRequestApi: this.oauthRequestApi, + provider: this.provider, + environment: this.environment, + }); + } + return this.oauth2[aud].getAccessToken(scope, options); } getIdToken(options?: AuthRequestOptions) { From c15e0cedbe1981ccbe29bba83524d30b5357f74f Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Mon, 13 Feb 2023 11:50:04 -0500 Subject: [PATCH 065/137] can get non-microsoft graph tokens via refresh Next up will be to make it possible to _request_ refreshable tokens via `getAccessToken`, accounting for the fact that the `offline_access` scope does not appear in the auth-backend response when it is requested -- instead the response has a set-cookie header. Signed-off-by: Jamie Klassen --- .changeset/sixty-insects-visit.md | 9 +++ .../auth/microsoft/MicrosoftAuth.test.ts | 66 +++++-------------- .../DefaultAuthConnector.test.ts | 34 +++++----- .../lib/AuthConnector/DefaultAuthConnector.ts | 7 +- .../src/lib/AuthConnector/types.ts | 2 +- .../RefreshingAuthSessionManager.test.ts | 6 +- .../RefreshingAuthSessionManager.ts | 10 +-- 7 files changed, 57 insertions(+), 77 deletions(-) create mode 100644 .changeset/sixty-insects-visit.md diff --git a/.changeset/sixty-insects-visit.md b/.changeset/sixty-insects-visit.md new file mode 100644 index 0000000000..adbe27e0ac --- /dev/null +++ b/.changeset/sixty-insects-visit.md @@ -0,0 +1,9 @@ +--- +'@backstage/core-app-api': minor +--- + +The `AuthConnector` interface now supports specifying a set of scopes when +refreshing a session. The `DefaultAuthConnector` implementation passes the +`scope` query parameter to the auth-backend plugin appropriately. The +`RefreshingAuthSessionManager` passes any scopes in its `GetSessionRequest` +appropriately. diff --git a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.test.ts b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.test.ts index e2aedbc9b4..61a0a5b64a 100644 --- a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.test.ts +++ b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.test.ts @@ -34,59 +34,20 @@ describe('MicrosoftAuth', () => { ), }); - const toHaveJWTClaims = function toHaveJWTClaims( - this: jest.MatcherContext, - received: string, - expected: Record, - ): jest.CustomMatcherResult { - let parsedClaims: Record; - try { - parsedClaims = JSON.parse( - Buffer.from(received.split('.')[1], 'base64').toString(), - ); - } catch (e) { - return { - pass: false, - message: () => - `Expected JWT with claims: ${this.utils.printExpected( - expected, - )}\nReceived invalid JWT ${this.utils.printReceived( - received, - )}\nError: ${e}`, - }; - } - const expectedResult = expect.objectContaining(expected); - return { - pass: this.equals(parsedClaims, expectedResult), - message: () => - `Expected JWT with claims: ${this.utils.printExpected( - expected, - )}\nReceived JWT with claims: ${this.utils.printReceived( - parsedClaims, - )}\n\n${this.utils.diff(expectedResult, parsedClaims)}`, - }; - }; - expect.extend({ toHaveJWTClaims }); - describe('with a refresh token', () => { beforeEach(() => { server.use( rest.get( 'http://backstage.test/api/auth/microsoft/refresh', - (req, res, ctx) => { - const scope = - req.url.searchParams.get('scope') || - 'openid profile email User.Read'; + async (req, res, ctx) => { + const scopeParam = req.url.searchParams.get('scope'); return res( ctx.json({ providerInfo: { - accessToken: `header.${Buffer.from( - JSON.stringify({ - aud: '00000003-0000-0000-c000-000000000000', - scp: 'openid profile email User.Read', - }), - ).toString('base64')}.signature`, - scope, + accessToken: scopeParam + ? 'tokenForOtherResource' + : 'tokenForGrantScopes', + scope: scopeParam || 'grant-resource/scope', }, }), ); @@ -95,13 +56,18 @@ describe('MicrosoftAuth', () => { ); }); - it('gets access token for Microsoft Graph', async () => { + it('gets access token with requested scopes for grant', async () => { const accessToken = await microsoftAuth.getAccessToken(); - expect(accessToken).toHaveJWTClaims({ - aud: '00000003-0000-0000-c000-000000000000', - scp: 'openid profile email User.Read', - }); + expect(accessToken).toEqual('tokenForGrantScopes'); + }); + + it('gets access token for other consented scopes besides those directly granted', async () => { + const accessToken = await microsoftAuth.getAccessToken( + 'azure-resource/scope', + ); + + expect(accessToken).toEqual('tokenForOtherResource'); }); }); diff --git a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts index 51da9cbfb5..c46e87581f 100644 --- a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts +++ b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts @@ -59,22 +59,22 @@ describe('DefaultAuthConnector', () => { jest.resetAllMocks(); }); - it('should refresh a session', async () => { + it('should refresh a session with scope', async () => { server.use( - rest.get('*', (_req, res, ctx) => + rest.get('*', (req, res, ctx) => res( ctx.json({ idToken: 'mock-id-token', accessToken: 'mock-access-token', - scopes: 'a b c', + scopes: req.url.searchParams.get('scope') || 'default-scope', expiresInSeconds: '60', }), ), ), ); - const helper = new DefaultAuthConnector(defaultOptions); - const session = await helper.refreshSession(); + const connector = new DefaultAuthConnector(defaultOptions); + const session = await connector.refreshSession(new Set(['a', 'b', 'c'])); expect(session.idToken).toBe('mock-id-token'); expect(session.accessToken).toBe('mock-access-token'); expect(session.scopes).toEqual(new Set(['a', 'b', 'c'])); @@ -89,8 +89,8 @@ describe('DefaultAuthConnector', () => { ), ); - const helper = new DefaultAuthConnector(defaultOptions); - await expect(helper.refreshSession()).rejects.toThrow( + const connector = new DefaultAuthConnector(defaultOptions); + await expect(connector.refreshSession()).rejects.toThrow( 'Auth refresh request failed, Error: Network NOPE', ); }); @@ -98,19 +98,19 @@ describe('DefaultAuthConnector', () => { it('should handle failure response when refreshing session', async () => { server.use(rest.get('*', (_req, res, ctx) => res(ctx.status(401, 'NOPE')))); - const helper = new DefaultAuthConnector(defaultOptions); - await expect(helper.refreshSession()).rejects.toThrow( + const connector = new DefaultAuthConnector(defaultOptions); + await expect(connector.refreshSession()).rejects.toThrow( 'Auth refresh request failed, NOPE', ); }); it('should fail if popup was rejected', async () => { const mockOauth = new MockOAuthApi(); - const helper = new DefaultAuthConnector({ + const connector = new DefaultAuthConnector({ ...defaultOptions, oauthRequestApi: mockOauth, }); - const promise = helper.createSession({ scopes: new Set(['a', 'b']) }); + const promise = connector.createSession({ scopes: new Set(['a', 'b']) }); await mockOauth.rejectAll(); await expect(promise).rejects.toMatchObject({ name: 'RejectedError' }); }); @@ -125,12 +125,12 @@ describe('DefaultAuthConnector', () => { scopes: 'a b', expiresInSeconds: 3600, }); - const helper = new DefaultAuthConnector({ + const connector = new DefaultAuthConnector({ ...defaultOptions, oauthRequestApi: mockOauth, }); - const sessionPromise = helper.createSession({ + const sessionPromise = connector.createSession({ scopes: new Set(['a', 'b']), }); @@ -153,13 +153,13 @@ describe('DefaultAuthConnector', () => { const popupSpy = jest .spyOn(loginPopup, 'showLoginPopup') .mockResolvedValue('my-session'); - const helper = new DefaultAuthConnector({ + const connector = new DefaultAuthConnector({ ...defaultOptions, oauthRequestApi: new MockOAuthApi(), sessionTransform: str => str, }); - const sessionPromise = helper.createSession({ + const sessionPromise = connector.createSession({ scopes: new Set(), instantPopup: true, }); @@ -174,13 +174,13 @@ describe('DefaultAuthConnector', () => { const popupSpy = jest .spyOn(loginPopup, 'showLoginPopup') .mockResolvedValue({ scopes: '' }); - const helper = new DefaultAuthConnector({ + const connector = new DefaultAuthConnector({ ...defaultOptions, joinScopes: scopes => `-${[...scopes].join('')}-`, oauthRequestApi: mockOauth, }); - helper.createSession({ scopes: new Set(['a', 'b']) }); + connector.createSession({ scopes: new Set(['a', 'b']) }); await mockOauth.triggerAll(); diff --git a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts index f2c35b0ba3..728ed3878c 100644 --- a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts +++ b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts @@ -126,9 +126,12 @@ export class DefaultAuthConnector return this.authRequester(options.scopes); } - async refreshSession(): Promise { + async refreshSession(scopes?: Set): Promise { const res = await fetch( - await this.buildUrl('/refresh', { optional: true }), + await this.buildUrl('/refresh', { + optional: true, + ...(scopes && { scope: this.joinScopesFunc(scopes) }), + }), { headers: { 'x-requested-with': 'XMLHttpRequest', diff --git a/packages/core-app-api/src/lib/AuthConnector/types.ts b/packages/core-app-api/src/lib/AuthConnector/types.ts index 464a2ed627..c8e83e1ccc 100644 --- a/packages/core-app-api/src/lib/AuthConnector/types.ts +++ b/packages/core-app-api/src/lib/AuthConnector/types.ts @@ -25,6 +25,6 @@ export type CreateSessionOptions = { */ export type AuthConnector = { createSession(options: CreateSessionOptions): Promise; - refreshSession(): Promise; + refreshSession(scopes?: Set): Promise; removeSession(): Promise; }; diff --git a/packages/core-app-api/src/lib/AuthSessionManager/RefreshingAuthSessionManager.test.ts b/packages/core-app-api/src/lib/AuthSessionManager/RefreshingAuthSessionManager.test.ts index a94aca85f8..23432856cb 100644 --- a/packages/core-app-api/src/lib/AuthSessionManager/RefreshingAuthSessionManager.test.ts +++ b/packages/core-app-api/src/lib/AuthSessionManager/RefreshingAuthSessionManager.test.ts @@ -47,7 +47,7 @@ describe('RefreshingAuthSessionManager', () => { await manager.getSession({}); expect(createSession).toHaveBeenCalledTimes(1); - expect(refreshSession).toHaveBeenCalledTimes(1); + expect(refreshSession).toHaveBeenCalledWith(undefined); expect(stateSubscriber.mock.calls).toEqual([ [SessionState.SignedOut], [SessionState.SignedIn], @@ -103,7 +103,7 @@ describe('RefreshingAuthSessionManager', () => { await manager.getSession({ scopes: new Set(['a']) }); expect(createSession).toHaveBeenCalledTimes(1); - expect(refreshSession).toHaveBeenCalledTimes(1); + expect(refreshSession).toHaveBeenCalledWith(new Set(['a'])); await manager.getSession({ scopes: new Set(['a']) }); expect(createSession).toHaveBeenCalledTimes(1); @@ -134,7 +134,7 @@ describe('RefreshingAuthSessionManager', () => { expect(await manager.getSession({ optional: true })).toBe(undefined); expect(createSession).toHaveBeenCalledTimes(0); - expect(refreshSession).toHaveBeenCalledTimes(1); + expect(refreshSession).toHaveBeenCalledWith(undefined); }); it('should forward option to instantly show auth popup and not attempt refresh', async () => { diff --git a/packages/core-app-api/src/lib/AuthSessionManager/RefreshingAuthSessionManager.ts b/packages/core-app-api/src/lib/AuthSessionManager/RefreshingAuthSessionManager.ts index 67d83bb36a..c04eb637de 100644 --- a/packages/core-app-api/src/lib/AuthSessionManager/RefreshingAuthSessionManager.ts +++ b/packages/core-app-api/src/lib/AuthSessionManager/RefreshingAuthSessionManager.ts @@ -73,7 +73,9 @@ export class RefreshingAuthSessionManager implements SessionManager { } try { - const refreshedSession = await this.collapsedSessionRefresh(); + const refreshedSession = await this.collapsedSessionRefresh( + options.scopes, + ); const currentScopes = this.sessionScopesFunc(this.currentSession!); const refreshedScopes = this.sessionScopesFunc(refreshedSession); if (hasScopes(refreshedScopes, currentScopes)) { @@ -97,7 +99,7 @@ export class RefreshingAuthSessionManager implements SessionManager { // already had an existing session. if (!this.currentSession && !options.instantPopup) { try { - const newSession = await this.collapsedSessionRefresh(); + const newSession = await this.collapsedSessionRefresh(options.scopes); this.currentSession = newSession; // The session might not have the scopes requested so go back and check again return this.getSession(options); @@ -130,12 +132,12 @@ export class RefreshingAuthSessionManager implements SessionManager { return this.stateTracker.sessionState$(); } - private async collapsedSessionRefresh(): Promise { + private async collapsedSessionRefresh(scopes?: Set): Promise { if (this.refreshPromise) { return this.refreshPromise; } - this.refreshPromise = this.connector.refreshSession(); + this.refreshPromise = this.connector.refreshSession(scopes); try { const session = await this.refreshPromise; From 01e6d459e2906c9b92b83d359e21223e1a34a279 Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Mon, 13 Feb 2023 22:13:40 -0500 Subject: [PATCH 066/137] MicrosoftAuth automatically gets refresh tokens Signed-off-by: Jamie Klassen --- .changeset/mighty-tips-flow.md | 5 +++++ packages/core-app-api/api-report.md | 2 +- .../auth/microsoft/MicrosoftAuth.test.ts | 6 +++--- .../implementations/auth/microsoft/MicrosoftAuth.ts | 12 ++++++++---- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/.changeset/mighty-tips-flow.md b/.changeset/mighty-tips-flow.md index d876942fde..514d514588 100644 --- a/.changeset/mighty-tips-flow.md +++ b/.changeset/mighty-tips-flow.md @@ -9,3 +9,8 @@ authorization code for a non-Microsoft Graph scope, the user profile will not be fetched. Similarly no user profile or photo data will be fetched by the backend if the `/refresh` endpoint is called with the `scope` query parameter strictly containing scopes for resources besides Microsoft Graph. + +Furthermore, the `offline_access` scope will be requested by default, even when +it is not mentioned in the argument to `getAccessToken`. This means that any +Azure access token can be automatically refreshed, even if the user has not +signed in via Azure. diff --git a/packages/core-app-api/api-report.md b/packages/core-app-api/api-report.md index f2df03d806..4ce4533fe1 100644 --- a/packages/core-app-api/api-report.md +++ b/packages/core-app-api/api-report.md @@ -441,7 +441,7 @@ export class LocalStorageFeatureFlags implements FeatureFlagsApi { // @public export class MicrosoftAuth { // (undocumented) - static create(options: OAuthApiCreateOptions): typeof microsoftAuthApiRef.T; + static create(options: OAuth2CreateOptions): typeof microsoftAuthApiRef.T; // (undocumented) getAccessToken( scope?: string | string[], diff --git a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.test.ts b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.test.ts index 61a0a5b64a..0d2e016b41 100644 --- a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.test.ts +++ b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.test.ts @@ -125,11 +125,11 @@ describe('MicrosoftAuth', () => { ); }); - it('gets access token for other azure resources via popup', async () => { + it('gets access + refresh token for other azure resources via popup', async () => { await sut.getAccessToken('azure-resource/scope'); expect(mockRequester).toHaveBeenCalledWith( - new Set(['azure-resource/scope']), + new Set(['azure-resource/scope', 'offline_access']), ); }); @@ -137,7 +137,7 @@ describe('MicrosoftAuth', () => { await sut.getAccessToken('api://customApiClientId/some.scope'); expect(mockRequester).toHaveBeenCalledWith( - new Set(['api://customApiClientId/some.scope']), + new Set(['api://customApiClientId/some.scope', 'offline_access']), ); }); }); diff --git a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts index 1b2fc20f37..fa74979c6b 100644 --- a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts @@ -22,8 +22,7 @@ import { DiscoveryApi, OAuthRequestApi, } from '@backstage/core-plugin-api'; -import { OAuth2 } from '../oauth2'; -import { OAuthApiCreateOptions } from '../types'; +import { OAuth2, OAuth2CreateOptions } from '../oauth2'; const DEFAULT_PROVIDER = { id: 'microsoft', @@ -43,13 +42,14 @@ export default class MicrosoftAuth { private provider: AuthProviderInfo; private oauthRequestApi: OAuthRequestApi; private discoveryApi: DiscoveryApi; + private scopeTransform: (scopes: string[]) => string[]; private static MicrosoftGraphID = '00000003-0000-0000-c000-000000000000'; - static create(options: OAuthApiCreateOptions): typeof microsoftAuthApiRef.T { + static create(options: OAuth2CreateOptions): typeof microsoftAuthApiRef.T { return new MicrosoftAuth(options); } - private constructor(options: OAuthApiCreateOptions) { + private constructor(options: OAuth2CreateOptions) { const { configApi, environment = 'development', @@ -63,6 +63,7 @@ export default class MicrosoftAuth { 'email', 'User.Read', ], + scopeTransform = scopes => scopes.concat('offline_access'), } = options; this.configApi = configApi; @@ -70,6 +71,7 @@ export default class MicrosoftAuth { this.provider = provider; this.oauthRequestApi = oauthRequestApi; this.discoveryApi = discoveryApi; + this.scopeTransform = scopeTransform; this.oauth2 = { [MicrosoftAuth.MicrosoftGraphID]: OAuth2.create({ @@ -78,6 +80,7 @@ export default class MicrosoftAuth { oauthRequestApi: this.oauthRequestApi, provider: this.provider, environment: this.environment, + scopeTransform: this.scopeTransform, defaultScopes, }), }; @@ -132,6 +135,7 @@ export default class MicrosoftAuth { oauthRequestApi: this.oauthRequestApi, provider: this.provider, environment: this.environment, + scopeTransform: this.scopeTransform, }); } return this.oauth2[aud].getAccessToken(scope, options); From 85adf6943b8c756fe44a34fa2577d8109ad81077 Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Fri, 17 Mar 2023 17:33:35 -0400 Subject: [PATCH 067/137] fail multi-resource access token requests The emphasis on the word 'erroneously' in [this doc](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/ef0a1ae38249ba2cf6ec5d75731e711a6ae62cba/lib/msal-browser/docs/resources-and-scopes.md?plain=1#L36) makes this behaviour pretty compelling. Signed-off-by: Jamie Klassen --- .../auth/microsoft/MicrosoftAuth.test.ts | 10 ++++++++++ .../auth/microsoft/MicrosoftAuth.ts | 19 ++++++++++++++----- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.test.ts b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.test.ts index 0d2e016b41..c71799ed98 100644 --- a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.test.ts +++ b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.test.ts @@ -69,6 +69,16 @@ describe('MicrosoftAuth', () => { expect(accessToken).toEqual('tokenForOtherResource'); }); + + it('fails when requesting scopes for multiple resources at once', async () => { + const accessTokenPromise = microsoftAuth.getAccessToken( + 'one-resource/scope other-resource/scope', + ); + + await expect(accessTokenPromise).rejects.toThrow( + 'Requested access token with scopes from multiple Azure resources: one-resource, other-resource. Access tokens can only have a single audience.', + ); + }); }); describe('without a refresh token', () => { diff --git a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts index fa74979c6b..fdffb3fc45 100644 --- a/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts +++ b/packages/core-app-api/src/apis/implementations/auth/microsoft/MicrosoftAuth.ts @@ -91,11 +91,20 @@ export default class MicrosoftAuth { } private static resourceForScopes(scope: string): Promise { - const audience = - scope - .split(' ') - .map(MicrosoftAuth.resourceForScope) - .find(aud => aud !== 'openid') ?? MicrosoftAuth.MicrosoftGraphID; + const audiences = scope + .split(' ') + .map(MicrosoftAuth.resourceForScope) + .filter(aud => aud !== 'openid'); + if (audiences.length > 1) { + return Promise.reject( + new Error( + `Requested access token with scopes from multiple Azure resources: ${audiences.join( + ', ', + )}. Access tokens can only have a single audience.`, + ), + ); + } + const audience = audiences[0] ?? MicrosoftAuth.MicrosoftGraphID; return Promise.resolve(audience); } From 19b5c20aaff14bada9748c2b9366990aa4fb3ba0 Mon Sep 17 00:00:00 2001 From: David Weber Date: Mon, 27 Mar 2023 07:19:04 +0200 Subject: [PATCH 068/137] feat: add api spectral linter plugin to market Signed-off-by: David Weber --- microsite/data/plugins/api-spectral-linter.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 microsite/data/plugins/api-spectral-linter.yaml diff --git a/microsite/data/plugins/api-spectral-linter.yaml b/microsite/data/plugins/api-spectral-linter.yaml new file mode 100644 index 0000000000..292279e324 --- /dev/null +++ b/microsite/data/plugins/api-spectral-linter.yaml @@ -0,0 +1,10 @@ +--- +title: API Spectral Linter +author: dweber019 +authorUrl: https://github.com/dweber019 +category: Linting +description: API Spectral Linter is a quality assurance tool that checks the compliance of API's specifications Spectral rule sets. +documentation: https://github.com/dweber019/backstage-plugin-api-docs-spectral-linter +iconUrl: https://raw.githubusercontent.com/dweber019/backstage-plugin-api-docs-spectral-linter/main/plugins/api-docs-spectral-linter/docs/pluginIcon.png +npmPackageName: '@dweber019/backstage-plugin-api-docs-spectral-linter' +addedDate: '2023-03-27' From d3364e5a04029f19fc1fb4d39b9acd6c87a5cec1 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Tue, 28 Mar 2023 09:51:40 -0400 Subject: [PATCH 069/137] feat(circleci): Add hover to avatar icon Signed-off-by: Adam Harvey --- .../components/BuildsPage/lib/CITable/CITable.tsx | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/plugins/circleci/src/components/BuildsPage/lib/CITable/CITable.tsx b/plugins/circleci/src/components/BuildsPage/lib/CITable/CITable.tsx index 22f69ac30f..82ee144a24 100644 --- a/plugins/circleci/src/components/BuildsPage/lib/CITable/CITable.tsx +++ b/plugins/circleci/src/components/BuildsPage/lib/CITable/CITable.tsx @@ -21,6 +21,7 @@ import { Box, IconButton, makeStyles, + Tooltip, } from '@material-ui/core'; import RetryIcon from '@material-ui/icons/Replay'; import GitHubIcon from '@material-ui/icons/GitHub'; @@ -116,7 +117,13 @@ const SourceInfo = ({ build }: { build: CITableBuildInfo }) => { return ( - + + + {source?.branchName} @@ -217,7 +224,11 @@ const generatedColumns: TableColumn[] = [ - {row?.workflow?.name} + + + + {row?.workflow?.name} + ), }, From 5b1eb586dd08592fb0a6a25dd01728c06f42ab1e Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Tue, 28 Mar 2023 09:52:00 -0400 Subject: [PATCH 070/137] chore: Link feature enhancements Signed-off-by: Adam Harvey --- plugins/circleci/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/circleci/README.md b/plugins/circleci/README.md index 014a2a3f99..f468ab37e2 100644 --- a/plugins/circleci/README.md +++ b/plugins/circleci/README.md @@ -74,4 +74,4 @@ spec: ## Limitations - CircleCI has pretty strict rate limits per token, be careful with opened tabs -- CircleCI doesn't provide a way to auth by 3rd party (e.g. GitHub) token, nor by calling their OAuth endpoints, which currently stands in the way of better auth integration with Backstage (https://discuss.circleci.com/t/circleci-api-authorization-with-github-token/5356) +- CircleCI doesn't provide a way to auth by 3rd party (e.g. GitHub) token, nor by calling their OAuth endpoints, which currently stands in the way of better auth integration with Backstage (reference [feature request](https://ideas.circleci.com/api-feature-requests/p/allow-circleci-api-calls-using-github-auth) and [discussion topic](https://discuss.circleci.com/t/circleci-api-authorization-with-github-token/5356)) From d14ac997c367538b07a22fc76f38af88537d8206 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Tue, 28 Mar 2023 09:54:10 -0400 Subject: [PATCH 071/137] chore: Add changeset Signed-off-by: Adam Harvey --- .changeset/clean-items-draw.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/clean-items-draw.md diff --git a/.changeset/clean-items-draw.md b/.changeset/clean-items-draw.md new file mode 100644 index 0000000000..0dafb41265 --- /dev/null +++ b/.changeset/clean-items-draw.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-circleci': patch +--- + +Add hover over CircleCI avatar icon to show user name in builds table From b3388961885de4bb5e01fdd4f1e34f1ddea753b7 Mon Sep 17 00:00:00 2001 From: Tim Hansen Date: Tue, 28 Mar 2023 10:46:40 -0600 Subject: [PATCH 072/137] Fix copypasta in events-backend-module-azure Signed-off-by: Tim Hansen --- plugins/events-backend-module-azure/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/events-backend-module-azure/README.md b/plugins/events-backend-module-azure/README.md index d16315b6e7..214c00e2fd 100644 --- a/plugins/events-backend-module-azure/README.md +++ b/plugins/events-backend-module-azure/README.md @@ -34,10 +34,10 @@ yarn add --cwd packages/backend @backstage/plugin-events-backend-module-azure Add the event router to the `EventsBackend`: ```diff -+const githubEventRouter = new AzureDevOpsEventRouter(); ++const azureEventRouter = new AzureDevOpsEventRouter(); EventsBackend -+ .addPublishers(githubEventRouter) -+ .addSubscribers(githubEventRouter); ++ .addPublishers(azureEventRouter) ++ .addSubscribers(azureEventRouter); // [...] ``` From 9a3c18fb2a81370511279ffce4888f06b6bca42e Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Wed, 29 Mar 2023 15:08:03 +0100 Subject: [PATCH 073/137] remove deprecated LocationSpecs Signed-off-by: Brian Fletcher --- .../src/processors/AzureDevOpsDiscoveryProcessor.test.ts | 2 +- .../src/processors/AzureDevOpsDiscoveryProcessor.ts | 2 +- .../src/providers/AzureDevOpsEntityProvider.ts | 2 +- .../src/modules/core/AnnotateLocationEntityProcessor.test.ts | 2 +- .../src/modules/core/AnnotateScmSlugEntityProcessor.test.ts | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.test.ts b/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.test.ts index 0a1ec1e3cf..4a8e1d4537 100644 --- a/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.test.ts +++ b/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.test.ts @@ -16,7 +16,7 @@ import { getVoidLogger } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; -import { LocationSpec } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; import { AzureDevOpsDiscoveryProcessor, parseUrl, diff --git a/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.ts b/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.ts index fde59046ef..bad6067dc3 100644 --- a/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.ts +++ b/plugins/catalog-backend-module-azure/src/processors/AzureDevOpsDiscoveryProcessor.ts @@ -22,9 +22,9 @@ import { import { CatalogProcessor, CatalogProcessorEmit, - LocationSpec, processingResult, } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; import { Logger } from 'winston'; import { codeSearch } from '../lib'; diff --git a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts index 6ad4e9ae0b..5abd23ce00 100644 --- a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts +++ b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts @@ -20,9 +20,9 @@ import { AzureIntegration, ScmIntegrations } from '@backstage/integration'; import { EntityProvider, EntityProviderConnection, - LocationSpec, locationSpecToLocationEntity, } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; import { readAzureDevOpsConfigs } from './config'; import { Logger } from 'winston'; import { AzureDevOpsConfig } from './types'; diff --git a/plugins/catalog-backend/src/modules/core/AnnotateLocationEntityProcessor.test.ts b/plugins/catalog-backend/src/modules/core/AnnotateLocationEntityProcessor.test.ts index 228429c647..66b6300df9 100644 --- a/plugins/catalog-backend/src/modules/core/AnnotateLocationEntityProcessor.test.ts +++ b/plugins/catalog-backend/src/modules/core/AnnotateLocationEntityProcessor.test.ts @@ -17,7 +17,7 @@ import { Entity } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; import { ScmIntegrations } from '@backstage/integration'; -import { LocationSpec } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; import { AnnotateLocationEntityProcessor } from './AnnotateLocationEntityProcessor'; describe('AnnotateLocationEntityProcessor', () => { diff --git a/plugins/catalog-backend/src/modules/core/AnnotateScmSlugEntityProcessor.test.ts b/plugins/catalog-backend/src/modules/core/AnnotateScmSlugEntityProcessor.test.ts index 6154d82330..bafac6e3ac 100644 --- a/plugins/catalog-backend/src/modules/core/AnnotateScmSlugEntityProcessor.test.ts +++ b/plugins/catalog-backend/src/modules/core/AnnotateScmSlugEntityProcessor.test.ts @@ -16,7 +16,7 @@ import { Entity } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; import { AnnotateScmSlugEntityProcessor } from './AnnotateScmSlugEntityProcessor'; -import { LocationSpec } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; describe('AnnotateScmSlugEntityProcessor', () => { describe('github', () => { From 8075b67e64c7903e9e328f7242d18600fac2020b Mon Sep 17 00:00:00 2001 From: Axel Hecht Date: Mon, 6 Mar 2023 16:55:32 +0100 Subject: [PATCH 074/137] Pass configs from build:backend to app builds. Fixes #15274 When using `build:backend` with `--config` options, they're not passed down to the packaging of the FE app. Thus, that's picking up the default configs, which includes the `app-config.local.yaml`, but it's also missing the production yaml, if requested. Pass the given `configPaths` around for the backend build like the frontend build already does. Signed-off-by: Axel Hecht --- .changeset/clever-lizards-whisper.md | 5 +++++ .../cli/src/commands/build/buildBackend.ts | 4 +++- packages/cli/src/commands/build/command.ts | 1 + packages/cli/src/lib/config.ts | 2 +- .../src/lib/packager/createDistWorkspace.ts | 21 +++++++++++++++---- 5 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 .changeset/clever-lizards-whisper.md diff --git a/.changeset/clever-lizards-whisper.md b/.changeset/clever-lizards-whisper.md new file mode 100644 index 0000000000..5b5307af1f --- /dev/null +++ b/.changeset/clever-lizards-whisper.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Support building the frontend with the same set of configs as the backend. diff --git a/packages/cli/src/commands/build/buildBackend.ts b/packages/cli/src/commands/build/buildBackend.ts index 7e61f9ae85..5d42aa18d4 100644 --- a/packages/cli/src/commands/build/buildBackend.ts +++ b/packages/cli/src/commands/build/buildBackend.ts @@ -28,10 +28,11 @@ const SKELETON_FILE = 'skeleton.tar.gz'; interface BuildBackendOptions { targetDir: string; skipBuildDependencies: boolean; + configPaths?: string[]; } export async function buildBackend(options: BuildBackendOptions) { - const { targetDir, skipBuildDependencies } = options; + const { targetDir, skipBuildDependencies, configPaths } = options; const pkg = await fs.readJson(resolvePath(targetDir, 'package.json')); // We build the target package without generating type declarations. @@ -45,6 +46,7 @@ export async function buildBackend(options: BuildBackendOptions) { try { await createDistWorkspace([pkg.name], { targetDir: tmpDir, + configPaths, buildDependencies: !skipBuildDependencies, buildExcludes: [pkg.name], parallelism: getEnvironmentParallelism(), diff --git a/packages/cli/src/commands/build/command.ts b/packages/cli/src/commands/build/command.ts index fcaf58e1ee..7330d9891f 100644 --- a/packages/cli/src/commands/build/command.ts +++ b/packages/cli/src/commands/build/command.ts @@ -34,6 +34,7 @@ export async function command(opts: OptionValues): Promise { if (role === 'backend') { return buildBackend({ targetDir: paths.targetDir, + configPaths: opts.config as string[], skipBuildDependencies: Boolean(opts.skipBuildDependencies), }); } diff --git a/packages/cli/src/lib/config.ts b/packages/cli/src/lib/config.ts index a76571c3f6..c813ce59fd 100644 --- a/packages/cli/src/lib/config.ts +++ b/packages/cli/src/lib/config.ts @@ -38,7 +38,7 @@ export async function loadCliConfig(options: Options) { const configTargets: ConfigTarget[] = []; options.args.forEach(arg => { if (!isValidUrl(arg)) { - configTargets.push({ path: paths.resolveTarget(arg) }); + configTargets.push({ path: paths.resolveTargetRoot(arg) }); } }); diff --git a/packages/cli/src/lib/packager/createDistWorkspace.ts b/packages/cli/src/lib/packager/createDistWorkspace.ts index 2d2967fc44..601f442a73 100644 --- a/packages/cli/src/lib/packager/createDistWorkspace.ts +++ b/packages/cli/src/lib/packager/createDistWorkspace.ts @@ -60,6 +60,11 @@ type Options = { */ targetDir?: string; + /** + * Configuration files to load during packaging. + */ + configPaths?: string[]; + /** * Files to copy into the target workspace. * @@ -127,13 +132,18 @@ export async function createDistWorkspace( if (options.buildDependencies) { const exclude = options.buildExcludes ?? []; + const configPaths = options.configPaths ?? []; const toBuild = new Set( targets.map(_ => _.name).filter(name => !exclude.includes(name)), ); const standardBuilds = new Array(); - const customBuild = new Array<{ dir: string; name: string }>(); + const customBuild = new Array<{ + dir: string; + name: string; + args?: string[]; + }>(); for (const pkg of packages) { if (!toBuild.has(pkg.packageJson.name)) { @@ -166,7 +176,10 @@ export async function createDistWorkspace( console.warn( `Building ${pkg.packageJson.name} separately because it is a bundled package`, ); - customBuild.push({ dir: pkg.dir, name: pkg.packageJson.name }); + const args = buildScript.includes('--config') + ? [] + : configPaths.map(p => ['--config', p]).flat(); + customBuild.push({ dir: pkg.dir, name: pkg.packageJson.name, args }); continue; } @@ -193,8 +206,8 @@ export async function createDistWorkspace( if (customBuild.length > 0) { await runParallelWorkers({ items: customBuild, - worker: async ({ name, dir }) => { - await run('yarn', ['run', 'build'], { + worker: async ({ name, dir, args }) => { + await run('yarn', ['run', 'build', ...(args || [])], { cwd: dir, stdoutLogFunc: prefixLogFunc(`${name}: `, 'stdout'), stderrLogFunc: prefixLogFunc(`${name}: `, 'stderr'), From 559af0f44fbf0628047cb67d51e37b3ff36043fb Mon Sep 17 00:00:00 2001 From: Axel Hecht Date: Tue, 7 Mar 2023 10:19:42 +0100 Subject: [PATCH 075/137] Update the docs to suggest passing in the right configs. Remove old note from docker docs Signed-off-by: Axel Hecht --- docs/deployment/docker.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/docs/deployment/docker.md b/docs/deployment/docker.md index 88c22afb9b..f96204b413 100644 --- a/docs/deployment/docker.md +++ b/docs/deployment/docker.md @@ -37,10 +37,6 @@ The required steps in the host build are to install dependencies with `yarn install`, generate type definitions using `yarn tsc`, and build the backend package with `yarn build:backend`. -> NOTE: If you created your app prior to 2021-02-18, follow the -> [migration step](https://github.com/backstage/backstage/releases/tag/release-2021-02-18) -> to move from `backend:build` to `backend:bundle`. - In a CI workflow it might look something like this: ```bash @@ -50,7 +46,8 @@ yarn install --frozen-lockfile yarn tsc # Build the backend, which bundles it all up into the packages/backend/dist folder. -yarn build:backend +# The configuration files here should match the one you use inside the Dockerfile below. +yarn build:backend --config app-config.yaml ``` Once the host build is complete, we are ready to build our image. The following From 5896463fb225b6cf70d8f9e38ec25daf591f7604 Mon Sep 17 00:00:00 2001 From: Axel Hecht Date: Tue, 7 Mar 2023 10:49:42 +0100 Subject: [PATCH 076/137] Update .changeset/clever-lizards-whisper.md Co-authored-by: Patrik Oldsberg Signed-off-by: Axel Hecht --- .changeset/clever-lizards-whisper.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/clever-lizards-whisper.md b/.changeset/clever-lizards-whisper.md index 5b5307af1f..4f2820c347 100644 --- a/.changeset/clever-lizards-whisper.md +++ b/.changeset/clever-lizards-whisper.md @@ -2,4 +2,4 @@ '@backstage/cli': patch --- -Support building the frontend with the same set of configs as the backend. +When building a backend package with dependencies any `--config ` options will now be forwarded to any dependent app package builds, unless the build script in the app package already contains a `--config` option. From e9e9c7962f76131f3bf5025682612fd4b1a800e3 Mon Sep 17 00:00:00 2001 From: Axel Hecht Date: Wed, 8 Mar 2023 20:09:31 +0100 Subject: [PATCH 077/137] Resolve --config options against both current directory and monorepo root. Signed-off-by: Axel Hecht --- .changeset/chilled-bobcats-repeat.md | 5 +++++ packages/cli/src/lib/config.ts | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 .changeset/chilled-bobcats-repeat.md diff --git a/.changeset/chilled-bobcats-repeat.md b/.changeset/chilled-bobcats-repeat.md new file mode 100644 index 0000000000..572a82b589 --- /dev/null +++ b/.changeset/chilled-bobcats-repeat.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Resolve config options against both the current directory and the monorepo root directory. diff --git a/packages/cli/src/lib/config.ts b/packages/cli/src/lib/config.ts index c813ce59fd..9bb32fa481 100644 --- a/packages/cli/src/lib/config.ts +++ b/packages/cli/src/lib/config.ts @@ -24,6 +24,7 @@ import { paths } from './paths'; import { isValidUrl } from './urls'; import { getPackages } from '@manypkg/get-packages'; import { PackageGraph } from './monorepo'; +import { pathExistsSync } from 'fs-extra'; type Options = { args: string[]; @@ -38,7 +39,11 @@ export async function loadCliConfig(options: Options) { const configTargets: ConfigTarget[] = []; options.args.forEach(arg => { if (!isValidUrl(arg)) { - configTargets.push({ path: paths.resolveTargetRoot(arg) }); + let path = paths.resolveTarget(arg); + if (!pathExistsSync(path)) { + path = paths.resolveOwnRoot(arg); + } + configTargets.push({ path }); } }); From 074f6253889ff83fcec8d263fd6fa26831ade7fb Mon Sep 17 00:00:00 2001 From: Ruben Vallejo Date: Tue, 21 Feb 2023 15:40:14 -0500 Subject: [PATCH 078/137] renamed kubernetesAuthTranslatorGenerator class and changed it to take a translator map as a parameter to use when decorating cluster details Signed-off-by: Ruben Vallejo --- ...ispatchingKubernetesAuthTranslator.test.ts | 72 +++++++++++++++++++ .../DispatchingKubernetesAuthTranslator.ts | 56 +++++++++++++++ .../KubernetesAuthTranslatorGenerator.test.ts | 61 ---------------- .../KubernetesAuthTranslatorGenerator.ts | 66 ----------------- .../src/kubernetes-auth-translator/index.ts | 2 +- 5 files changed, 129 insertions(+), 128 deletions(-) create mode 100644 plugins/kubernetes-backend/src/kubernetes-auth-translator/DispatchingKubernetesAuthTranslator.test.ts create mode 100644 plugins/kubernetes-backend/src/kubernetes-auth-translator/DispatchingKubernetesAuthTranslator.ts delete mode 100644 plugins/kubernetes-backend/src/kubernetes-auth-translator/KubernetesAuthTranslatorGenerator.test.ts delete mode 100644 plugins/kubernetes-backend/src/kubernetes-auth-translator/KubernetesAuthTranslatorGenerator.ts diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/DispatchingKubernetesAuthTranslator.test.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/DispatchingKubernetesAuthTranslator.test.ts new file mode 100644 index 0000000000..02b60a031b --- /dev/null +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/DispatchingKubernetesAuthTranslator.test.ts @@ -0,0 +1,72 @@ +/* + * 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 { DispatchingKubernetesAuthTranslator } from './DispatchingKubernetesAuthTranslator'; +import { ClusterDetails } from '../types'; +import { KubernetesRequestAuth } from '@backstage/plugin-kubernetes-common'; +import { KubernetesAuthTranslator } from './types'; + +describe('decorateClusterDetailsWithAuth', () => { + let authTranslator: DispatchingKubernetesAuthTranslator; + let mockTranslator: jest.Mocked; + const authObject: KubernetesRequestAuth = {}; + + beforeEach(() => { + mockTranslator = { decorateClusterDetailsWithAuth: jest.fn() }; + authTranslator = new DispatchingKubernetesAuthTranslator({ + authTranslatorMap: { google: mockTranslator }, + }); + }); + + it('can decorate cluster details if the auth provider is in the translator map', () => { + const expectedClusterDetails: ClusterDetails = { + url: 'notanything.com', + name: 'randomName', + authProvider: 'google', + serviceAccountToken: 'added by mock translator', + }; + + mockTranslator.decorateClusterDetailsWithAuth.mockReturnValue( + expectedClusterDetails as unknown as Promise, + ); + + const returnedValue = authTranslator.decorateClusterDetailsWithAuth( + { name: 'googleCluster', url: 'anything.com', authProvider: 'google' }, + authObject, + ); + + expect(mockTranslator.decorateClusterDetailsWithAuth).toHaveBeenCalledWith( + { name: 'googleCluster', url: 'anything.com', authProvider: 'google' }, + authObject, + ); + expect(returnedValue).toBe(expectedClusterDetails); + }); + + it('throws an error when asked for an auth translator for an unsupported auth type', () => { + expect(() => + authTranslator.decorateClusterDetailsWithAuth( + { + name: 'test-cluster', + url: 'anything.com', + authProvider: 'linode', + }, + authObject, + ), + ).toThrow( + 'authProvider "linode" has no KubernetesAuthTranslator associated with it', + ); + }); +}); diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/DispatchingKubernetesAuthTranslator.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/DispatchingKubernetesAuthTranslator.ts new file mode 100644 index 0000000000..0290bc4c52 --- /dev/null +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/DispatchingKubernetesAuthTranslator.ts @@ -0,0 +1,56 @@ +/* + * 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 { KubernetesAuthTranslator } from './types'; +import { ClusterDetails } from '../types'; +import { KubernetesRequestAuth } from '@backstage/plugin-kubernetes-common'; + +/** + * + * @public + */ +export type KubernetesAuthTranslatorGeneratorOptions = { + authTranslatorMap: { + [key: string]: KubernetesAuthTranslator; + }; +}; +/** + * used to direct a KubernetesAuthProvider to its corresponding KubernetesAuthTranslator + * @public + */ +export class DispatchingKubernetesAuthTranslator + implements KubernetesAuthTranslator +{ + private readonly translatorMap: { [key: string]: KubernetesAuthTranslator }; + + constructor(options: KubernetesAuthTranslatorGeneratorOptions) { + this.translatorMap = options.authTranslatorMap; + } + + public decorateClusterDetailsWithAuth( + clusterDetails: ClusterDetails, + auth: KubernetesRequestAuth, + ) { + if (this.translatorMap[clusterDetails.authProvider]) { + return this.translatorMap[ + clusterDetails.authProvider + ].decorateClusterDetailsWithAuth(clusterDetails, auth); + } + throw new Error( + `authProvider "${clusterDetails.authProvider}" has no KubernetesAuthTranslator associated with it`, + ); + } +} diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/KubernetesAuthTranslatorGenerator.test.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/KubernetesAuthTranslatorGenerator.test.ts deleted file mode 100644 index f8abdde9cf..0000000000 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/KubernetesAuthTranslatorGenerator.test.ts +++ /dev/null @@ -1,61 +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 { KubernetesAuthTranslator } from './types'; -import { GoogleKubernetesAuthTranslator } from './GoogleKubernetesAuthTranslator'; -import { KubernetesAuthTranslatorGenerator } from './KubernetesAuthTranslatorGenerator'; -import { NoopKubernetesAuthTranslator } from './NoopKubernetesAuthTranslator'; -import { AwsIamKubernetesAuthTranslator } from './AwsIamKubernetesAuthTranslator'; -import { OidcKubernetesAuthTranslator } from './OidcKubernetesAuthTranslator'; -import { getVoidLogger } from '@backstage/backend-common'; - -const logger = getVoidLogger(); - -describe('getKubernetesAuthTranslatorInstance', () => { - const sut = KubernetesAuthTranslatorGenerator; - - it('can return an auth translator for google auth', () => { - const authTranslator: KubernetesAuthTranslator = - sut.getKubernetesAuthTranslatorInstance('google', { logger }); - expect(authTranslator instanceof GoogleKubernetesAuthTranslator).toBe(true); - }); - - it('can return an auth translator for aws auth', () => { - const authTranslator: KubernetesAuthTranslator = - sut.getKubernetesAuthTranslatorInstance('aws', { logger }); - expect(authTranslator instanceof AwsIamKubernetesAuthTranslator).toBe(true); - }); - - it('can return an auth translator for serviceAccount auth', () => { - const authTranslator: KubernetesAuthTranslator = - sut.getKubernetesAuthTranslatorInstance('serviceAccount', { logger }); - expect(authTranslator instanceof NoopKubernetesAuthTranslator).toBe(true); - }); - - it('can return an auth translator for oidc auth', () => { - const authTranslator: KubernetesAuthTranslator = - sut.getKubernetesAuthTranslatorInstance('oidc', { logger }); - expect(authTranslator instanceof OidcKubernetesAuthTranslator).toBe(true); - }); - - it('throws an error when asked for an auth translator for an unsupported auth type', () => { - expect(() => - sut.getKubernetesAuthTranslatorInstance('linode', { logger }), - ).toThrow( - 'authProvider "linode" has no KubernetesAuthTranslator associated with it', - ); - }); -}); diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/KubernetesAuthTranslatorGenerator.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/KubernetesAuthTranslatorGenerator.ts deleted file mode 100644 index f54e46efab..0000000000 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/KubernetesAuthTranslatorGenerator.ts +++ /dev/null @@ -1,66 +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 { Logger } from 'winston'; -import { KubernetesAuthTranslator } from './types'; -import { GoogleKubernetesAuthTranslator } from './GoogleKubernetesAuthTranslator'; -import { NoopKubernetesAuthTranslator } from './NoopKubernetesAuthTranslator'; -import { AwsIamKubernetesAuthTranslator } from './AwsIamKubernetesAuthTranslator'; -import { GoogleServiceAccountAuthTranslator } from './GoogleServiceAccountAuthProvider'; -import { AzureIdentityKubernetesAuthTranslator } from './AzureIdentityKubernetesAuthTranslator'; -import { OidcKubernetesAuthTranslator } from './OidcKubernetesAuthTranslator'; - -/** - * - * @public - */ -export class KubernetesAuthTranslatorGenerator { - static getKubernetesAuthTranslatorInstance( - authProvider: string, - options: { - logger: Logger; - }, - ): KubernetesAuthTranslator { - switch (authProvider) { - case 'google': { - return new GoogleKubernetesAuthTranslator(); - } - case 'aws': { - return new AwsIamKubernetesAuthTranslator(); - } - case 'azure': { - return new AzureIdentityKubernetesAuthTranslator(options.logger); - } - case 'serviceAccount': { - return new NoopKubernetesAuthTranslator(); - } - case 'googleServiceAccount': { - return new GoogleServiceAccountAuthTranslator(); - } - case 'oidc': { - return new OidcKubernetesAuthTranslator(); - } - case 'localKubectlProxy': { - return new NoopKubernetesAuthTranslator(); - } - default: { - throw new Error( - `authProvider "${authProvider}" has no KubernetesAuthTranslator associated with it`, - ); - } - } - } -} diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/index.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/index.ts index 19f6dd80eb..4ee83b0da0 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/index.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/index.ts @@ -18,7 +18,7 @@ export * from './AwsIamKubernetesAuthTranslator'; export * from './AzureIdentityKubernetesAuthTranslator'; export * from './GoogleKubernetesAuthTranslator'; export * from './GoogleServiceAccountAuthProvider'; -export * from './KubernetesAuthTranslatorGenerator'; +export * from './DispatchingKubernetesAuthTranslator'; export * from './NoopKubernetesAuthTranslator'; export * from './OidcKubernetesAuthTranslator'; export * from './types'; From e6c7c85012946ade3f396385a4772c78ec698bd7 Mon Sep 17 00:00:00 2001 From: Ruben Vallejo Date: Tue, 21 Feb 2023 15:41:28 -0500 Subject: [PATCH 079/137] change decorateClusterDetailsWithAuth method to use the authTranslator provided by the KubernetesFanOutHandler constructor Signed-off-by: Ruben Vallejo --- .changeset/blue-walls-drop.md | 5 + plugins/kubernetes-backend/api-report.md | 54 ++++- ...ispatchingKubernetesAuthTranslator.test.ts | 8 +- .../DispatchingKubernetesAuthTranslator.ts | 4 +- .../src/service/KubernetesBuilder.ts | 58 ++++- .../service/KubernetesFanOutHandler.test.ts | 10 + .../src/service/KubernetesFanOutHandler.ts | 32 +-- .../src/service/KubernetesProxy.test.ts | 212 +++++++++++++++++- .../src/service/KubernetesProxy.ts | 46 ++-- .../kubernetes-backend/src/service/index.ts | 5 +- 10 files changed, 366 insertions(+), 68 deletions(-) create mode 100644 .changeset/blue-walls-drop.md diff --git a/.changeset/blue-walls-drop.md b/.changeset/blue-walls-drop.md new file mode 100644 index 0000000000..a8e9ea1d33 --- /dev/null +++ b/.changeset/blue-walls-drop.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-backend': minor +--- + +Plugins that instantiate the `KubernetesProxy` must now provide a parameter of the type `KubernetesProxyOptions` which includes providing a `KubernetesAuthTranslator`. The `KubernetesBuilder` now builds its own `KubernetesAuthTranslatorMap` that it provides to the `KubernetesProxy`. The `DispatchingKubernetesAuthTranslator` expects a `KubernetesTranslatorMap` to be provided as a parameter. The `KubernetesBuilder` now has a method called `setAuthTranslatorMap` which allows integrators to bring their own `KubernetesAuthTranslator's` to the `KubernetesPlugin`. diff --git a/plugins/kubernetes-backend/api-report.md b/plugins/kubernetes-backend/api-report.md index 449131a26e..bc51d504de 100644 --- a/plugins/kubernetes-backend/api-report.md +++ b/plugins/kubernetes-backend/api-report.md @@ -110,6 +110,25 @@ export interface CustomResourcesByEntity extends KubernetesObjectsByEntity { // @public (undocumented) export const DEFAULT_OBJECTS: ObjectToFetch[]; +// @public +export class DispatchingKubernetesAuthTranslator + implements KubernetesAuthTranslator +{ + constructor(options: DispatchingKubernetesAuthTranslatorOptions); + // (undocumented) + decorateClusterDetailsWithAuth( + clusterDetails: ClusterDetails, + auth: KubernetesRequestAuth, + ): Promise; +} + +// @public (undocumented) +export type DispatchingKubernetesAuthTranslatorOptions = { + authTranslatorMap: { + [key: string]: KubernetesAuthTranslator; + }; +}; + // @public (undocumented) export interface FetchResponseWrapper { // (undocumented) @@ -157,23 +176,16 @@ export interface KubernetesAuthTranslator { ): Promise; } -// @public (undocumented) -export class KubernetesAuthTranslatorGenerator { - // (undocumented) - static getKubernetesAuthTranslatorInstance( - authProvider: string, - options: { - logger: Logger; - }, - ): KubernetesAuthTranslator; -} - // @public (undocumented) export class KubernetesBuilder { constructor(env: KubernetesEnvironment); // (undocumented) build(): KubernetesBuilderReturn; // (undocumented) + protected buildAuthTranslatorMap(): { + [key: string]: KubernetesAuthTranslator; + }; + // (undocumented) protected buildClusterSupplier( refreshInterval: Duration, ): KubernetesClustersSupplier; @@ -220,6 +232,10 @@ export class KubernetesBuilder { clusterSupplier: KubernetesClustersSupplier, ): Promise; // (undocumented) + protected getAuthTranslatorMap(): { + [key: string]: KubernetesAuthTranslator; + }; + // (undocumented) protected getClusterSupplier(): KubernetesClustersSupplier; // (undocumented) protected getFetcher(): KubernetesFetcher; @@ -239,6 +255,10 @@ export class KubernetesBuilder { // (undocumented) protected getServiceLocatorMethod(): ServiceLocatorMethod; // (undocumented) + setAuthTranslatorMap(authTranslatorMap: { + [key: string]: KubernetesAuthTranslator; + }): void; + // (undocumented) setClusterSupplier(clusterSupplier?: KubernetesClustersSupplier): this; // (undocumented) setDefaultClusterRefreshInterval(refreshInterval: Duration): this; @@ -261,6 +281,9 @@ export type KubernetesBuilderReturn = Promise<{ proxy: KubernetesProxy; objectsProvider: KubernetesObjectsProvider; serviceLocator: KubernetesServiceLocator; + authTranslatorMap: { + [key: string]: KubernetesAuthTranslator; + }; }>; // @public @@ -345,7 +368,7 @@ export type KubernetesObjectTypes = // @public export class KubernetesProxy { - constructor(logger: Logger, clusterSupplier: KubernetesClustersSupplier); + constructor(options: KubernetesProxyOptions); // (undocumented) createRequestHandler( options: KubernetesProxyCreateRequestHandlerOptions, @@ -357,6 +380,13 @@ export type KubernetesProxyCreateRequestHandlerOptions = { permissionApi: PermissionEvaluator; }; +// @public +export type KubernetesProxyOptions = { + logger: Logger; + clusterSupplier: KubernetesClustersSupplier; + authTranslator: KubernetesAuthTranslator; +}; + // @public export interface KubernetesServiceLocator { // (undocumented) diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/DispatchingKubernetesAuthTranslator.test.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/DispatchingKubernetesAuthTranslator.test.ts index 02b60a031b..3132bdef76 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/DispatchingKubernetesAuthTranslator.test.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/DispatchingKubernetesAuthTranslator.test.ts @@ -31,7 +31,7 @@ describe('decorateClusterDetailsWithAuth', () => { }); }); - it('can decorate cluster details if the auth provider is in the translator map', () => { + it('can decorate cluster details if the auth provider is in the translator map', async () => { const expectedClusterDetails: ClusterDetails = { url: 'notanything.com', name: 'randomName', @@ -39,11 +39,11 @@ describe('decorateClusterDetailsWithAuth', () => { serviceAccountToken: 'added by mock translator', }; - mockTranslator.decorateClusterDetailsWithAuth.mockReturnValue( - expectedClusterDetails as unknown as Promise, + mockTranslator.decorateClusterDetailsWithAuth.mockResolvedValue( + expectedClusterDetails, ); - const returnedValue = authTranslator.decorateClusterDetailsWithAuth( + const returnedValue = await authTranslator.decorateClusterDetailsWithAuth( { name: 'googleCluster', url: 'anything.com', authProvider: 'google' }, authObject, ); diff --git a/plugins/kubernetes-backend/src/kubernetes-auth-translator/DispatchingKubernetesAuthTranslator.ts b/plugins/kubernetes-backend/src/kubernetes-auth-translator/DispatchingKubernetesAuthTranslator.ts index 0290bc4c52..82d9538cac 100644 --- a/plugins/kubernetes-backend/src/kubernetes-auth-translator/DispatchingKubernetesAuthTranslator.ts +++ b/plugins/kubernetes-backend/src/kubernetes-auth-translator/DispatchingKubernetesAuthTranslator.ts @@ -22,7 +22,7 @@ import { KubernetesRequestAuth } from '@backstage/plugin-kubernetes-common'; * * @public */ -export type KubernetesAuthTranslatorGeneratorOptions = { +export type DispatchingKubernetesAuthTranslatorOptions = { authTranslatorMap: { [key: string]: KubernetesAuthTranslator; }; @@ -36,7 +36,7 @@ export class DispatchingKubernetesAuthTranslator { private readonly translatorMap: { [key: string]: KubernetesAuthTranslator }; - constructor(options: KubernetesAuthTranslatorGeneratorOptions) { + constructor(options: DispatchingKubernetesAuthTranslatorOptions) { this.translatorMap = options.authTranslatorMap; } diff --git a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts index 367e5edef3..5e885512f7 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts @@ -24,6 +24,17 @@ import { Duration } from 'luxon'; import { Logger } from 'winston'; import { getCombinedClusterSupplier } from '../cluster-locator'; +import { + KubernetesAuthTranslator, + DispatchingKubernetesAuthTranslator, + GoogleKubernetesAuthTranslator, + NoopKubernetesAuthTranslator, + AwsIamKubernetesAuthTranslator, + GoogleServiceAccountAuthTranslator, + AzureIdentityKubernetesAuthTranslator, + OidcKubernetesAuthTranslator, +} from '../kubernetes-auth-translator'; + import { addResourceRoutesToRouter } from '../routes/resourcesRoutes'; import { MultiTenantServiceLocator } from '../service-locator/MultiTenantServiceLocator'; import { @@ -68,6 +79,7 @@ export type KubernetesBuilderReturn = Promise<{ proxy: KubernetesProxy; objectsProvider: KubernetesObjectsProvider; serviceLocator: KubernetesServiceLocator; + authTranslatorMap: { [key: string]: KubernetesAuthTranslator }; }>; /** @@ -83,6 +95,7 @@ export class KubernetesBuilder { private fetcher?: KubernetesFetcher; private serviceLocator?: KubernetesServiceLocator; private proxy?: KubernetesProxy; + private authTranslatorMap?: { [key: string]: KubernetesAuthTranslator }; static createBuilder(env: KubernetesEnvironment) { return new KubernetesBuilder(env); @@ -114,6 +127,8 @@ export class KubernetesBuilder { const clusterSupplier = this.getClusterSupplier(); + const authTranslatorMap = this.getAuthTranslatorMap(); + const proxy = this.getProxy(logger, clusterSupplier); const serviceLocator = this.getServiceLocator(); @@ -142,6 +157,7 @@ export class KubernetesBuilder { objectsProvider, router, serviceLocator, + authTranslatorMap, }; } @@ -175,6 +191,12 @@ export class KubernetesBuilder { return this; } + public setAuthTranslatorMap(authTranslatorMap: { + [key: string]: KubernetesAuthTranslator; + }) { + this.authTranslatorMap = authTranslatorMap; + } + protected buildCustomResources() { const customResources: CustomResource[] = ( this.env.config.getOptionalConfigArray('kubernetes.customResources') ?? [] @@ -210,7 +232,14 @@ export class KubernetesBuilder { protected buildObjectsProvider( options: KubernetesObjectsProviderOptions, ): KubernetesObjectsProvider { - this.objectsProvider = new KubernetesFanOutHandler(options); + const authTranslatorMap = this.getAuthTranslatorMap(); + this.objectsProvider = new KubernetesFanOutHandler({ + ...options, + authTranslator: new DispatchingKubernetesAuthTranslator({ + authTranslatorMap, + }), + }); + return this.objectsProvider; } @@ -259,7 +288,15 @@ export class KubernetesBuilder { logger: Logger, clusterSupplier: KubernetesClustersSupplier, ): KubernetesProxy { - this.proxy = new KubernetesProxy(logger, clusterSupplier); + const authTranslatorMap = this.getAuthTranslatorMap(); + const authTranslator = new DispatchingKubernetesAuthTranslator({ + authTranslatorMap, + }); + this.proxy = new KubernetesProxy({ + logger, + clusterSupplier, + authTranslator, + }); return this.proxy; } @@ -314,6 +351,19 @@ export class KubernetesBuilder { return router; } + protected buildAuthTranslatorMap() { + this.authTranslatorMap = { + google: new GoogleKubernetesAuthTranslator(), + aws: new AwsIamKubernetesAuthTranslator(), + azure: new AzureIdentityKubernetesAuthTranslator(this.env.logger), + serviceAccount: new NoopKubernetesAuthTranslator(), + googleServiceAccount: new GoogleServiceAccountAuthTranslator(), + oidc: new OidcKubernetesAuthTranslator(), + localKubectlProxy: new NoopKubernetesAuthTranslator(), + }; + return this.authTranslatorMap; + } + protected async fetchClusterDetails( clusterSupplier: KubernetesClustersSupplier, ) { @@ -393,4 +443,8 @@ export class KubernetesBuilder { ) { return this.proxy ?? this.buildProxy(logger, clusterSupplier); } + + protected getAuthTranslatorMap() { + return this.authTranslatorMap ?? this.buildAuthTranslatorMap(); + } } diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts index 53aaa1ad3a..de6035b48e 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts @@ -166,6 +166,11 @@ function getKubernetesFanOutHandler(customResources: CustomResource[]) { getClustersByEntity, }, customResources: customResources, + authTranslator: { + decorateClusterDetailsWithAuth: async (clusterDetails, _) => { + return clusterDetails; + }, + }, }); } @@ -879,6 +884,11 @@ describe('getKubernetesObjectsByEntity', () => { objectType: 'services', }, ], + authTranslator: { + decorateClusterDetailsWithAuth: async (clusterDetails, _) => { + return clusterDetails; + }, + }, }); const result = await sut.getKubernetesObjectsByEntity({ diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts index f71c6506bd..8441effabd 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts @@ -30,7 +30,6 @@ import { ServiceLocatorRequestContext, } from '../types/types'; import { KubernetesAuthTranslator } from '../kubernetes-auth-translator/types'; -import { KubernetesAuthTranslatorGenerator } from '../kubernetes-auth-translator/KubernetesAuthTranslatorGenerator'; import { ClientContainerStatus, ClientCurrentResourceUsage, @@ -137,7 +136,9 @@ export const DEFAULT_OBJECTS: ObjectToFetch[] = [ ]; export interface KubernetesFanOutHandlerOptions - extends KubernetesObjectsProviderOptions {} + extends KubernetesObjectsProviderOptions { + authTranslator: KubernetesAuthTranslator; +} export interface KubernetesRequestBody extends ObjectsByEntityRequest {} @@ -195,7 +196,7 @@ export class KubernetesFanOutHandler { private readonly serviceLocator: KubernetesServiceLocator; private readonly customResources: CustomResource[]; private readonly objectTypesToFetch: Set; - private readonly authTranslators: Record; + private readonly authTranslator: KubernetesAuthTranslator; constructor({ logger, @@ -203,13 +204,14 @@ export class KubernetesFanOutHandler { serviceLocator, customResources, objectTypesToFetch = DEFAULT_OBJECTS, + authTranslator, }: KubernetesFanOutHandlerOptions) { this.logger = logger; this.fetcher = fetcher; this.serviceLocator = serviceLocator; this.customResources = customResources; this.objectTypesToFetch = new Set(objectTypesToFetch); - this.authTranslators = {}; + this.authTranslator = authTranslator; } async getCustomResourcesByEntity({ @@ -313,12 +315,7 @@ export class KubernetesFanOutHandler { // Execute all of these async actions simultaneously/without blocking sequentially as no common object is modified by them const promiseResults = await Promise.allSettled( clusterDetails.map(cd => { - const kubernetesAuthTranslator: KubernetesAuthTranslator = - this.getAuthTranslator(cd.authProvider); - return kubernetesAuthTranslator.decorateClusterDetailsWithAuth( - cd, - auth, - ); + return this.authTranslator.decorateClusterDetailsWithAuth(cd, auth); }), ); @@ -393,19 +390,4 @@ export class KubernetesFanOutHandler { result.errors.push(...podMetrics.errors); return [result, podMetrics.responses as PodStatusFetchResponse[]]; } - - private getAuthTranslator(provider: string): KubernetesAuthTranslator { - if (this.authTranslators[provider]) { - return this.authTranslators[provider]; - } - - this.authTranslators[provider] = - KubernetesAuthTranslatorGenerator.getKubernetesAuthTranslatorInstance( - provider, - { - logger: this.logger, - }, - ); - return this.authTranslators[provider]; - } } diff --git a/plugins/kubernetes-backend/src/service/KubernetesProxy.test.ts b/plugins/kubernetes-backend/src/service/KubernetesProxy.test.ts index d2404af839..57eb29f0a7 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesProxy.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesProxy.test.ts @@ -28,16 +28,19 @@ import { ClusterDetails, KubernetesClustersSupplier } from '../types/types'; import { APPLICATION_JSON, HEADER_KUBERNETES_CLUSTER, + HEADER_KUBERNETES_AUTH, KubernetesProxy, } from './KubernetesProxy'; import { AuthorizeResult, PermissionEvaluator, } from '@backstage/plugin-permission-common'; +import { KubernetesAuthTranslator } from '../kubernetes-auth-translator'; describe('KubernetesProxy', () => { let proxy: KubernetesProxy; const worker = setupServer(); + const logger = getVoidLogger(); setupRequestMockHandlers(worker); @@ -73,9 +76,13 @@ describe('KubernetesProxy', () => { authorizeConditional: jest.fn(), }; + const authTranslator: jest.Mocked = { + decorateClusterDetailsWithAuth: jest.fn(), + }; + beforeEach(() => { jest.resetAllMocks(); - proxy = new KubernetesProxy(getVoidLogger(), clusterSupplier); + proxy = new KubernetesProxy({ logger, clusterSupplier, authTranslator }); }); it('should return a ERROR_NOT_FOUND if no clusters are found', async () => { @@ -112,21 +119,30 @@ describe('KubernetesProxy', () => { authProvider: 'serviceAccount', }, ] as ClusterDetails[]); + + permissionApi.authorize.mockReturnValue( + Promise.resolve([{ result: AuthorizeResult.ALLOW }]), + ); + + authTranslator.decorateClusterDetailsWithAuth.mockResolvedValue({ + name: 'cluster1', + url: 'https://localhost:9999', + serviceAccountToken: '', + authProvider: 'serviceAccount', + } as ClusterDetails); + const app = express().use( '/mountpath', proxy.createRequestHandler({ permissionApi }), ); - permissionApi.authorize.mockReturnValue( - Promise.resolve([{ result: AuthorizeResult.ALLOW }]), - ); const requestPromise = request(app) .get('/mountpath/api') .set(HEADER_KUBERNETES_CLUSTER, 'cluster1'); worker.use( - rest.get('https://localhost:9999/api', (_, res, ctx) => + rest.get('https://localhost:9999/api', (_: any, res: any, ctx: any) => res(ctx.status(299), ctx.json(apiResponse)), ), - rest.all(requestPromise.url, (req, _res, _ctx) => req.passthrough()), + rest.all(requestPromise.url, (req: any) => req.passthrough()), ); const response = await requestPromise; @@ -134,4 +150,188 @@ describe('KubernetesProxy', () => { expect(response.status).toEqual(299); expect(response.body).toStrictEqual(apiResponse); }); + + it('should default to using a provided authorization header', async () => { + worker.use( + rest.get( + 'https://localhost:9999/api/v1/namespaces', + (req: any, res: any, ctx: any) => { + if (!req.headers.get('Authorization')) { + return res(ctx.status(401)); + } + + if (req.headers.get('Authorization') !== 'my-token') { + return res(ctx.status(403)); + } + + return res( + ctx.status(200), + ctx.json({ + kind: 'NamespaceList', + apiVersion: 'v1', + items: [], + }), + ); + }, + ), + ); + + permissionApi.authorize.mockReturnValue( + Promise.resolve([{ result: AuthorizeResult.ALLOW }]), + ); + + clusterSupplier.getClusters.mockResolvedValue([ + { + name: 'cluster1', + url: 'https://localhost:9999', + serviceAccountToken: '', + authProvider: 'serviceAccount', + }, + ] as ClusterDetails[]); + + authTranslator.decorateClusterDetailsWithAuth.mockResolvedValue({ + name: 'cluster1', + url: 'https://localhost:9999', + serviceAccountToken: 'random-token', + authProvider: 'serviceAccount', + } as ClusterDetails); + + const app = express().use( + '/mountpath', + proxy.createRequestHandler({ permissionApi }), + ); + const requestPromise = request(app) + .get('/mountpath/api/v1/namespaces') + .set(HEADER_KUBERNETES_CLUSTER, 'cluster1') + .set('Authorization', 'my-token'); + + worker.use(rest.all(requestPromise.url, (req: any) => req.passthrough())); + + const response = await requestPromise; + + expect(response.status).toEqual(200); + }); + + it('should add a serviceAccountToken to the request headers if one isnt provided in request and one isnt set up in cluster details', async () => { + worker.use( + rest.get('https://localhost:9999/api/v1/namespaces', (req, res, ctx) => { + if (!req.headers.get('Authorization')) { + return res(ctx.status(401)); + } + + if (req.headers.get('Authorization') !== 'Bearer my-token') { + return res(ctx.status(403)); + } + + return res( + ctx.status(200), + ctx.json({ + kind: 'NamespaceList', + apiVersion: 'v1', + items: [], + }), + ); + }), + ); + + permissionApi.authorize.mockReturnValue( + Promise.resolve([{ result: AuthorizeResult.ALLOW }]), + ); + + clusterSupplier.getClusters.mockResolvedValue([ + { + name: 'cluster1', + url: 'https://localhost:9999', + authProvider: 'googleServiceAccount', + }, + ] as ClusterDetails[]); + + authTranslator.decorateClusterDetailsWithAuth.mockResolvedValue({ + name: 'cluster1', + url: 'https://localhost:9999', + serviceAccountToken: 'my-token', + authProvider: 'googleServiceAccount', + } as ClusterDetails); + + const app = express().use( + '/mountpath', + proxy.createRequestHandler({ permissionApi }), + ); + const requestPromise = request(app) + .get('/mountpath/api/v1/namespaces') + .set(HEADER_KUBERNETES_CLUSTER, 'cluster1'); + + worker.use(rest.all(requestPromise.url, (req: any) => req.passthrough())); + + const response = await requestPromise; + + expect(response.status).toEqual(200); + expect(response.body).toStrictEqual({ + kind: 'NamespaceList', + apiVersion: 'v1', + items: [], + }); + }); + + it('should append the Backstage-Kubernetes-Auth field to the requests authorization header if one is provided', async () => { + worker.use( + rest.get('https://localhost:9999/api/v1/namespaces', (req, res, ctx) => { + if (!req.headers.get('Authorization')) { + return res(ctx.status(401)); + } + + if (req.headers.get('Authorization') !== 'tokenB') { + return res(ctx.status(403)); + } + + return res( + ctx.status(200), + ctx.json({ + kind: 'NamespaceList', + apiVersion: 'v1', + items: [], + }), + ); + }), + ); + + permissionApi.authorize.mockReturnValue( + Promise.resolve([{ result: AuthorizeResult.ALLOW }]), + ); + + clusterSupplier.getClusters.mockResolvedValue([ + { + name: 'cluster1', + url: 'https://localhost:9999', + authProvider: 'googleServiceAccount', + }, + ] as ClusterDetails[]); + + authTranslator.decorateClusterDetailsWithAuth.mockResolvedValue({ + name: 'cluster1', + url: 'https://localhost:9999', + serviceAccountToken: 'tokenA', + authProvider: 'googleServiceAccount', + } as ClusterDetails); + + const app = express().use( + '/mountpath', + proxy.createRequestHandler({ permissionApi }), + ); + const requestPromise = request(app) + .get('/mountpath/api/v1/namespaces') + .set(HEADER_KUBERNETES_CLUSTER, 'cluster1') + .set(HEADER_KUBERNETES_AUTH, 'tokenB'); + + worker.use(rest.all(requestPromise.url, (req: any) => req.passthrough())); + + const response = await requestPromise; + + expect(response.status).toEqual(200); + expect(response.body).toStrictEqual({ + kind: 'NamespaceList', + apiVersion: 'v1', + items: [], + }); + }); }); diff --git a/plugins/kubernetes-backend/src/service/KubernetesProxy.ts b/plugins/kubernetes-backend/src/service/KubernetesProxy.ts index 49a381b75a..eb6748ffba 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesProxy.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesProxy.ts @@ -32,6 +32,7 @@ import { bufferFromFileOrString } from '@kubernetes/client-node'; import type { Request, RequestHandler } from 'express'; import { createProxyMiddleware } from 'http-proxy-middleware'; import { Logger } from 'winston'; +import { KubernetesAuthTranslator } from '../kubernetes-auth-translator'; import { ClusterDetails, KubernetesClustersSupplier } from '../types/types'; export const APPLICATION_JSON: string = 'application/json'; @@ -60,6 +61,17 @@ export type KubernetesProxyCreateRequestHandlerOptions = { permissionApi: PermissionEvaluator; }; +/** + * Options accepted as a parameter by the KubernetesProxy + * + * @public + */ +export type KubernetesProxyOptions = { + logger: Logger; + clusterSupplier: KubernetesClustersSupplier; + authTranslator: KubernetesAuthTranslator; +}; + /** * A proxy that routes requests to the Kubernetes API. * @@ -67,11 +79,15 @@ export type KubernetesProxyCreateRequestHandlerOptions = { */ export class KubernetesProxy { private readonly middlewareForClusterName = new Map(); + private readonly logger: Logger; + private readonly clusterSupplier: KubernetesClustersSupplier; + private readonly authTranslator: KubernetesAuthTranslator; - constructor( - private readonly logger: Logger, - private readonly clusterSupplier: KubernetesClustersSupplier, - ) {} + constructor(options: KubernetesProxyOptions) { + this.logger = options.logger; + this.clusterSupplier = options.clusterSupplier; + this.authTranslator = options.authTranslator; + } public createRequestHandler( options: KubernetesProxyCreateRequestHandlerOptions, @@ -96,6 +112,12 @@ export class KubernetesProxy { return; } + const cluster = await this.getClusterForRequest(req).then(cd => + this.authTranslator.decorateClusterDetailsWithAuth(cd, {}), + ); + if (!req.headers.authorization) { + req.headers.authorization = `Bearer ${cluster.serviceAccountToken}`; + } const middleware = await this.getMiddleware(req); middleware(req, res, next); }; @@ -108,13 +130,6 @@ export class KubernetesProxy { const originalCluster = await this.getClusterForRequest(originalReq); let middleware = this.middlewareForClusterName.get(originalCluster.name); if (!middleware) { - // Probably too risky without permissions protecting this endpoint - // if (cluster.serviceAccountToken) { - // options.headers = { - // Authorization: `Bearer ${cluster.serviceAccountToken}`, - // }; - // } - const logger = this.logger.child({ cluster: originalCluster.name }); middleware = createProxyMiddleware({ logProvider: () => logger, @@ -146,19 +161,18 @@ export class KubernetesProxy { request: { method: req.method, url: req.originalUrl }, response: { statusCode: 500 }, }; - res.status(500).json(body); }, onProxyReq: (proxyReq, req) => { // the kubernetes proxy endpoint expects a header field labeled `Backstage-Kubernetes-Authorization` that will be used to authenticate with the Kubernetes Api. The token provided as a value should be an bearer token for the target cluster. - const token = req.header(HEADER_KUBERNETES_AUTH) ?? ''; - proxyReq.setHeader('Authorization', token); + if (req.header(HEADER_KUBERNETES_AUTH)) { + const token = req.header(HEADER_KUBERNETES_AUTH) ?? ''; + proxyReq.setHeader('Authorization', token); + } }, }); - this.middlewareForClusterName.set(originalCluster.name, middleware); } - return middleware; } diff --git a/plugins/kubernetes-backend/src/service/index.ts b/plugins/kubernetes-backend/src/service/index.ts index 2f3e907879..9c0911de37 100644 --- a/plugins/kubernetes-backend/src/service/index.ts +++ b/plugins/kubernetes-backend/src/service/index.ts @@ -21,5 +21,8 @@ export { KubernetesProxy, HEADER_KUBERNETES_AUTH, } from './KubernetesProxy'; -export type { KubernetesProxyCreateRequestHandlerOptions } from './KubernetesProxy'; +export type { + KubernetesProxyCreateRequestHandlerOptions, + KubernetesProxyOptions, +} from './KubernetesProxy'; export * from './router'; From a3439ddac518216d5a42c98957329c428cebf020 Mon Sep 17 00:00:00 2001 From: Ruben Vallejo Date: Mon, 20 Mar 2023 11:55:39 -0400 Subject: [PATCH 080/137] update proxy docs Signed-off-by: Ruben Vallejo --- docs/features/kubernetes/proxy.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/docs/features/kubernetes/proxy.md b/docs/features/kubernetes/proxy.md index b53dfeb29d..7b6837dd7d 100644 --- a/docs/features/kubernetes/proxy.md +++ b/docs/features/kubernetes/proxy.md @@ -69,15 +69,9 @@ Overall, the only changes to each request are: - the endpoint's base URL prefix is stripped. - the `Backstage-Kubernetes-Authorization` header becomes the `Authorization` header that is used when forwarding the request. -## Authentication +The proxy expects a `KubernetesAuthTranslator` to be provided that is used to decorate all requests with `Auth` by default. It does this by supplying a `serviceAccountToken` field into `clusterDetails` using the defined `authProvider` in `clusterDetails`. -Until some security and permission decisions are made (see [this -conversation](https://github.com/backstage/backstage/pull/13026/files#r1029376939) -for context), contributors consuming the proxy endpoint in their plugin code are -responsible for negotiating their own bearer token out-of-band. This requires -knowing some auth details about the cluster being contacted -- in practice, only -clusters with [client side auth -providers](https://backstage.io/docs/features/kubernetes/authentication#client-side-providers) can reasonably be reached. +## Authentication The proxy has no provisions for mTLS, so it cannot be used to connect to clusters using the [x509 Client From 62a725e3a941a2d7da1b67110b45ef4eb505ade3 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Thu, 30 Mar 2023 08:39:17 +0100 Subject: [PATCH 081/137] api report and changesets Signed-off-by: Brian Fletcher --- .changeset/calm-otters-destroy.md | 6 ++++++ plugins/catalog-backend-module-azure/api-report.md | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 .changeset/calm-otters-destroy.md diff --git a/.changeset/calm-otters-destroy.md b/.changeset/calm-otters-destroy.md new file mode 100644 index 0000000000..cf3792cf4c --- /dev/null +++ b/.changeset/calm-otters-destroy.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-catalog-backend-module-azure': patch +'@backstage/plugin-catalog-backend': patch +--- + +Use the `LocationSpec` type from the `catalog-common` package in place of the deprecated `LocationSpec` from the `catalog-node` package. diff --git a/plugins/catalog-backend-module-azure/api-report.md b/plugins/catalog-backend-module-azure/api-report.md index a1b9d706a9..596ebbf6cf 100644 --- a/plugins/catalog-backend-module-azure/api-report.md +++ b/plugins/catalog-backend-module-azure/api-report.md @@ -8,7 +8,7 @@ import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; import { EntityProvider } from '@backstage/plugin-catalog-node'; import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; -import { LocationSpec } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; import { Logger } from 'winston'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { ScmIntegrationRegistry } from '@backstage/integration'; From 4a2d0acce71c9151c1ec69037f1c9396fc17c326 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Thu, 30 Mar 2023 08:46:34 +0100 Subject: [PATCH 082/137] add missing dep Signed-off-by: Brian Fletcher --- plugins/catalog-backend-module-azure/package.json | 1 + yarn.lock | 1 + 2 files changed, 2 insertions(+) diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index 0c1fd67dfa..292a4aa9da 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -52,6 +52,7 @@ "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", + "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "lodash": "^4.17.21", diff --git a/yarn.lock b/yarn.lock index 419c2f48d2..0ba2abf1de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5037,6 +5037,7 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" + "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@types/lodash": ^4.14.151 From 81bee24c5de313904783dbaf567156380f1a8f46 Mon Sep 17 00:00:00 2001 From: Frederic Kayser Date: Thu, 30 Mar 2023 19:27:11 +0200 Subject: [PATCH 083/137] catalog: make text of picker clickable Signed-off-by: Frederic Kayser --- .changeset/forty-days-tell.md | 5 +++++ .../EntityLifecyclePicker.tsx | 19 ++++++++----------- .../EntityProcessingStatusPicker.tsx | 19 ++++++++----------- 3 files changed, 21 insertions(+), 22 deletions(-) create mode 100644 .changeset/forty-days-tell.md diff --git a/.changeset/forty-days-tell.md b/.changeset/forty-days-tell.md new file mode 100644 index 0000000000..98aed740b8 --- /dev/null +++ b/.changeset/forty-days-tell.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': patch +--- + +Fixed bug in catalog filters where you could not click on the text to select a value. diff --git a/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.tsx b/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.tsx index 29002564ca..5d1ea0a96c 100644 --- a/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.tsx +++ b/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.tsx @@ -18,7 +18,6 @@ import { Entity } from '@backstage/catalog-model'; import { Box, Checkbox, - FormControlLabel, makeStyles, TextField, Typography, @@ -112,16 +111,14 @@ export const EntityLifecyclePicker = (props: { initialFilter?: string[] }) => { setSelectedLifecycles(value) } renderOption={(option, { selected }) => ( - - } - label={option} - /> +
+ + {option} +
)} size="small" popupIcon={} diff --git a/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.tsx b/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.tsx index db48534bc0..234e86f2fd 100644 --- a/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.tsx +++ b/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.tsx @@ -18,7 +18,6 @@ import { EntityErrorFilter, EntityOrphanFilter } from '../../filters'; import { Box, Checkbox, - FormControlLabel, makeStyles, TextField, Typography, @@ -83,16 +82,14 @@ export const EntityProcessingStatusPicker = () => { errorChange(value.includes('Has Error')); }} renderOption={(option, { selected }) => ( - - } - label={option} - /> +
+ + {option} +
)} size="small" popupIcon={ From 193aef4c3141c281f75baed1f8c03b5c70eb27db Mon Sep 17 00:00:00 2001 From: Frederic Kayser Date: Thu, 30 Mar 2023 20:55:17 +0200 Subject: [PATCH 084/137] fixed tests Signed-off-by: Frederic Kayser --- .../EntityLifecyclePicker/EntityLifecyclePicker.test.tsx | 8 ++++++-- .../EntityLifecyclePicker/EntityLifecyclePicker.tsx | 3 ++- .../EntityProcessingStatusPicker.test.tsx | 5 ++++- .../EntityProcessingStatusPicker.tsx | 2 +- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.test.tsx b/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.test.tsx index 3ee610ddaf..c67f5dcddb 100644 --- a/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.test.tsx +++ b/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.test.tsx @@ -154,9 +154,13 @@ describe('', () => { lifecycles: new EntityLifecycleFilter(['production']), }); fireEvent.click(screen.getByTestId('lifecycle-picker-expand')); - expect(screen.getByLabelText('production')).toBeChecked(); + expect( + screen + .getByTestId('lifecycle-checkbox-production') + .querySelector('input[type="checkbox"]'), + ).toBeChecked(); - fireEvent.click(screen.getByLabelText('production')); + fireEvent.click(screen.getByTestId('lifecycle-checkbox-label-production')); expect(updateFilters).toHaveBeenLastCalledWith({ lifecycles: undefined, }); diff --git a/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.tsx b/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.tsx index 5d1ea0a96c..b1fba50ae8 100644 --- a/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.tsx +++ b/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.tsx @@ -111,11 +111,12 @@ export const EntityLifecyclePicker = (props: { initialFilter?: string[] }) => { setSelectedLifecycles(value) } renderOption={(option, { selected }) => ( -
+
{option}
diff --git a/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.test.tsx b/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.test.tsx index 00d36e5e13..3970942ee1 100644 --- a/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.test.tsx +++ b/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.test.tsx @@ -123,7 +123,10 @@ describe('', () => { ); fireEvent.click(screen.getByTestId('processing-status-picker-expand')); - fireEvent.click(screen.getByText('Is Orphan')); + + fireEvent.click( + screen.getByTestId('processing-status-checkbox-label-Is Orphan'), + ); expect(updateFilters).toHaveBeenCalledWith({ orphan: undefined, }); diff --git a/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.tsx b/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.tsx index 234e86f2fd..237e2d9544 100644 --- a/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.tsx +++ b/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.tsx @@ -82,7 +82,7 @@ export const EntityProcessingStatusPicker = () => { errorChange(value.includes('Has Error')); }} renderOption={(option, { selected }) => ( -
+
Date: Fri, 31 Mar 2023 15:00:53 +0200 Subject: [PATCH 085/137] Resolve config paths early for backend builds Signed-off-by: Axel Hecht --- .changeset/chilled-bobcats-repeat.md | 5 ----- packages/cli/src/commands/build/buildBackend.ts | 10 +++++++++- packages/cli/src/lib/config.ts | 7 +------ 3 files changed, 10 insertions(+), 12 deletions(-) delete mode 100644 .changeset/chilled-bobcats-repeat.md diff --git a/.changeset/chilled-bobcats-repeat.md b/.changeset/chilled-bobcats-repeat.md deleted file mode 100644 index 572a82b589..0000000000 --- a/.changeset/chilled-bobcats-repeat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Resolve config options against both the current directory and the monorepo root directory. diff --git a/packages/cli/src/commands/build/buildBackend.ts b/packages/cli/src/commands/build/buildBackend.ts index 5d42aa18d4..f82567de3c 100644 --- a/packages/cli/src/commands/build/buildBackend.ts +++ b/packages/cli/src/commands/build/buildBackend.ts @@ -18,6 +18,7 @@ import os from 'os'; import fs from 'fs-extra'; import { resolve as resolvePath } from 'path'; import tar, { CreateOptions } from 'tar'; +import { paths } from '../../lib/paths'; import { createDistWorkspace } from '../../lib/packager'; import { getEnvironmentParallelism } from '../../lib/parallel'; import { buildPackage, Output } from '../../lib/builder'; @@ -42,11 +43,18 @@ export async function buildBackend(options: BuildBackendOptions) { outputs: new Set([Output.cjs]), }); + const resolvedConfigPaths = configPaths?.map(p => { + let path = paths.resolveTarget(p); + if (!fs.pathExistsSync(path)) { + path = paths.resolveOwnRoot(p); + } + return path; + }); const tmpDir = await fs.mkdtemp(resolvePath(os.tmpdir(), 'backstage-bundle')); try { await createDistWorkspace([pkg.name], { targetDir: tmpDir, - configPaths, + configPaths: resolvedConfigPaths, buildDependencies: !skipBuildDependencies, buildExcludes: [pkg.name], parallelism: getEnvironmentParallelism(), diff --git a/packages/cli/src/lib/config.ts b/packages/cli/src/lib/config.ts index 9bb32fa481..a76571c3f6 100644 --- a/packages/cli/src/lib/config.ts +++ b/packages/cli/src/lib/config.ts @@ -24,7 +24,6 @@ import { paths } from './paths'; import { isValidUrl } from './urls'; import { getPackages } from '@manypkg/get-packages'; import { PackageGraph } from './monorepo'; -import { pathExistsSync } from 'fs-extra'; type Options = { args: string[]; @@ -39,11 +38,7 @@ export async function loadCliConfig(options: Options) { const configTargets: ConfigTarget[] = []; options.args.forEach(arg => { if (!isValidUrl(arg)) { - let path = paths.resolveTarget(arg); - if (!pathExistsSync(path)) { - path = paths.resolveOwnRoot(arg); - } - configTargets.push({ path }); + configTargets.push({ path: paths.resolveTarget(arg) }); } }); From 1b1aba3cbd36e55f0b10a1f0a1cfa2e739bea7de Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 31 Mar 2023 16:18:31 +0200 Subject: [PATCH 086/137] GOVERNANCE: update inactivity definition Signed-off-by: Patrik Oldsberg --- GOVERNANCE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 3314e40993..2367dab99c 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -208,12 +208,12 @@ In all cases in this document where voting is mentioned, the voting process is a It is important for contributors to be and stay active to set an example and show commitment to the project. Inactivity is harmful to the project as it may lead to unexpected delays, contributor attrition, and a loss of trust in the project. -Inactivity is measured by periods of no contributions for longer than: +Inactivity is measured by periods of no contributions without explanation, for longer than: - Core Maintainer: 2 months - Project Area Maintainer: 4 months - Plugin Maintainer: 6 months -- Organization Member: 8 months +- Organization Member: 12 months Consequences of being inactive include: From bde3d6fd27e37d0098849c3b78ecd562c8f0c354 Mon Sep 17 00:00:00 2001 From: Ke Ma Date: Fri, 31 Mar 2023 18:17:36 +0200 Subject: [PATCH 087/137] fix: sortField is changed to orderField Signed-off-by: Ke Ma --- packages/catalog-client/src/CatalogClient.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/catalog-client/src/CatalogClient.ts b/packages/catalog-client/src/CatalogClient.ts index be4ae6289d..c388519e05 100644 --- a/packages/catalog-client/src/CatalogClient.ts +++ b/packages/catalog-client/src/CatalogClient.ts @@ -230,7 +230,7 @@ export class CatalogClient implements CatalogApi { } if (orderFields !== undefined) { (Array.isArray(orderFields) ? orderFields : [orderFields]).forEach( - ({ field, order }) => params.push(`sortField=${field},${order}`), + ({ field, order }) => params.push(`orderField=${field},${order}`), ); } if (fields.length) { From c1c4e080b797b487404cd4bd02b3aef243c82148 Mon Sep 17 00:00:00 2001 From: Ke Ma Date: Fri, 31 Mar 2023 18:23:46 +0200 Subject: [PATCH 088/137] add changelog Signed-off-by: Ke Ma --- .changeset/eight-trainers-smoke.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/eight-trainers-smoke.md diff --git a/.changeset/eight-trainers-smoke.md b/.changeset/eight-trainers-smoke.md new file mode 100644 index 0000000000..338df0d44e --- /dev/null +++ b/.changeset/eight-trainers-smoke.md @@ -0,0 +1,5 @@ +--- +'@backstage/catalog-client': minor +--- + +Fixed bug in queryEntities of CatalogClient where the sortField is supposed to be changed to orderField. From 3c1203733093b31a2f736563136b06d20495179c Mon Sep 17 00:00:00 2001 From: Frederic Kayser Date: Fri, 31 Mar 2023 18:47:28 +0200 Subject: [PATCH 089/137] use FormControlLabel and prevent defaults Signed-off-by: Frederic Kayser --- .../EntityLifecyclePicker.test.tsx | 8 ++----- .../EntityLifecyclePicker.tsx | 21 +++++++++++-------- .../EntityProcessingStatusPicker.test.tsx | 5 +---- .../EntityProcessingStatusPicker.tsx | 20 +++++++++++------- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.test.tsx b/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.test.tsx index c67f5dcddb..3ee610ddaf 100644 --- a/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.test.tsx +++ b/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.test.tsx @@ -154,13 +154,9 @@ describe('', () => { lifecycles: new EntityLifecycleFilter(['production']), }); fireEvent.click(screen.getByTestId('lifecycle-picker-expand')); - expect( - screen - .getByTestId('lifecycle-checkbox-production') - .querySelector('input[type="checkbox"]'), - ).toBeChecked(); + expect(screen.getByLabelText('production')).toBeChecked(); - fireEvent.click(screen.getByTestId('lifecycle-checkbox-label-production')); + fireEvent.click(screen.getByLabelText('production')); expect(updateFilters).toHaveBeenLastCalledWith({ lifecycles: undefined, }); diff --git a/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.tsx b/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.tsx index b1fba50ae8..dd107b2673 100644 --- a/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.tsx +++ b/plugins/catalog-react/src/components/EntityLifecyclePicker/EntityLifecyclePicker.tsx @@ -18,6 +18,7 @@ import { Entity } from '@backstage/catalog-model'; import { Box, Checkbox, + FormControlLabel, makeStyles, TextField, Typography, @@ -111,15 +112,17 @@ export const EntityLifecyclePicker = (props: { initialFilter?: string[] }) => { setSelectedLifecycles(value) } renderOption={(option, { selected }) => ( -
- - {option} -
+ + } + onClick={event => event.preventDefault()} + label={option} + /> )} size="small" popupIcon={} diff --git a/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.test.tsx b/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.test.tsx index 3970942ee1..00d36e5e13 100644 --- a/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.test.tsx +++ b/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.test.tsx @@ -123,10 +123,7 @@ describe('', () => { ); fireEvent.click(screen.getByTestId('processing-status-picker-expand')); - - fireEvent.click( - screen.getByTestId('processing-status-checkbox-label-Is Orphan'), - ); + fireEvent.click(screen.getByText('Is Orphan')); expect(updateFilters).toHaveBeenCalledWith({ orphan: undefined, }); diff --git a/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.tsx b/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.tsx index 237e2d9544..01a6e0188d 100644 --- a/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.tsx +++ b/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.tsx @@ -18,6 +18,7 @@ import { EntityErrorFilter, EntityOrphanFilter } from '../../filters'; import { Box, Checkbox, + FormControlLabel, makeStyles, TextField, Typography, @@ -82,14 +83,17 @@ export const EntityProcessingStatusPicker = () => { errorChange(value.includes('Has Error')); }} renderOption={(option, { selected }) => ( -
- - {option} -
+ + } + onClick={event => event.preventDefault()} + label={option} + /> )} size="small" popupIcon={ From 3e8c94b4e2472b0a8fb563487b3b54b807e2156b Mon Sep 17 00:00:00 2001 From: Frederic Kayser Date: Fri, 31 Mar 2023 19:08:17 +0200 Subject: [PATCH 090/137] added property to EntityOwnerPicker Signed-off-by: Frederic Kayser --- .../src/components/EntityOwnerPicker/EntityOwnerPicker.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx b/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx index c8a6c64dd6..185de3535a 100644 --- a/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx +++ b/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx @@ -121,6 +121,7 @@ export const EntityOwnerPicker = () => { checked={selected} /> } + onClick={event => event.preventDefault()} label={option} /> )} From f26829e1529449479cc7de23fd77c0cda0f0d03d Mon Sep 17 00:00:00 2001 From: Frederic Kayser Date: Fri, 31 Mar 2023 19:10:16 +0200 Subject: [PATCH 091/137] added property to EntityAutocompletePickerOption Signed-off-by: Frederic Kayser --- .../EntityAutocompletePicker/EntityAutocompletePickerOption.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/catalog-react/src/components/EntityAutocompletePicker/EntityAutocompletePickerOption.tsx b/plugins/catalog-react/src/components/EntityAutocompletePicker/EntityAutocompletePickerOption.tsx index 51b57257a9..8c218a352c 100644 --- a/plugins/catalog-react/src/components/EntityAutocompletePicker/EntityAutocompletePickerOption.tsx +++ b/plugins/catalog-react/src/components/EntityAutocompletePicker/EntityAutocompletePickerOption.tsx @@ -40,6 +40,7 @@ export const EntityAutocompletePickerOption = memo((props: Props) => { } label={label} + onClick={event => event.preventDefault()} /> ); }); From b649e39e728e28066c3a5aff26ab27dd3fa8c98c Mon Sep 17 00:00:00 2001 From: Alec Jacobs Date: Fri, 31 Mar 2023 16:28:43 -0700 Subject: [PATCH 092/137] fix(processing): stitch source entities that have new relations of different type Signed-off-by: Alec Jacobs --- .../DefaultCatalogProcessingEngine.test.ts | 243 ++++++++++++++++++ .../DefaultCatalogProcessingEngine.ts | 35 ++- 2 files changed, 265 insertions(+), 13 deletions(-) diff --git a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.test.ts b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.test.ts index a358f1d07e..3002218d89 100644 --- a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.test.ts +++ b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.test.ts @@ -452,4 +452,247 @@ describe('DefaultCatalogProcessingEngine', () => { ); await engine.stop(); }); + + it('should not stitch sources entities when relations are the same', async () => { + const engine = new DefaultCatalogProcessingEngine( + getVoidLogger(), + db, + orchestrator, + stitcher, + () => hash, + 100, + ); + + db.transaction.mockImplementation(cb => cb((() => {}) as any)); + + const entity = { + apiVersion: '1', + kind: 'k', + metadata: { name: 'me', namespace: 'ns' }, + }; + const processableEntity = { + entityRef: 'foo', + id: '1', + unprocessedEntity: entity, + resultHash: '', + state: [] as any, + nextUpdateAt: DateTime.now(), + lastDiscoveryAt: DateTime.now(), + }; + + db.listParents.mockResolvedValue({ entityRefs: [] }); + db.getProcessableEntities.mockResolvedValueOnce({ + items: [processableEntity], + }); + db.updateProcessedEntity.mockImplementationOnce(async () => ({ + previous: { + relations: [ + { + originating_entity_id: '', + type: 't', + source_entity_ref: 'k:ns/other1', + target_entity_ref: 'k:ns/me', + }, + { + originating_entity_id: '', + type: 't', + source_entity_ref: 'k:ns/other2', + target_entity_ref: 'k:ns/me', + }, + ], + }, + })); + + orchestrator.process.mockResolvedValueOnce({ + ok: true, + completedEntity: entity, + relations: [ + { + type: 't', + source: { kind: 'k', namespace: 'ns', name: 'other1' }, + target: { kind: 'k', namespace: 'ns', name: 'me' }, + }, + { + type: 't', + source: { kind: 'k', namespace: 'ns', name: 'other2' }, + target: { kind: 'k', namespace: 'ns', name: 'me' }, + }, + ], + errors: [], + deferredEntities: [], + state: {}, + refreshKeys: [], + }); + + await engine.start(); + await waitForExpect(() => { + expect(stitcher.stitch).toHaveBeenCalledTimes(1); + }); + expect([...stitcher.stitch.mock.calls[0][0]]).toEqual( + expect.arrayContaining(['k:ns/me']), + ); + await engine.stop(); + }); + + it('should stitch sources entities when new relation of different type added', async () => { + const engine = new DefaultCatalogProcessingEngine( + getVoidLogger(), + db, + orchestrator, + stitcher, + () => hash, + 100, + ); + + db.transaction.mockImplementation(cb => cb((() => {}) as any)); + + const entity = { + apiVersion: '1', + kind: 'k', + metadata: { name: 'me', namespace: 'ns' }, + }; + const processableEntity = { + entityRef: 'foo', + id: '1', + unprocessedEntity: entity, + resultHash: '', + state: [] as any, + nextUpdateAt: DateTime.now(), + lastDiscoveryAt: DateTime.now(), + }; + + db.listParents.mockResolvedValue({ entityRefs: [] }); + db.getProcessableEntities.mockResolvedValueOnce({ + items: [processableEntity], + }); + db.updateProcessedEntity.mockImplementationOnce(async () => ({ + previous: { + relations: [ + { + originating_entity_id: '', + type: 't', + source_entity_ref: 'k:ns/other1', + target_entity_ref: 'k:ns/me', + }, + { + originating_entity_id: '', + type: 't', + source_entity_ref: 'k:ns/other2', + target_entity_ref: 'k:ns/me', + }, + ], + }, + })); + + orchestrator.process.mockResolvedValueOnce({ + ok: true, + completedEntity: entity, + relations: [ + { + type: 't', + source: { kind: 'k', namespace: 'ns', name: 'other1' }, + target: { kind: 'k', namespace: 'ns', name: 'me' }, + }, + { + type: 't', + source: { kind: 'k', namespace: 'ns', name: 'other2' }, + target: { kind: 'k', namespace: 'ns', name: 'me' }, + }, + { + type: 'u', + source: { kind: 'k', namespace: 'ns', name: 'other2' }, + target: { kind: 'k', namespace: 'ns', name: 'me' }, + }, + ], + errors: [], + deferredEntities: [], + state: {}, + refreshKeys: [], + }); + + await engine.start(); + await waitForExpect(() => { + expect(stitcher.stitch).toHaveBeenCalledTimes(1); + }); + expect([...stitcher.stitch.mock.calls[0][0]]).toEqual( + expect.arrayContaining(['k:ns/me', 'k:ns/other2']), + ); + await engine.stop(); + }); + + it('should stitch sources entities when relation is removed', async () => { + const engine = new DefaultCatalogProcessingEngine( + getVoidLogger(), + db, + orchestrator, + stitcher, + () => hash, + 100, + ); + + db.transaction.mockImplementation(cb => cb((() => {}) as any)); + + const entity = { + apiVersion: '1', + kind: 'k', + metadata: { name: 'me', namespace: 'ns' }, + }; + const processableEntity = { + entityRef: 'foo', + id: '1', + unprocessedEntity: entity, + resultHash: '', + state: [] as any, + nextUpdateAt: DateTime.now(), + lastDiscoveryAt: DateTime.now(), + }; + + db.listParents.mockResolvedValue({ entityRefs: [] }); + db.getProcessableEntities.mockResolvedValueOnce({ + items: [processableEntity], + }); + db.updateProcessedEntity.mockImplementationOnce(async () => ({ + previous: { + relations: [ + { + originating_entity_id: '', + type: 't', + source_entity_ref: 'k:ns/other1', + target_entity_ref: 'k:ns/me', + }, + { + originating_entity_id: '', + type: 't', + source_entity_ref: 'k:ns/other2', + target_entity_ref: 'k:ns/me', + }, + ], + }, + })); + + orchestrator.process.mockResolvedValueOnce({ + ok: true, + completedEntity: entity, + relations: [ + { + type: 't', + source: { kind: 'k', namespace: 'ns', name: 'other1' }, + target: { kind: 'k', namespace: 'ns', name: 'me' }, + }, + ], + errors: [], + deferredEntities: [], + state: {}, + refreshKeys: [], + }); + + await engine.start(); + await waitForExpect(() => { + expect(stitcher.stitch).toHaveBeenCalledTimes(1); + }); + expect([...stitcher.stitch.mock.calls[0][0]]).toEqual( + expect.arrayContaining(['k:ns/me', 'k:ns/other2']), + ); + await engine.stop(); + }); }); diff --git a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts index c8f159b195..20dd325a71 100644 --- a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts +++ b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts @@ -199,7 +199,7 @@ export class DefaultCatalogProcessingEngine implements CatalogProcessingEngine { } result.completedEntity.metadata.uid = id; - let oldRelationSources: Set; + let oldRelationSources: Map; await this.processingDatabase.transaction(async tx => { const { previous } = await this.processingDatabase.updateProcessedEntity(tx, { @@ -212,28 +212,37 @@ export class DefaultCatalogProcessingEngine implements CatalogProcessingEngine { locationKey, refreshKeys: result.refreshKeys, }); - oldRelationSources = new Set( - previous.relations.map(r => r.source_entity_ref), + oldRelationSources = new Map( + previous.relations.map(r => [ + `${r.source_entity_ref}:${r.target_entity_ref}:${r.type}`, + r.source_entity_ref, + ]), ); }); - const newRelationSources = new Set( - result.relations.map(relation => - stringifyEntityRef(relation.source), - ), + const newRelationSources = new Map( + result.relations.map(relation => { + const sourceEntityRef = stringifyEntityRef(relation.source); + return [ + `${sourceEntityRef}:${stringifyEntityRef(relation.target)}:${ + relation.type + }`, + sourceEntityRef, + ]; + }), ); const setOfThingsToStitch = new Set([ stringifyEntityRef(result.completedEntity), ]); - newRelationSources.forEach(r => { - if (!oldRelationSources.has(r)) { - setOfThingsToStitch.add(r); + newRelationSources.forEach((sourceEntityRef, uniqueKey) => { + if (!oldRelationSources.has(uniqueKey)) { + setOfThingsToStitch.add(sourceEntityRef); } }); - oldRelationSources!.forEach(r => { - if (!newRelationSources.has(r)) { - setOfThingsToStitch.add(r); + oldRelationSources!.forEach((sourceEntityRef, uniqueKey) => { + if (!newRelationSources.has(uniqueKey)) { + setOfThingsToStitch.add(sourceEntityRef); } }); From c36b89f2af324fb2433ce8bb7a89534c92a4e27b Mon Sep 17 00:00:00 2001 From: Alec Jacobs Date: Fri, 31 Mar 2023 16:37:00 -0700 Subject: [PATCH 093/137] chore: generate changeset Signed-off-by: Alec Jacobs --- .changeset/six-jobs-hear.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/six-jobs-hear.md diff --git a/.changeset/six-jobs-hear.md b/.changeset/six-jobs-hear.md new file mode 100644 index 0000000000..3e9d10f0e9 --- /dev/null +++ b/.changeset/six-jobs-hear.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Fixed bug in the `DefaultCatalogProcessingEngine` where entities that contained multiple different types of relations for the same source entity would not properly trigger stitching for that source entity. From c546627cceb0214a17cf1cc27b8c9142822a87f9 Mon Sep 17 00:00:00 2001 From: Ke Ma Date: Sat, 1 Apr 2023 10:58:43 +0200 Subject: [PATCH 094/137] fix changeset Signed-off-by: Ke Ma --- .changeset/eight-trainers-smoke.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/eight-trainers-smoke.md b/.changeset/eight-trainers-smoke.md index 338df0d44e..9e4aaf3c9e 100644 --- a/.changeset/eight-trainers-smoke.md +++ b/.changeset/eight-trainers-smoke.md @@ -2,4 +2,4 @@ '@backstage/catalog-client': minor --- -Fixed bug in queryEntities of CatalogClient where the sortField is supposed to be changed to orderField. +Fixed bug in `queryEntities` of `CatalogClient` where the `sortField` is supposed to be changed to `orderField`. From 199905a9144a75844428517db069439a24932c9b Mon Sep 17 00:00:00 2001 From: Ke Ma Date: Sat, 1 Apr 2023 12:59:22 +0200 Subject: [PATCH 095/137] fix test Signed-off-by: Ke Ma --- packages/catalog-client/src/CatalogClient.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/catalog-client/src/CatalogClient.test.ts b/packages/catalog-client/src/CatalogClient.test.ts index 53bb55b95f..f5c221569d 100644 --- a/packages/catalog-client/src/CatalogClient.test.ts +++ b/packages/catalog-client/src/CatalogClient.test.ts @@ -352,7 +352,7 @@ describe('CatalogClient', () => { ], }); expect(mockedEndpoint.mock.calls[0][0].url.search).toBe( - '?limit=100&sortField=metadata.name,asc&sortField=metadata.uid,desc&fields=a,b&fullTextFilterTerm=query', + '?limit=100&orderField=metadata.name,asc&orderField=metadata.uid,desc&fields=a,b&fullTextFilterTerm=query', ); }); From eff37f3b397014875ba4ecdd78b9d07439640f74 Mon Sep 17 00:00:00 2001 From: tgroenbaek <129692070+tgroenbaek@users.noreply.github.com> Date: Sun, 2 Apr 2023 22:29:23 +0200 Subject: [PATCH 096/137] Update ADOPTERS.md Signed-off-by: tgroenbaek <129692070+tgroenbaek@users.noreply.github.com> --- ADOPTERS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ADOPTERS.md b/ADOPTERS.md index 885bd8b978..ead6471782 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -236,4 +236,4 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [CORS.gmbh](https://www.cors.gmbh) | [@dpfaffenbauer](https://github.com/dpfaffenbauer) | Developer Portal for our Projects we develop for our Customers and Hosting them On Kubernetes. | | [Comcast](https://comcast.github.io/) | [Ryan Emerle](https://github.com/remerle) | Developer portal enabling discovery of products, services, and documentation throughout the enterprise to ultimately reduce friction and improve time-to-market. | | [Syntasso](https://www.syntasso.io/) | [@syntassodev](https://github.com/syntassodev) | Backstage is used as a optional UI for the [Kratix project](https://kratix.io), a framework for building platforms. - +| [Bankdata](https://www.bankdata.dk) | [Thomas Grønbæk](https://www.linkedin.com/in/thomas-grønbæk/) | We are assessing Backstage as our internal developer portal @Bankdata. Goal is to reduce cognitive load and friction for developers and thereby improving developer experience, onboarding and productivity. Expect use of Software Catalog for discoverability and ownership, Tech Docs and Software Templates to integrate tooling and best practices. From f6059785f6e0c8dfa0b32120ac10dc28b291950f Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Mon, 3 Apr 2023 08:59:51 +0200 Subject: [PATCH 097/137] docs: update backend system guide Co-authored-by: Emma Indal Signed-off-by: Camila Belo --- docs/features/search/how-to-guides.md | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/docs/features/search/how-to-guides.md b/docs/features/search/how-to-guides.md index abb29ab4eb..7de37cb624 100644 --- a/docs/features/search/how-to-guides.md +++ b/docs/features/search/how-to-guides.md @@ -376,7 +376,7 @@ There are other more specific search results layout components that also accept Recently, the Backstage maintainers [announced the new Backend System](https://backstage.io/blog/2023/02/15/backend-system-alpha). The search plugins are now migrated to support the new backend system. In this guide you will learn how to update your backend set up. -In packages/backend-next/index.ts +In "packages/backend-next/index.ts", install the search plugin [1], the search engine [2], and the search collators/decorators modules [3]: ```ts import { searchPlugin } from '@backstage/plugin-search-backend/alpha'; @@ -386,14 +386,27 @@ import { searchModuleTechDocsCollator } from '@backstage/plugin-search-backend-m import { searchModuleExploreCollator } from '@backstage/plugin-search-backend-module-explore/alpha'; const backend = createBackend(); -// adding the search plugin to the backend +// [1] adding the search plugin to the backend backend.add(searchPlugin()); -// (optional) the default search engine is Lunr, if you want to extend the search backend with another search engine. +// [2] (optional) the default search engine is Lunr, if you want to extend the search backend with another search engine. backend.add(searchModuleElasticsearchEngine()); -// extending search with collator modules to start index documents, take in optional schedule parameters. +// [3] extending search with collator modules to start index documents, take in optional schedule parameters. backend.add(searchModuleCatalogCollator()); backend.add(searchModuleTechDocsCollator()); backend.add(searchModuleExploreCollator()); backend.start(); ``` + +To create your own collators/decorators modules, please use the [searchModuleCatalogCollator](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-catalog/src/alpha.ts#L49) as an example, we recommend that modules are separated by plugin packages (e.g. `search-backend-module-`). You can also find the available search engines and collator/decorator modules documentation in the Alpha API reports: + +**Search engine modules** + +- Postgres [module](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-pg/alpha-api-report.md); +- Elasticsearch [module](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-elasticsearch/alpha-api-report.md). + +**Search collator/decorator modules** + +- Catalog [module](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-catalog/alpha-api-report.md); +- Explore [module](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-explore/alpha-api-report.md); +- TechDocs [module](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-techdocs/alpha-api-report.md). From 9649834db584917886e1b92353d894868f227202 Mon Sep 17 00:00:00 2001 From: Andy Ladjadj Date: Mon, 3 Apr 2023 10:23:42 +0200 Subject: [PATCH 098/137] docs(adopters): update leboncoin status Signed-off-by: Andy Ladjadj --- ADOPTERS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ADOPTERS.md b/ADOPTERS.md index 885bd8b978..1e165be598 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -119,7 +119,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [Marks & Spencer](https://www.marksandspencer.com/) | [Kamal Cheriyath](https://github.com/kcheriyath) | Centralised discovery, adoption and devops automation hub for Engineering & Architecture. | | [McKesson](https://www.mckesson.com/) | [Agnel Antony](https://github.com/aantony2) | Internal Developer Platform for developer gated CI/CD templates, technical documentation, cloud automation service catalog, etc. | | [World Fuel Services](https://www.wfscorp.com/) | [Anirudh Kurapathi](https://github.com/anirudhkurapati), [Alex Kwon](https://github.com/alexkwon), [Lester Hernandez](https://github.com/lhernandez-wfscorp), [Avi Boru](https://github.com/aviboru), [Vardhan Annapureddy](https://github.com/harshaaws) | Internal Developer Portal, service catalog product, API's, Software Templates, tech docs and more. | -| [leboncoin](https://www.leboncoin.fr/) | [Andy Ladjadj](https://github.com/aladjadj) | Centralize our multiple UI in a single portal. Simplify onbording, new features and harmonize how people search information. Core features (catalog,api,docs,scafolder) are good to start the adoption. status: internal beta. | +| [leboncoin](https://www.leboncoin.fr/) | [Andy Ladjadj](https://github.com/aladjadj) | Centralize our multiple UI in a single portal. Simplify onbording, new features and harmonize how people search information. | | [Contentful](https://www.contentful.com) | [James Bourne](https://github.com/jamesmbourne) | Centralized documentation of service ownership, APIs, and documentation, and new service creation with a custom scaffolder - [full case study with Roadie](https://roadie.io/case-studies/maintaining-velocity-through-hypergrowth-contentful/). | | [Back Market](https://www.backmarket.com) | [Sami Farhat](https://github.com/skfarhat) | Internal Developer Portal featuring catalog, tech-radar, ownership management, component creation (scaffolder) and centralized infrastructure management -- probably more to come. | | [Avalia Systems](https://avalia.io) | [Olivier Liechti](https://github.com/wasadigi), [Fabio Velloso](https://github.com/fabiovelloso) | Innersource, software analytics, knowledge base for 360 software assessments, collaborative applications, hub for tracking and sharing IP assets. | @@ -227,7 +227,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [Booking.com](https://www.linkedin.com/company/booking.com/) | [Mesut Yilmazyildirim](https://www.linkedin.com/in/myilmazyildirim) | We are adopting Backstage as the new reliability platform inside the company. We are migrating UIs of our internal developer tools to Backstage for a better user experience. | [Swissquote Bank](https://swissquote.com/company/jobs/open-positions) | [Bruno Rocha](https://www.linkedin.com/in/bruno-rocha1/) | Integrating Backstage as the visualization layer & tactical overview of our services and teams. | [XP Inc.](https://www.linkedin.com/company/xpinc/) | [Gabriel Santos](https://www.linkedin.com/in/gabriel-santos-6bb740a/) | Developer Portal Catalog (components, APIs, resources, users, groups) and organization relations. -| [OVO Energy](https://www.ovoenergy.com/) | [Michael Wizner](https://github.com/mwz), [Dan Laird](https://github.com/dlaird-ovo), [Samantha Betts](https://github.com/sammbetts) | Developer Experience Tool with an aim to to improve processes, boost productivity, finding of information/docs and building tech engagement throughout the business. +| [OVO Energy](https://www.ovoenergy.com/) | [Michael Wizner](https://github.com/mwz), [Dan Laird](https://github.com/dlaird-ovo), [Samantha Betts](https://github.com/sammbetts) | Developer Experience Tool with an aim to to improve processes, boost productivity, finding of information/docs and building tech engagement throughout the business. | [MusicTribe](https://careers.musictribe.com/) | [Alex Ford](mailto:alex.j.ford@gmail.com), [Tiago Barbosa](https://github.com/t1agob) | We are starting to use Backstage as a developer portal to share API specifications and documentation, to quickly onboard new projects with the software templates, and to help developers discover software through the catalog. | [Cazoo](https://www.cazoo.co.uk/) | [Abz Mungul](https://www.linkedin.com/in/abzmungul/), [Scott Edwards](https://www.linkedin.com/in/scott-edwards-tech/) | We're assessing Backstage as our developer platform at Cazoo with a focus on reducing cognitive load for our engineers. We're currently aiming for 3 outcomes: creating visibility into service ownership across teams, improving the discoverability of event schemas and relationships, and improving the discoverability of technical documentation and best practices. | | [Gumtree](https://www.gumtree.com.au) | [Kumar Gaurav](https://www.linkedin.com/in/kumargaurav517) | We are starting to use it as a single place to find all component information in a distributed architecture. | From 070ca41f0f5ac7a846570877a66b763e6d7bfcf9 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 3 Apr 2023 10:28:58 +0200 Subject: [PATCH 099/137] rollbar-backend: remove camelize-ts dep Signed-off-by: Patrik Oldsberg --- plugins/rollbar-backend/package.json | 1 - .../src/api/RollbarApi.test.ts | 24 +++++++++++++++---- plugins/rollbar-backend/src/api/RollbarApi.ts | 17 ++++++++++++- yarn.lock | 8 ------- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/plugins/rollbar-backend/package.json b/plugins/rollbar-backend/package.json index eb854f27ec..4ba138d6ca 100644 --- a/plugins/rollbar-backend/package.json +++ b/plugins/rollbar-backend/package.json @@ -36,7 +36,6 @@ "@backstage/backend-common": "workspace:^", "@backstage/config": "workspace:^", "@types/express": "^4.17.6", - "camelize-ts": "^2.3.0", "compression": "^1.7.4", "cors": "^2.8.5", "express": "^4.17.1", diff --git a/plugins/rollbar-backend/src/api/RollbarApi.test.ts b/plugins/rollbar-backend/src/api/RollbarApi.test.ts index 430fc205c9..dce53a9687 100644 --- a/plugins/rollbar-backend/src/api/RollbarApi.test.ts +++ b/plugins/rollbar-backend/src/api/RollbarApi.test.ts @@ -19,7 +19,6 @@ import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; import { getVoidLogger } from '@backstage/backend-common'; -import { RollbarProject } from './types'; describe('RollbarApi', () => { describe('getRequestHeaders', () => { @@ -38,9 +37,15 @@ describe('RollbarApi', () => { const mockBaseUrl = 'https://api.rollbar.com/api/1'; - const mockProjects: RollbarProject[] = [ - { id: 123, name: 'abc', accountId: 1, status: 'enabled' }, - { id: 456, name: 'xyz', accountId: 1, status: 'enabled' }, + const mockProjects = [ + { id: 123, name: 'abc', account_id: 1, status: 'enabled' }, + { + id: 456, + name: 'xyz', + account_id: 1, + status: 'enabled', + extra_nested: { nested_value: [{ value_here: 1 }] }, + }, ]; const setupHandlers = () => { @@ -55,7 +60,16 @@ describe('RollbarApi', () => { setupHandlers(); const api = new RollbarApi('my-access-token', getVoidLogger()); const projects = await api.getAllProjects(); - expect(projects).toEqual(mockProjects); + expect(projects).toEqual([ + { id: 123, name: 'abc', accountId: 1, status: 'enabled' }, + { + id: 456, + name: 'xyz', + accountId: 1, + status: 'enabled', + extraNested: { nestedValue: [{ valueHere: 1 }] }, + }, + ]); }); }); }); diff --git a/plugins/rollbar-backend/src/api/RollbarApi.ts b/plugins/rollbar-backend/src/api/RollbarApi.ts index da620fcafc..3d94b8bb66 100644 --- a/plugins/rollbar-backend/src/api/RollbarApi.ts +++ b/plugins/rollbar-backend/src/api/RollbarApi.ts @@ -15,7 +15,7 @@ */ import { Logger } from 'winston'; -import camelize from 'camelize-ts'; +import { camelCase } from 'lodash'; import { buildQuery } from '../util'; import { RollbarItemCount, @@ -30,6 +30,21 @@ const baseUrl = 'https://api.rollbar.com/api/1'; const buildUrl = (url: string) => `${baseUrl}${url}`; +function camelize(val: T): T { + if (typeof val === 'string') { + return camelCase(val) as T; + } + if (Array.isArray(val)) { + return val.map(camelize) as T; + } + if (val && typeof val === 'object') { + return Object.fromEntries( + Object.entries(val).map(([k, v]) => [camelize(k), camelize(v)]), + ) as T; + } + return val; +} + /** @public */ export class RollbarApi { private projectMap: ProjectMetadataMap | undefined; diff --git a/yarn.lock b/yarn.lock index 379dad5674..d4c9cfe9f4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7825,7 +7825,6 @@ __metadata: "@backstage/config": "workspace:^" "@types/express": ^4.17.6 "@types/supertest": ^2.0.8 - camelize-ts: ^2.3.0 compression: ^1.7.4 cors: ^2.8.5 express: ^4.17.1 @@ -19242,13 +19241,6 @@ __metadata: languageName: node linkType: hard -"camelize-ts@npm:^2.3.0": - version: 2.3.0 - resolution: "camelize-ts@npm:2.3.0" - checksum: 0f33c65468cc0883128bb15df96f244b21b94aa80094b358bda5a07db28b1f6e79fddb96b5af57cd754c6c8e07dc40ad2cb0d73b79b2ad584683babc57675ea6 - languageName: node - linkType: hard - "camelize@npm:^1.0.0": version: 1.0.0 resolution: "camelize@npm:1.0.0" From ff5a5cddab75780569af2a5aca88ec51e36615a2 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 3 Apr 2023 11:00:08 +0200 Subject: [PATCH 100/137] rollbar-backend: fix camelize fix Signed-off-by: Patrik Oldsberg --- plugins/rollbar-backend/src/api/RollbarApi.test.ts | 4 ++-- plugins/rollbar-backend/src/api/RollbarApi.ts | 5 +---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/plugins/rollbar-backend/src/api/RollbarApi.test.ts b/plugins/rollbar-backend/src/api/RollbarApi.test.ts index dce53a9687..25bd931af6 100644 --- a/plugins/rollbar-backend/src/api/RollbarApi.test.ts +++ b/plugins/rollbar-backend/src/api/RollbarApi.test.ts @@ -44,7 +44,7 @@ describe('RollbarApi', () => { name: 'xyz', account_id: 1, status: 'enabled', - extra_nested: { nested_value: [{ value_here: 1 }] }, + extra_nested: { nested_value: [{ value_here: 'hello_world' }] }, }, ]; @@ -67,7 +67,7 @@ describe('RollbarApi', () => { name: 'xyz', accountId: 1, status: 'enabled', - extraNested: { nestedValue: [{ valueHere: 1 }] }, + extraNested: { nestedValue: [{ valueHere: 'hello_world' }] }, }, ]); }); diff --git a/plugins/rollbar-backend/src/api/RollbarApi.ts b/plugins/rollbar-backend/src/api/RollbarApi.ts index 3d94b8bb66..98dbc19119 100644 --- a/plugins/rollbar-backend/src/api/RollbarApi.ts +++ b/plugins/rollbar-backend/src/api/RollbarApi.ts @@ -31,15 +31,12 @@ const baseUrl = 'https://api.rollbar.com/api/1'; const buildUrl = (url: string) => `${baseUrl}${url}`; function camelize(val: T): T { - if (typeof val === 'string') { - return camelCase(val) as T; - } if (Array.isArray(val)) { return val.map(camelize) as T; } if (val && typeof val === 'object') { return Object.fromEntries( - Object.entries(val).map(([k, v]) => [camelize(k), camelize(v)]), + Object.entries(val).map(([k, v]) => [camelCase(k), camelize(v)]), ) as T; } return val; From 7e60bee2deaa57e93657650d1a1a2d44bc493a57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Mon, 3 Apr 2023 11:05:31 +0200 Subject: [PATCH 101/137] Split out the width as the only prop-using class for the Bar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/stale-paws-sparkle.md | 5 +++++ packages/core-components/src/layout/Sidebar/Bar.tsx | 11 +++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 .changeset/stale-paws-sparkle.md diff --git a/.changeset/stale-paws-sparkle.md b/.changeset/stale-paws-sparkle.md new file mode 100644 index 0000000000..ec4284d44f --- /dev/null +++ b/.changeset/stale-paws-sparkle.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Split the `BackstageSidebar` style `drawer` class, such that the `width` property is in a separate `drawerWidth` class instead. This makes it such that you can style the `drawer` class in your theme again. diff --git a/packages/core-components/src/layout/Sidebar/Bar.tsx b/packages/core-components/src/layout/Sidebar/Bar.tsx index 69b77dd5e1..815d6bc0d6 100644 --- a/packages/core-components/src/layout/Sidebar/Bar.tsx +++ b/packages/core-components/src/layout/Sidebar/Bar.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { BackstageTheme } from '@backstage/theme'; import Box from '@material-ui/core/Box'; import Button from '@material-ui/core/Button'; @@ -39,7 +40,7 @@ import { useSidebarPinState } from './SidebarPinStateContext'; export type SidebarClassKey = 'drawer' | 'drawerOpen'; const useStyles = makeStyles( theme => ({ - drawer: props => ({ + drawer: { display: 'flex', flexFlow: 'column nowrap', alignItems: 'flex-start', @@ -52,7 +53,6 @@ const useStyles = makeStyles( overflowX: 'hidden', msOverflowStyle: 'none', scrollbarWidth: 'none', - width: props.sidebarConfig.drawerWidthClosed, transition: theme.transitions.create('width', { easing: theme.transitions.easing.sharp, duration: theme.transitions.duration.shortest, @@ -63,6 +63,9 @@ const useStyles = makeStyles( '&::-webkit-scrollbar': { display: 'none', }, + }, + drawerWidth: props => ({ + width: props.sidebarConfig.drawerWidthClosed, }), drawerOpen: props => ({ width: props.sidebarConfig.drawerWidthOpen, @@ -174,7 +177,7 @@ const DesktopSidebar = (props: DesktopSidebarProps) => { const isOpen = (state === State.Open && !isSmallScreen) || isPinned; /** - * Close/Open Sidebar directily without delays. Also toggles `SidebarPinState` to avoid hidden content behind Sidebar. + * Close/Open Sidebar directly without delays. Also toggles `SidebarPinState` to avoid hidden content behind Sidebar. */ const setOpen = (open: boolean) => { if (open) { @@ -199,7 +202,7 @@ const DesktopSidebar = (props: DesktopSidebarProps) => { onBlur={disableExpandOnHover ? () => {} : handleClose} > From aa17f094bf9e9fecdd2f5dd30062258c0dfa975b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Apr 2023 09:08:53 +0000 Subject: [PATCH 102/137] chore(deps): update dependency @types/dockerode to v3.3.16 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d4c9cfe9f4..a70bcecc97 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15409,12 +15409,12 @@ __metadata: linkType: hard "@types/dockerode@npm:^3.3.0, @types/dockerode@npm:^3.3.8": - version: 3.3.15 - resolution: "@types/dockerode@npm:3.3.15" + version: 3.3.16 + resolution: "@types/dockerode@npm:3.3.16" dependencies: "@types/docker-modem": "*" "@types/node": "*" - checksum: b8fa13f86c761175a5813eb41fbd1e46d0646f008e5c84738b51c1aa82ce4f3758502efe8c3c583463e7cb7dc77e2faadfff91f4e6274e844e68a0ebf9deeae5 + checksum: ef316e330f8a1a137962d6000cac53bb25b5ba4300e38dd5842f32a6c58bec420278d61526c68865351c48c7e843c9aa45bcbca332737630a0c251e09390bf5b languageName: node linkType: hard From 29f7a6a1f92c82c3ad4331cb50609c3a2923d5db Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Apr 2023 09:16:34 +0000 Subject: [PATCH 103/137] fix(deps): update dependency react-virtualized-auto-sizer to v1.0.11 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d4c9cfe9f4..4a002f936c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -34739,12 +34739,12 @@ __metadata: linkType: hard "react-virtualized-auto-sizer@npm:^1.0.6": - version: 1.0.7 - resolution: "react-virtualized-auto-sizer@npm:1.0.7" + version: 1.0.11 + resolution: "react-virtualized-auto-sizer@npm:1.0.11" peerDependencies: react: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc react-dom: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc - checksum: 7f2f013c422771828c6613c7890f792aa90a033ea2b41c489c67ca2c6793eefa94d25232c1050fdf69cdd626fad9e3821c5003d45fa6fc831184cd09232023c2 + checksum: 2bde1b9b44aa33d1aa6fe10fbfacb8365d0423bd24a83524cca0f152ef24278669fc7a691018e3a534b3b7d6714b3cdd1466f28c857045f5570f6642cf9081eb languageName: node linkType: hard From 31271e2b7cf7f54b4b1811a7ed3d075bfe12138b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Apr 2023 09:46:45 +0000 Subject: [PATCH 104/137] chore(deps): update dependency @types/node-forge to v1.3.2 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index a70bcecc97..92d9f7bd17 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16030,11 +16030,11 @@ __metadata: linkType: hard "@types/node-forge@npm:^1.3.0": - version: 1.3.1 - resolution: "@types/node-forge@npm:1.3.1" + version: 1.3.2 + resolution: "@types/node-forge@npm:1.3.2" dependencies: "@types/node": "*" - checksum: 88d1f85b5e2edfbb475d34c4a47b964edab408b20cec508dc4443b36258971062c2fef760d1eeb3f544fdb5321c710a4e5e2cd8a1a5923e81c53ca1cf6f3a722 + checksum: f532326a616e946e5f6733d1461e7b8d31911bbdfbc480a6337c422053d79c1e22a0776d114a325439e26ae382a640f939d0abf156e24a3c3ca5079d04aa73f6 languageName: node linkType: hard From c85cddd899b98a50d04328338fa6918aceb1352a Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 3 Apr 2023 12:04:03 +0200 Subject: [PATCH 105/137] eslint-plugin: fix auto install yarn add flag Signed-off-by: Patrik Oldsberg --- packages/eslint-plugin/rules/no-undeclared-imports.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/eslint-plugin/rules/no-undeclared-imports.js b/packages/eslint-plugin/rules/no-undeclared-imports.js index 06f0afed46..05a10fb9f9 100644 --- a/packages/eslint-plugin/rules/no-undeclared-imports.js +++ b/packages/eslint-plugin/rules/no-undeclared-imports.js @@ -180,7 +180,7 @@ module.exports = { // The security implication of this is a bit interesting, as crafted add-import // directives could be used to install malicious packages. However, the same is true // for adding malicious packages to package.json, so there's significant difference. - execFileSync('yarn', ['add', ...(flag || []), ...names], { + execFileSync('yarn', ['add', ...([flag] || []), ...names], { cwd: localPkg.dir, stdio: 'inherit', }); From 9dbdcccd200eabe3a8f5237443c6850ea28779d4 Mon Sep 17 00:00:00 2001 From: Renan Mendes Carvalho Date: Wed, 21 Dec 2022 14:56:19 +0100 Subject: [PATCH 106/137] feature(SearchModal): Auto close the search modal upon route change Signed-off-by: Renan Mendes Carvalho --- .../app/src/components/search/SearchModal.tsx | 2 +- .../components/SearchModal/SearchModal.tsx | 7 ++-- .../components/SearchModal/useSearchModal.tsx | 42 +++++++++++++++---- 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/packages/app/src/components/search/SearchModal.tsx b/packages/app/src/components/search/SearchModal.tsx index ea5a156c55..fea80f9952 100644 --- a/packages/app/src/components/search/SearchModal.tsx +++ b/packages/app/src/components/search/SearchModal.tsx @@ -186,7 +186,7 @@ export const SearchModal = ({ toggleModal }: { toggleModal: () => void }) => { - + } /> } /> } /> diff --git a/plugins/search/src/components/SearchModal/SearchModal.tsx b/plugins/search/src/components/SearchModal/SearchModal.tsx index c32c9a5cc3..8035484333 100644 --- a/plugins/search/src/components/SearchModal/SearchModal.tsx +++ b/plugins/search/src/components/SearchModal/SearchModal.tsx @@ -92,7 +92,7 @@ const useStyles = makeStyles(theme => ({ viewResultsLink: { verticalAlign: '0.5em' }, })); -export const Modal = ({ toggleModal }: SearchModalProps) => { +export const Modal = () => { const classes = useStyles(); const navigate = useNavigate(); const { transitions } = useTheme(); @@ -107,9 +107,8 @@ export const Modal = ({ toggleModal }: SearchModalProps) => { }); const handleSearchResultClick = useCallback(() => { - toggleModal(); setTimeout(focusContent, transitions.duration.leavingScreen); - }, [toggleModal, focusContent, transitions]); + }, [focusContent, transitions]); const handleSearchBarKeyDown = useCallback( (e: KeyboardEvent) => { @@ -188,7 +187,7 @@ export const SearchModal = (props: SearchModalProps) => { {open && ( {(children && children({ toggleModal })) ?? ( - + )} )} diff --git a/plugins/search/src/components/SearchModal/useSearchModal.tsx b/plugins/search/src/components/SearchModal/useSearchModal.tsx index db01765f0e..91a2c38bfa 100644 --- a/plugins/search/src/components/SearchModal/useSearchModal.tsx +++ b/plugins/search/src/components/SearchModal/useSearchModal.tsx @@ -14,7 +14,14 @@ * limitations under the License. */ -import React, { ReactNode, useCallback, useContext, useState } from 'react'; +import React, { + ReactNode, + useCallback, + useContext, + useState, + useEffect, +} from 'react'; +import { useLocation } from 'react-router-dom'; import { createVersionedContext, createVersionedValueMap, @@ -96,7 +103,8 @@ export const SearchModalProvider = (props: SearchModalProviderProps) => { /** * Use this hook to manage the state of {@link SearchModal} - * and change its visibility. + * and change its visibility. Monitors route changes setting the hidden state + * to avoid having to call toggleModal on every result click. * * @public * @@ -105,10 +113,6 @@ export const SearchModalProvider = (props: SearchModalProviderProps) => { * functions for changing the visibility of the modal. */ export function useSearchModal(initialState = false) { - // Check for any existing parent context. - const parentContext = useContext(SearchModalContext); - const parentContextValue = parentContext?.atVersion(1); - const [state, setState] = useState({ hidden: !initialState, open: initialState, @@ -132,8 +136,32 @@ export function useSearchModal(initialState = false) { [], ); + // Check for any existing parent context. + const parentContext = useContext(SearchModalContext); + const parentContextValue = parentContext?.atVersion(1); + const isParentContextPresent = !!parentContextValue?.state; + + // Monitor route pathname changes to automatically hide the modal. + const { pathname } = useLocation(); + const [openedPathname, setOpenedPathname] = useState(null); + const { open, hidden } = state; + const isModalOpened = !isParentContextPresent && open && !hidden; + useEffect(() => { + if (isModalOpened) { + setOpenedPathname(pathname); + } + }, [isModalOpened, pathname]); + useEffect(() => { + if (isModalOpened && openedPathname && openedPathname !== pathname) { + setState(prevState => ({ + open: prevState.open, + hidden: true, + })); + } + }, [isModalOpened, openedPathname, pathname]); + // Inherit from parent context, if set. - return parentContextValue?.state + return isParentContextPresent ? parentContextValue : { state, toggleModal, setOpen }; } From 4c916d51875ad2522470fdb7a2b669ec5ff8b7a2 Mon Sep 17 00:00:00 2001 From: Renan Mendes Carvalho Date: Thu, 9 Mar 2023 16:21:59 +0100 Subject: [PATCH 107/137] feature(SearchModal): Simplify solution Co-authored-by: Harry Hogg Signed-off-by: Renan Mendes Carvalho --- .../SearchModal/useSearchModal.test.tsx | 17 ++++++++++---- .../components/SearchModal/useSearchModal.tsx | 23 ++++++------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/plugins/search/src/components/SearchModal/useSearchModal.test.tsx b/plugins/search/src/components/SearchModal/useSearchModal.test.tsx index 424dffff76..26c40d87b9 100644 --- a/plugins/search/src/components/SearchModal/useSearchModal.test.tsx +++ b/plugins/search/src/components/SearchModal/useSearchModal.test.tsx @@ -16,6 +16,7 @@ import { act, renderHook } from '@testing-library/react-hooks'; import { useSearchModal } from './useSearchModal'; +import { BrowserRouter } from 'react-router-dom'; describe('useSearchModal', () => { it.each([ @@ -24,14 +25,18 @@ describe('useSearchModal', () => { ])( 'should return the correct state when initial state is %s', (initialState, result) => { - const rendered = renderHook(() => useSearchModal(initialState)); + const rendered = renderHook(() => useSearchModal(initialState), { + wrapper: BrowserRouter, + }); expect(rendered.result.current.state).toEqual(result); }, ); it('should keep open forever to true once modal is toggled', () => { - const rendered = renderHook(() => useSearchModal()); + const rendered = renderHook(() => useSearchModal(), { + wrapper: BrowserRouter, + }); act(() => rendered.result.current.toggleModal()); expect(rendered.result.current.state).toEqual({ @@ -47,7 +52,9 @@ describe('useSearchModal', () => { }); it('should keep open to false if setOpen(false) is invoked on an initially closed modal', () => { - const rendered = renderHook(() => useSearchModal()); + const rendered = renderHook(() => useSearchModal(), { + wrapper: BrowserRouter, + }); act(() => rendered.result.current.setOpen(false)); expect(rendered.result.current.state).toEqual({ open: false, @@ -56,7 +63,9 @@ describe('useSearchModal', () => { }); it('should keep open forever to true even when the modal transition from opened to closed', () => { - const rendered = renderHook(() => useSearchModal()); + const rendered = renderHook(() => useSearchModal(), { + wrapper: BrowserRouter, + }); act(() => rendered.result.current.setOpen(true)); expect(rendered.result.current.state).toEqual({ diff --git a/plugins/search/src/components/SearchModal/useSearchModal.tsx b/plugins/search/src/components/SearchModal/useSearchModal.tsx index 91a2c38bfa..5298768700 100644 --- a/plugins/search/src/components/SearchModal/useSearchModal.tsx +++ b/plugins/search/src/components/SearchModal/useSearchModal.tsx @@ -26,6 +26,7 @@ import { createVersionedContext, createVersionedValueMap, } from '@backstage/version-bridge'; +import { useUpdateEffect } from 'react-use'; /** * The state of the search modal, as well as functions for changing the modal's @@ -143,22 +144,12 @@ export function useSearchModal(initialState = false) { // Monitor route pathname changes to automatically hide the modal. const { pathname } = useLocation(); - const [openedPathname, setOpenedPathname] = useState(null); - const { open, hidden } = state; - const isModalOpened = !isParentContextPresent && open && !hidden; - useEffect(() => { - if (isModalOpened) { - setOpenedPathname(pathname); - } - }, [isModalOpened, pathname]); - useEffect(() => { - if (isModalOpened && openedPathname && openedPathname !== pathname) { - setState(prevState => ({ - open: prevState.open, - hidden: true, - })); - } - }, [isModalOpened, openedPathname, pathname]); + useUpdateEffect(() => { + setState(prevState => ({ + open: prevState.open, + hidden: true, + })); + }, [pathname]); // Inherit from parent context, if set. return isParentContextPresent From 3b9e96c536d3640f72d1f3779bfa89c6cecfcf0e Mon Sep 17 00:00:00 2001 From: Renan Mendes Carvalho Date: Thu, 9 Mar 2023 16:30:19 +0100 Subject: [PATCH 108/137] feature(SearchModal): Reverting Modal component toggleModal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Renan Mendes Carvalho --- plugins/search/src/components/SearchModal/SearchModal.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/plugins/search/src/components/SearchModal/SearchModal.tsx b/plugins/search/src/components/SearchModal/SearchModal.tsx index 8035484333..3513eec65d 100644 --- a/plugins/search/src/components/SearchModal/SearchModal.tsx +++ b/plugins/search/src/components/SearchModal/SearchModal.tsx @@ -186,9 +186,7 @@ export const SearchModal = (props: SearchModalProps) => { > {open && ( - {(children && children({ toggleModal })) ?? ( - - )} + {(children && children({ toggleModal })) ?? } )}
From 430b9f28901eef2c3152f7ad185a363980acc636 Mon Sep 17 00:00:00 2001 From: Renan Mendes Carvalho Date: Fri, 10 Mar 2023 16:23:54 +0100 Subject: [PATCH 109/137] test(useSearchModal): Add new test case for location change Signed-off-by: Renan Mendes Carvalho --- .../SearchModal/useSearchModal.test.tsx | 22 +++++++++++++++++-- .../components/SearchModal/useSearchModal.tsx | 8 +------ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/plugins/search/src/components/SearchModal/useSearchModal.test.tsx b/plugins/search/src/components/SearchModal/useSearchModal.test.tsx index 26c40d87b9..0de41e3589 100644 --- a/plugins/search/src/components/SearchModal/useSearchModal.test.tsx +++ b/plugins/search/src/components/SearchModal/useSearchModal.test.tsx @@ -13,10 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - +import React from 'react'; import { act, renderHook } from '@testing-library/react-hooks'; import { useSearchModal } from './useSearchModal'; -import { BrowserRouter } from 'react-router-dom'; +import { BrowserRouter, Router } from 'react-router-dom'; +import { createMemoryHistory } from 'history'; describe('useSearchModal', () => { it.each([ @@ -79,4 +80,21 @@ describe('useSearchModal', () => { hidden: true, }); }); + + it('should hide when location changes', () => { + const history = createMemoryHistory({ initialEntries: ['/'] }); + + const rendered = renderHook(() => useSearchModal(true), { + wrapper: ({ children }) => ( + + {children} + + ), + }); + + expect(rendered.result.current.state.hidden).toBe(false); + act(() => history.push('/new/path')); + rendered.rerender(); + expect(rendered.result.current.state.hidden).toBe(true); + }); }); diff --git a/plugins/search/src/components/SearchModal/useSearchModal.tsx b/plugins/search/src/components/SearchModal/useSearchModal.tsx index 5298768700..0700898c0b 100644 --- a/plugins/search/src/components/SearchModal/useSearchModal.tsx +++ b/plugins/search/src/components/SearchModal/useSearchModal.tsx @@ -14,13 +14,7 @@ * limitations under the License. */ -import React, { - ReactNode, - useCallback, - useContext, - useState, - useEffect, -} from 'react'; +import React, { ReactNode, useCallback, useContext, useState } from 'react'; import { useLocation } from 'react-router-dom'; import { createVersionedContext, From d6b73b0380da35ce09e79ec28663a5654e048d44 Mon Sep 17 00:00:00 2001 From: Renan Mendes Carvalho Date: Fri, 10 Mar 2023 16:39:38 +0100 Subject: [PATCH 110/137] changeset(plugin-search): Search modal auto closes on location change Signed-off-by: Renan Mendes Carvalho --- .changeset/unlucky-snakes-smile.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/unlucky-snakes-smile.md diff --git a/.changeset/unlucky-snakes-smile.md b/.changeset/unlucky-snakes-smile.md new file mode 100644 index 0000000000..ec0f9bf947 --- /dev/null +++ b/.changeset/unlucky-snakes-smile.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search': minor +--- + +Search modal auto closes on location change From 68fcb7a675a0633b8f89b4b541d2a6c5d7b48b84 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 3 Apr 2023 12:14:49 +0200 Subject: [PATCH 111/137] Update packages/eslint-plugin/rules/no-undeclared-imports.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Patrik Oldsberg --- packages/eslint-plugin/rules/no-undeclared-imports.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/eslint-plugin/rules/no-undeclared-imports.js b/packages/eslint-plugin/rules/no-undeclared-imports.js index 05a10fb9f9..c986b52c65 100644 --- a/packages/eslint-plugin/rules/no-undeclared-imports.js +++ b/packages/eslint-plugin/rules/no-undeclared-imports.js @@ -180,7 +180,7 @@ module.exports = { // The security implication of this is a bit interesting, as crafted add-import // directives could be used to install malicious packages. However, the same is true // for adding malicious packages to package.json, so there's significant difference. - execFileSync('yarn', ['add', ...([flag] || []), ...names], { + execFileSync('yarn', ['add', ...(flag ? [flag] : []), ...names], { cwd: localPkg.dir, stdio: 'inherit', }); From 24e3daa6dcf9c7fb2fbe1c0938c753878040ffbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Mon, 3 Apr 2023 12:10:44 +0200 Subject: [PATCH 112/137] fixup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- plugins/search/package.json | 1 + .../search/src/components/SearchModal/useSearchModal.tsx | 9 +++++---- yarn.lock | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/plugins/search/package.json b/plugins/search/package.json index d4367778b7..7616a03ffd 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -67,6 +67,7 @@ "@testing-library/user-event": "^14.0.0", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", + "history": "^5.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/search/src/components/SearchModal/useSearchModal.tsx b/plugins/search/src/components/SearchModal/useSearchModal.tsx index 0700898c0b..279484bd47 100644 --- a/plugins/search/src/components/SearchModal/useSearchModal.tsx +++ b/plugins/search/src/components/SearchModal/useSearchModal.tsx @@ -20,7 +20,7 @@ import { createVersionedContext, createVersionedValueMap, } from '@backstage/version-bridge'; -import { useUpdateEffect } from 'react-use'; +import useUpdateEffect from 'react-use/lib/useUpdateEffect'; /** * The state of the search modal, as well as functions for changing the modal's @@ -136,14 +136,15 @@ export function useSearchModal(initialState = false) { const parentContextValue = parentContext?.atVersion(1); const isParentContextPresent = !!parentContextValue?.state; - // Monitor route pathname changes to automatically hide the modal. - const { pathname } = useLocation(); + // Monitor route changes to automatically hide the modal. + const location = useLocation(); + const locationKey = `${location.pathname}${location.search}${location.hash}`; useUpdateEffect(() => { setState(prevState => ({ open: prevState.open, hidden: true, })); - }, [pathname]); + }, [locationKey]); // Inherit from parent context, if set. return isParentContextPresent diff --git a/yarn.lock b/yarn.lock index a70bcecc97..beb214edda 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8450,6 +8450,7 @@ __metadata: "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 cross-fetch: ^3.1.5 + history: ^5.0.0 msw: ^1.0.0 qs: ^6.9.4 react-use: ^17.2.4 From 242a185c7bbee00795128ddb8ecbceab978d5d92 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Apr 2023 14:01:27 +0000 Subject: [PATCH 113/137] chore(deps): update dependency canvas to v2.11.2 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index a70bcecc97..ac3149a893 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19268,14 +19268,14 @@ __metadata: linkType: hard "canvas@npm:^2.10.2": - version: 2.11.0 - resolution: "canvas@npm:2.11.0" + version: 2.11.2 + resolution: "canvas@npm:2.11.2" dependencies: "@mapbox/node-pre-gyp": ^1.0.0 nan: ^2.17.0 node-gyp: latest simple-get: ^3.0.3 - checksum: a69a6e0c90014a1b02e52c4c38a627d1a01ffe9539047bec84105cb3554907a947cf39b4a333be43fc1583dd142b641bb5480a4e23f59c6098618c33bf78f67f + checksum: 61e554aef80022841dc836964534082ec21435928498032562089dfb7736215f039c7d99ee546b0cf10780232d9bf310950f8b4d489dc394e0fb6f6adfc97994 languageName: node linkType: hard From 67140d9f96f7c03474569707884ce3747d6b5d9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Mon, 3 Apr 2023 16:08:42 +0200 Subject: [PATCH 114/137] fixup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/fast-gorillas-approve.md | 5 +++++ packages/core-components/package.json | 2 +- .../src/components/LogViewer/RealLogViewer.tsx | 4 ++-- yarn.lock | 4 ++-- 4 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 .changeset/fast-gorillas-approve.md diff --git a/.changeset/fast-gorillas-approve.md b/.changeset/fast-gorillas-approve.md new file mode 100644 index 0000000000..e162a2cbb0 --- /dev/null +++ b/.changeset/fast-gorillas-approve.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Upgrade `react-virtualized-auto-sizer´ to version `^1.0.11` diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 7f818e089b..76c53a7809 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -66,7 +66,7 @@ "react-syntax-highlighter": "^15.4.5", "react-text-truncate": "^0.19.0", "react-use": "^17.3.2", - "react-virtualized-auto-sizer": "^1.0.6", + "react-virtualized-auto-sizer": "^1.0.11", "react-window": "^1.8.6", "remark-gfm": "^3.0.1", "zen-observable": "^0.10.0", diff --git a/packages/core-components/src/components/LogViewer/RealLogViewer.tsx b/packages/core-components/src/components/LogViewer/RealLogViewer.tsx index 59e0bea44b..adb9eeb760 100644 --- a/packages/core-components/src/components/LogViewer/RealLogViewer.tsx +++ b/packages/core-components/src/components/LogViewer/RealLogViewer.tsx @@ -77,8 +77,8 @@ export function RealLogViewer(props: RealLogViewerProps) { Date: Mon, 3 Apr 2023 15:09:17 +0000 Subject: [PATCH 115/137] chore(deps): update dependency esbuild to v0.17.15 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 182 +++++++++++++++++++++++++++--------------------------- 1 file changed, 91 insertions(+), 91 deletions(-) diff --git a/yarn.lock b/yarn.lock index 40d006519f..f166f76fd3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10008,9 +10008,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/android-arm64@npm:0.17.14" +"@esbuild/android-arm64@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/android-arm64@npm:0.17.15" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -10029,9 +10029,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/android-arm@npm:0.17.14" +"@esbuild/android-arm@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/android-arm@npm:0.17.15" conditions: os=android & cpu=arm languageName: node linkType: hard @@ -10043,9 +10043,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/android-x64@npm:0.17.14" +"@esbuild/android-x64@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/android-x64@npm:0.17.15" conditions: os=android & cpu=x64 languageName: node linkType: hard @@ -10057,9 +10057,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/darwin-arm64@npm:0.17.14" +"@esbuild/darwin-arm64@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/darwin-arm64@npm:0.17.15" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -10071,9 +10071,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/darwin-x64@npm:0.17.14" +"@esbuild/darwin-x64@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/darwin-x64@npm:0.17.15" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -10085,9 +10085,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/freebsd-arm64@npm:0.17.14" +"@esbuild/freebsd-arm64@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/freebsd-arm64@npm:0.17.15" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard @@ -10099,9 +10099,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/freebsd-x64@npm:0.17.14" +"@esbuild/freebsd-x64@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/freebsd-x64@npm:0.17.15" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -10113,9 +10113,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/linux-arm64@npm:0.17.14" +"@esbuild/linux-arm64@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/linux-arm64@npm:0.17.15" conditions: os=linux & cpu=arm64 languageName: node linkType: hard @@ -10127,9 +10127,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/linux-arm@npm:0.17.14" +"@esbuild/linux-arm@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/linux-arm@npm:0.17.15" conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -10141,9 +10141,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/linux-ia32@npm:0.17.14" +"@esbuild/linux-ia32@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/linux-ia32@npm:0.17.15" conditions: os=linux & cpu=ia32 languageName: node linkType: hard @@ -10162,9 +10162,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/linux-loong64@npm:0.17.14" +"@esbuild/linux-loong64@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/linux-loong64@npm:0.17.15" conditions: os=linux & cpu=loong64 languageName: node linkType: hard @@ -10176,9 +10176,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/linux-mips64el@npm:0.17.14" +"@esbuild/linux-mips64el@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/linux-mips64el@npm:0.17.15" conditions: os=linux & cpu=mips64el languageName: node linkType: hard @@ -10190,9 +10190,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/linux-ppc64@npm:0.17.14" +"@esbuild/linux-ppc64@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/linux-ppc64@npm:0.17.15" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard @@ -10204,9 +10204,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/linux-riscv64@npm:0.17.14" +"@esbuild/linux-riscv64@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/linux-riscv64@npm:0.17.15" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard @@ -10218,9 +10218,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/linux-s390x@npm:0.17.14" +"@esbuild/linux-s390x@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/linux-s390x@npm:0.17.15" conditions: os=linux & cpu=s390x languageName: node linkType: hard @@ -10232,9 +10232,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/linux-x64@npm:0.17.14" +"@esbuild/linux-x64@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/linux-x64@npm:0.17.15" conditions: os=linux & cpu=x64 languageName: node linkType: hard @@ -10246,9 +10246,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/netbsd-x64@npm:0.17.14" +"@esbuild/netbsd-x64@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/netbsd-x64@npm:0.17.15" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard @@ -10260,9 +10260,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/openbsd-x64@npm:0.17.14" +"@esbuild/openbsd-x64@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/openbsd-x64@npm:0.17.15" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard @@ -10274,9 +10274,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/sunos-x64@npm:0.17.14" +"@esbuild/sunos-x64@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/sunos-x64@npm:0.17.15" conditions: os=sunos & cpu=x64 languageName: node linkType: hard @@ -10288,9 +10288,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/win32-arm64@npm:0.17.14" +"@esbuild/win32-arm64@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/win32-arm64@npm:0.17.15" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -10302,9 +10302,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/win32-ia32@npm:0.17.14" +"@esbuild/win32-ia32@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/win32-ia32@npm:0.17.15" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -10316,9 +10316,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.17.14": - version: 0.17.14 - resolution: "@esbuild/win32-x64@npm:0.17.14" +"@esbuild/win32-x64@npm:0.17.15": + version: 0.17.15 + resolution: "@esbuild/win32-x64@npm:0.17.15" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -22608,31 +22608,31 @@ __metadata: linkType: hard "esbuild@npm:^0.17.0": - version: 0.17.14 - resolution: "esbuild@npm:0.17.14" + version: 0.17.15 + resolution: "esbuild@npm:0.17.15" dependencies: - "@esbuild/android-arm": 0.17.14 - "@esbuild/android-arm64": 0.17.14 - "@esbuild/android-x64": 0.17.14 - "@esbuild/darwin-arm64": 0.17.14 - "@esbuild/darwin-x64": 0.17.14 - "@esbuild/freebsd-arm64": 0.17.14 - "@esbuild/freebsd-x64": 0.17.14 - "@esbuild/linux-arm": 0.17.14 - "@esbuild/linux-arm64": 0.17.14 - "@esbuild/linux-ia32": 0.17.14 - "@esbuild/linux-loong64": 0.17.14 - "@esbuild/linux-mips64el": 0.17.14 - "@esbuild/linux-ppc64": 0.17.14 - "@esbuild/linux-riscv64": 0.17.14 - "@esbuild/linux-s390x": 0.17.14 - "@esbuild/linux-x64": 0.17.14 - "@esbuild/netbsd-x64": 0.17.14 - "@esbuild/openbsd-x64": 0.17.14 - "@esbuild/sunos-x64": 0.17.14 - "@esbuild/win32-arm64": 0.17.14 - "@esbuild/win32-ia32": 0.17.14 - "@esbuild/win32-x64": 0.17.14 + "@esbuild/android-arm": 0.17.15 + "@esbuild/android-arm64": 0.17.15 + "@esbuild/android-x64": 0.17.15 + "@esbuild/darwin-arm64": 0.17.15 + "@esbuild/darwin-x64": 0.17.15 + "@esbuild/freebsd-arm64": 0.17.15 + "@esbuild/freebsd-x64": 0.17.15 + "@esbuild/linux-arm": 0.17.15 + "@esbuild/linux-arm64": 0.17.15 + "@esbuild/linux-ia32": 0.17.15 + "@esbuild/linux-loong64": 0.17.15 + "@esbuild/linux-mips64el": 0.17.15 + "@esbuild/linux-ppc64": 0.17.15 + "@esbuild/linux-riscv64": 0.17.15 + "@esbuild/linux-s390x": 0.17.15 + "@esbuild/linux-x64": 0.17.15 + "@esbuild/netbsd-x64": 0.17.15 + "@esbuild/openbsd-x64": 0.17.15 + "@esbuild/sunos-x64": 0.17.15 + "@esbuild/win32-arm64": 0.17.15 + "@esbuild/win32-ia32": 0.17.15 + "@esbuild/win32-x64": 0.17.15 dependenciesMeta: "@esbuild/android-arm": optional: true @@ -22680,7 +22680,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 8f4c05f5d3da04f05c48d65f60f3c6422253f406cd56a7ab7a898f0971b0366c454635a6340172874950771dc005a9928dd999b732a6d4caa504b537bfcbf2ff + checksum: 4e3640d7bc8f6edb3465c076eb519ccb7684382714a1b883e000a7a592f8e285501ec7e82cb68441dfec8f7be7f70f40b00129ceb05057f6fa87f95d2187370a languageName: node linkType: hard From 032b94ea90e5c56d12e8a887ab8aeeb7bbea6a25 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Apr 2023 15:09:47 +0000 Subject: [PATCH 116/137] chore(deps): update dependency swr to v2.1.2 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 40d006519f..691dca2352 100644 --- a/yarn.lock +++ b/yarn.lock @@ -37726,13 +37726,13 @@ __metadata: linkType: hard "swr@npm:^2.0.0": - version: 2.1.1 - resolution: "swr@npm:2.1.1" + version: 2.1.2 + resolution: "swr@npm:2.1.2" dependencies: use-sync-external-store: ^1.2.0 peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 - checksum: 77a7854f87c2a3244b4047eca5d88a0f5db6cb47f783fd13b8a38f5a611940142645c943e105fbfa64aac51e642361180366107ade0454744a80d6dedbe350db + checksum: 90010a1a1ba3ecd699f64ef5e3de9a40c291e220803e811c46fabb858d908fd74039f4a2c668cf8fd21dbb3f9d9b3d8300915292ed9933d0e4bdac1193ba8fb8 languageName: node linkType: hard From f25bc5cc030d33cb3946d78ed485e45b44e54b12 Mon Sep 17 00:00:00 2001 From: Alec Jacobs Date: Mon, 3 Apr 2023 08:14:18 -0700 Subject: [PATCH 117/137] refactor(processing): remove unnecessary target entity ref in unique key Signed-off-by: Alec Jacobs --- .../src/processing/DefaultCatalogProcessingEngine.ts | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts index 20dd325a71..8457381ccd 100644 --- a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts +++ b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts @@ -214,7 +214,7 @@ export class DefaultCatalogProcessingEngine implements CatalogProcessingEngine { }); oldRelationSources = new Map( previous.relations.map(r => [ - `${r.source_entity_ref}:${r.target_entity_ref}:${r.type}`, + `${r.source_entity_ref}:${r.type}`, r.source_entity_ref, ]), ); @@ -223,12 +223,7 @@ export class DefaultCatalogProcessingEngine implements CatalogProcessingEngine { const newRelationSources = new Map( result.relations.map(relation => { const sourceEntityRef = stringifyEntityRef(relation.source); - return [ - `${sourceEntityRef}:${stringifyEntityRef(relation.target)}:${ - relation.type - }`, - sourceEntityRef, - ]; + return [`${sourceEntityRef}:${relation.type}`, sourceEntityRef]; }), ); From ef63b7b207974bb3b7b9ea5b45a51674e621a267 Mon Sep 17 00:00:00 2001 From: Claire Casey Date: Mon, 3 Apr 2023 11:31:30 -0400 Subject: [PATCH 118/137] remove zod version from docs Signed-off-by: Claire Casey --- .../plugin-authors/03-adding-a-resource-permission-check.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md index 103e463cda..e714301ded 100644 --- a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md +++ b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md @@ -91,7 +91,7 @@ This enables decisions based on characteristics of the resource, but it's import Install the missing module: ```bash -$ yarn workspace @internal/plugin-todo-list-backend add @backstage/plugin-permission-node zod@~3.18.0 +$ yarn workspace @internal/plugin-todo-list-backend add @backstage/plugin-permission-node zod ``` Create a new `plugins/todo-list-backend/src/service/rules.ts` file and append the following code: From 84946a580c460ca01a81d25895052cce6a51d6e5 Mon Sep 17 00:00:00 2001 From: eipc16 Date: Mon, 3 Apr 2023 20:36:35 +0200 Subject: [PATCH 119/137] expose the permission plugin using the new backend system Signed-off-by: eipc16 --- .changeset/famous-beds-repair.md | 5 ++ packages/backend-next/package.json | 4 ++ .../src/ExamplePermissionPolicy.ts | 35 ++++++++++ packages/backend-next/src/index.ts | 6 ++ .../permission-backend/alpha-api-report.md | 20 ++++++ plugins/permission-backend/package.json | 16 +++++ plugins/permission-backend/src/alpha.ts | 17 +++++ plugins/permission-backend/src/plugin.ts | 66 +++++++++++++++++++ yarn.lock | 5 ++ 9 files changed, 174 insertions(+) create mode 100644 .changeset/famous-beds-repair.md create mode 100644 packages/backend-next/src/ExamplePermissionPolicy.ts create mode 100644 plugins/permission-backend/alpha-api-report.md create mode 100644 plugins/permission-backend/src/alpha.ts create mode 100644 plugins/permission-backend/src/plugin.ts diff --git a/.changeset/famous-beds-repair.md b/.changeset/famous-beds-repair.md new file mode 100644 index 0000000000..54adce96b5 --- /dev/null +++ b/.changeset/famous-beds-repair.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-permission-backend': minor +--- + +Introduced alpha export of the `permissionPlugin` using the new backend system diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index 2fccf12a85..48b4cd10a6 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -27,8 +27,12 @@ "dependencies": { "@backstage/backend-defaults": "workspace:^", "@backstage/plugin-app-backend": "workspace:^", + "@backstage/plugin-auth-node": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-kubernetes-backend": "workspace:^", + "@backstage/plugin-permission-backend": "workspace:^", + "@backstage/plugin-permission-common": "workspace:^", + "@backstage/plugin-permission-node": "workspace:^", "@backstage/plugin-scaffolder-backend": "workspace:^", "@backstage/plugin-search-backend": "workspace:^", "@backstage/plugin-search-backend-module-catalog": "workspace:^", diff --git a/packages/backend-next/src/ExamplePermissionPolicy.ts b/packages/backend-next/src/ExamplePermissionPolicy.ts new file mode 100644 index 0000000000..cf7c024e01 --- /dev/null +++ b/packages/backend-next/src/ExamplePermissionPolicy.ts @@ -0,0 +1,35 @@ +/* + * Copyright 2023 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 { BackstageIdentityResponse } from '@backstage/plugin-auth-node'; +import { + AuthorizeResult, + PolicyDecision, +} from '@backstage/plugin-permission-common'; +import { + PermissionPolicy, + PolicyQuery, +} from '@backstage/plugin-permission-node'; + +export class ExamplePermissionPolicy implements PermissionPolicy { + async handle( + _request: PolicyQuery, + _user?: BackstageIdentityResponse, + ): Promise { + return { + result: AuthorizeResult.ALLOW, + }; + } +} diff --git a/packages/backend-next/src/index.ts b/packages/backend-next/src/index.ts index 1ce63a8d51..12437c8ab5 100644 --- a/packages/backend-next/src/index.ts +++ b/packages/backend-next/src/index.ts @@ -25,6 +25,8 @@ import { searchModuleCatalogCollator } from '@backstage/plugin-search-backend-mo import { searchModuleTechDocsCollator } from '@backstage/plugin-search-backend-module-techdocs/alpha'; import { searchModuleExploreCollator } from '@backstage/plugin-search-backend-module-explore/alpha'; import { kubernetesPlugin } from '@backstage/plugin-kubernetes-backend/alpha'; +import { permissionPlugin } from '@backstage/plugin-permission-backend/alpha'; +import { ExamplePermissionPolicy } from './ExamplePermissionPolicy'; const backend = createBackend(); @@ -48,4 +50,8 @@ backend.add(searchModuleExploreCollator()); // Kubernetes backend.add(kubernetesPlugin()); + +// Permissions +backend.add(permissionPlugin({ policy: new ExamplePermissionPolicy() })); + backend.start(); diff --git a/plugins/permission-backend/alpha-api-report.md b/plugins/permission-backend/alpha-api-report.md new file mode 100644 index 0000000000..a86d8903ad --- /dev/null +++ b/plugins/permission-backend/alpha-api-report.md @@ -0,0 +1,20 @@ +## API Report File for "@backstage/plugin-permission-backend" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; +import { PermissionPolicy } from '@backstage/plugin-permission-node'; + +// @alpha +export const permissionPlugin: ( + options: PermissionPluginOptions, +) => BackendFeature; + +// @alpha +export type PermissionPluginOptions = { + policy: PermissionPolicy; +}; + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index 2fcee7ee19..0d2c0a840e 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -9,6 +9,21 @@ "main": "dist/index.cjs.js", "types": "dist/index.d.ts" }, + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.ts", + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "alpha": [ + "src/alpha.ts" + ], + "package.json": [ + "package.json" + ] + } + }, "backstage": { "role": "backend-plugin" }, @@ -23,6 +38,7 @@ }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", diff --git a/plugins/permission-backend/src/alpha.ts b/plugins/permission-backend/src/alpha.ts new file mode 100644 index 0000000000..a03fa0cee6 --- /dev/null +++ b/plugins/permission-backend/src/alpha.ts @@ -0,0 +1,17 @@ +/* + * 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. + */ + +export { permissionPlugin, type PermissionPluginOptions } from './plugin'; diff --git a/plugins/permission-backend/src/plugin.ts b/plugins/permission-backend/src/plugin.ts new file mode 100644 index 0000000000..9a6e5a13af --- /dev/null +++ b/plugins/permission-backend/src/plugin.ts @@ -0,0 +1,66 @@ +/* + * 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 { loggerToWinstonLogger } from '@backstage/backend-common'; +import { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import { PermissionPolicy } from '@backstage/plugin-permission-node'; +import { createRouter } from './service'; + +/** + * Permission plugin options + * + * @alpha + */ +export type PermissionPluginOptions = { + policy: PermissionPolicy; +}; + +/** + * Permission plugin + * + * @alpha + */ +export const permissionPlugin = createBackendPlugin( + (options: PermissionPluginOptions) => ({ + pluginId: 'permission', + register(env) { + env.registerInit({ + deps: { + http: coreServices.httpRouter, + config: coreServices.config, + logger: coreServices.logger, + discovery: coreServices.discovery, + identity: coreServices.identity, + }, + async init({ http, config, logger, discovery, identity }) { + const winstonLogger = loggerToWinstonLogger(logger); + http.use( + await createRouter({ + config, + discovery, + identity, + logger: winstonLogger, + policy: options.policy, + }), + ); + }, + }); + }, + }), +); diff --git a/yarn.lock b/yarn.lock index 7b0ba7f3e5..87fc76a056 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7593,6 +7593,7 @@ __metadata: resolution: "@backstage/plugin-permission-backend@workspace:plugins/permission-backend" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" @@ -23441,8 +23442,12 @@ __metadata: "@backstage/backend-defaults": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/plugin-app-backend": "workspace:^" + "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-kubernetes-backend": "workspace:^" + "@backstage/plugin-permission-backend": "workspace:^" + "@backstage/plugin-permission-common": "workspace:^" + "@backstage/plugin-permission-node": "workspace:^" "@backstage/plugin-scaffolder-backend": "workspace:^" "@backstage/plugin-search-backend": "workspace:^" "@backstage/plugin-search-backend-module-catalog": "workspace:^" From dfa38ced03f729153d3389908f213155666525b9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Apr 2023 19:35:07 +0000 Subject: [PATCH 120/137] fix(deps): update apollo graphql packages Signed-off-by: Renovate Bot --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7b0ba7f3e5..ced693f6c3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -43,8 +43,8 @@ __metadata: linkType: hard "@apollo/client@npm:^3.0.0": - version: 3.7.10 - resolution: "@apollo/client@npm:3.7.10" + version: 3.7.11 + resolution: "@apollo/client@npm:3.7.11" dependencies: "@graphql-typed-document-node/core": ^3.1.1 "@wry/context": ^0.7.0 @@ -52,7 +52,7 @@ __metadata: "@wry/trie": ^0.3.0 graphql-tag: ^2.12.6 hoist-non-react-statics: ^3.3.2 - optimism: ^0.16.1 + optimism: ^0.16.2 prop-types: ^15.7.2 response-iterator: ^0.2.6 symbol-observable: ^4.0.0 @@ -74,7 +74,7 @@ __metadata: optional: true subscriptions-transport-ws: optional: true - checksum: d74a68f8042e76e3a81990c79a89aefc07c8899d354f3b469591356508001005106bba0fa953652c3ec19756d44bdec6730ac98f62fa836bd76acbcb7eff42ce + checksum: 56fa501dc27b68b01c054ffd5642fcfedb16ee4653e819fb92d1b6cae834160f1274a961f335812f4781bbbbdf3bb6f851f07a7351f95d8945740cc79fa2d58f languageName: node linkType: hard @@ -140,8 +140,8 @@ __metadata: linkType: hard "@apollo/server@npm:^4.0.0": - version: 4.5.0 - resolution: "@apollo/server@npm:4.5.0" + version: 4.6.0 + resolution: "@apollo/server@npm:4.6.0" dependencies: "@apollo/cache-control-types": ^1.0.2 "@apollo/server-gateway-interface": ^1.1.0 @@ -171,7 +171,7 @@ __metadata: whatwg-mimetype: ^3.0.0 peerDependencies: graphql: ^16.6.0 - checksum: 193b5f6913c945aafb8fc6b5b75fcfff250e5b84dc2727f6a0472b304da08a6cd90a21ae45591e6408e9413e8bee323bbf4c9586b511a4f426b562da5328e4d0 + checksum: 309d22df0caa73671d856c31f53d0eb8a5505a6dd0c1691223891e0fa2931667c7ccd680e418a678e1d2570f54596bcc514775854cbc16bfff9009c7cfe9febe languageName: node linkType: hard @@ -31885,7 +31885,7 @@ __metadata: languageName: node linkType: hard -"optimism@npm:^0.16.1": +"optimism@npm:^0.16.2": version: 0.16.2 resolution: "optimism@npm:0.16.2" dependencies: From 2c629159adfdff8eccb54ef9017a1b2ea4f68733 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Apr 2023 19:36:34 +0000 Subject: [PATCH 121/137] fix(deps): update dependency @google-cloud/storage to v6.9.5 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7b0ba7f3e5..56f05d2a96 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10526,8 +10526,8 @@ __metadata: linkType: hard "@google-cloud/storage@npm:^6.0.0": - version: 6.9.4 - resolution: "@google-cloud/storage@npm:6.9.4" + version: 6.9.5 + resolution: "@google-cloud/storage@npm:6.9.5" dependencies: "@google-cloud/paginator": ^3.0.7 "@google-cloud/projectify": ^3.0.0 @@ -10546,7 +10546,7 @@ __metadata: retry-request: ^5.0.0 teeny-request: ^8.0.0 uuid: ^8.0.0 - checksum: d8ee110843e22d7141a9a93fae01590f5b15946e389544eda858d78abf3aaae2ab353548c15f219f53cac9af63ef52bd565540b638f8c7866ade5da414efc5ce + checksum: eff663cc44ee553fbd2f62b67ef422783f29210c67f55c86c13e63a40c36f3c9b78e076b2a08bb6a74a9fdc452de9240aac91e0fa11c3a4f782416a230d88b74 languageName: node linkType: hard From 000861ce81e461a06d4cbf2f230db1d3ffa6bd2e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Apr 2023 20:11:56 +0000 Subject: [PATCH 122/137] fix(deps): update dependency @keyv/memcache to v1.3.7 Signed-off-by: Renovate Bot --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index ced693f6c3..190d9eb362 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11890,12 +11890,12 @@ __metadata: linkType: hard "@keyv/memcache@npm:^1.3.5": - version: 1.3.6 - resolution: "@keyv/memcache@npm:1.3.6" + version: 1.3.7 + resolution: "@keyv/memcache@npm:1.3.7" dependencies: json-buffer: ^3.0.1 - memjs: ^1.3.0 - checksum: 3360055b6e22d1be7a77341dc99bafb5434d3288dace94067f3307f6d9498f984dcb0d8452a5b2d97ddca8f8c973caf7cc1332e0ffada1c6dbfb0b2a2d42451a + memjs: ^1.3.1 + checksum: 61c836c1b0c264c35281a38dbc380a102b2899eab46226a0e31614d3d7c4708ecdb06d8858f711893212ae5b357a79213c7a7b7a81b6196e56dd889dd1ca498b languageName: node linkType: hard @@ -29973,10 +29973,10 @@ __metadata: languageName: node linkType: hard -"memjs@npm:^1.3.0": - version: 1.3.0 - resolution: "memjs@npm:1.3.0" - checksum: 5c7679c649ab18a7b29c8bf8795bd591df480e7ca96eec5958f56c5c3c87d919530a7b61c80ddf73f05975c929d88153d41df28e11ff680d2c6c4bb6dd668d2d +"memjs@npm:^1.3.1": + version: 1.3.1 + resolution: "memjs@npm:1.3.1" + checksum: cb70879055151f15292e95ab57765e745c84d2fedd363b453afc3e2f48bf185e3771eecf9544f95009a3a374e810e34c1e18948134e814d791c2f0f35359ddeb languageName: node linkType: hard From f90c1c45dfec720fb705b32f3579975e6b429dd0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Apr 2023 20:12:22 +0000 Subject: [PATCH 123/137] fix(deps): update dependency @keyv/redis to v2.5.7 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index ced693f6c3..1589f33410 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11900,11 +11900,11 @@ __metadata: linkType: hard "@keyv/redis@npm:^2.5.3": - version: 2.5.6 - resolution: "@keyv/redis@npm:2.5.6" + version: 2.5.7 + resolution: "@keyv/redis@npm:2.5.7" dependencies: ioredis: ^5.3.1 - checksum: ccd19ed1f3e9b0a820b5b537d978dadd2bae19988cbb136312a38cb8cc3d3b2d88a53d20aefdd96e85ce9f341ee3ab29f371379627bd27bd587cd3926d3115a3 + checksum: e0ed1b6602afcc339bb2bf014d8801e6b7a3b6392d0f8e4ccfc59d919f59229b8787c50c48fc51636625ffdf55cf1ef6c450425a73bd88f9b866e74f1b3e25f8 languageName: node linkType: hard From 2fc848923bd3f9a716584c763d413e253ab4fb38 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 4 Apr 2023 09:43:12 +0200 Subject: [PATCH 124/137] chore: bump dependencies Signed-off-by: blam --- plugins/scaffolder-react/package.json | 8 ++--- plugins/scaffolder/package.json | 4 +-- yarn.lock | 48 +++++++++++++-------------- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index 5546b827f7..50a060985c 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -60,11 +60,11 @@ "@material-ui/lab": "4.0.0-alpha.61", "@react-hookz/web": "^20.0.0", "@rjsf/core": "^3.2.1", - "@rjsf/core-v5": "npm:@rjsf/core@5.3.1", + "@rjsf/core-v5": "npm:@rjsf/core@5.5.0", "@rjsf/material-ui": "^3.2.1", - "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@5.3.1", - "@rjsf/utils": "5.3.1", - "@rjsf/validator-ajv8": "5.3.1", + "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@5.5.0", + "@rjsf/utils": "5.5.0", + "@rjsf/validator-ajv8": "5.5.0", "@types/json-schema": "^7.0.9", "@types/react": "^16.13.1 || ^17.0.0", "classnames": "^2.2.6", diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 7c397d6761..0e0ffdafda 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -69,8 +69,8 @@ "@react-hookz/web": "^20.0.0", "@rjsf/core": "^3.2.1", "@rjsf/material-ui": "^3.2.1", - "@rjsf/utils": "5.3.1", - "@rjsf/validator-ajv8": "5.3.1", + "@rjsf/utils": "5.5.0", + "@rjsf/validator-ajv8": "5.5.0", "@types/react": "^16.13.1 || ^17.0.0", "@uiw/react-codemirror": "^4.9.3", "classnames": "^2.2.6", diff --git a/yarn.lock b/yarn.lock index 6490641711..67ac01cada 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8109,11 +8109,11 @@ __metadata: "@material-ui/lab": 4.0.0-alpha.61 "@react-hookz/web": ^20.0.0 "@rjsf/core": ^3.2.1 - "@rjsf/core-v5": "npm:@rjsf/core@5.3.1" + "@rjsf/core-v5": "npm:@rjsf/core@5.5.0" "@rjsf/material-ui": ^3.2.1 - "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@5.3.1" - "@rjsf/utils": 5.3.1 - "@rjsf/validator-ajv8": 5.3.1 + "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@5.5.0" + "@rjsf/utils": 5.5.0 + "@rjsf/validator-ajv8": 5.5.0 "@testing-library/dom": ^8.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -8176,8 +8176,8 @@ __metadata: "@react-hookz/web": ^20.0.0 "@rjsf/core": ^3.2.1 "@rjsf/material-ui": ^3.2.1 - "@rjsf/utils": 5.3.1 - "@rjsf/validator-ajv8": 5.3.1 + "@rjsf/utils": 5.5.0 + "@rjsf/validator-ajv8": 5.5.0 "@testing-library/dom": ^8.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -13525,19 +13525,19 @@ __metadata: languageName: node linkType: hard -"@rjsf/core-v5@npm:@rjsf/core@5.3.1": - version: 5.3.1 - resolution: "@rjsf/core@npm:5.3.1" +"@rjsf/core-v5@npm:@rjsf/core@5.5.0": + version: 5.5.0 + resolution: "@rjsf/core@npm:5.5.0" dependencies: lodash: ^4.17.15 lodash-es: ^4.17.15 - markdown-to-jsx: ^7.1.9 + markdown-to-jsx: ^7.2.0 nanoid: ^3.3.4 prop-types: ^15.7.2 peerDependencies: "@rjsf/utils": ^5.0.0 react: ^16.14.0 || >=17 - checksum: e7f5c05a594db0549c5289f1dc570977fa37c9ca0f1fed47ec17fa49dd4b6b85ffc3844c9c11d36455a66ff17f898469b6a2dca159223de348f84bdadd28ae32 + checksum: fc8f9de851526aaa61c800a2b2d181d6d51fee69c25be62e9e2a4af9f4b047369316a3a10c1e64444af22ca5cc96e8a024e6d376c774378e1b5f914337002736 languageName: node linkType: hard @@ -13560,16 +13560,16 @@ __metadata: languageName: node linkType: hard -"@rjsf/material-ui-v5@npm:@rjsf/material-ui@5.3.1": - version: 5.3.1 - resolution: "@rjsf/material-ui@npm:5.3.1" +"@rjsf/material-ui-v5@npm:@rjsf/material-ui@5.5.0": + version: 5.5.0 + resolution: "@rjsf/material-ui@npm:5.5.0" peerDependencies: "@material-ui/core": ^4.12.3 "@material-ui/icons": ^4.11.2 "@rjsf/core": ^5.0.0 "@rjsf/utils": ^5.0.0 react: ^16.14.0 || >=17 - checksum: 169d78e3983742b38008de95ab320cdc1f52995dabf2e75d44052c09fb0b734ecb45c58fbdf51dea18bf8bd45130aec01dc0b4b75a2635e82ef5c489d1d35af1 + checksum: ef247264f040ae1aec0e7f71225d8aba6f733dc0ef70e111ac69cb83801fa02c55582d8f33b68f5df09d051fb1ddbf41ae50179b0d43292bef88661e72163d36 languageName: node linkType: hard @@ -13585,9 +13585,9 @@ __metadata: languageName: node linkType: hard -"@rjsf/utils@npm:5.3.1": - version: 5.3.1 - resolution: "@rjsf/utils@npm:5.3.1" +"@rjsf/utils@npm:5.5.0": + version: 5.5.0 + resolution: "@rjsf/utils@npm:5.5.0" dependencies: json-schema-merge-allof: ^0.8.1 jsonpointer: ^5.0.1 @@ -13596,13 +13596,13 @@ __metadata: react-is: ^18.2.0 peerDependencies: react: ^16.14.0 || >=17 - checksum: 400a17bf99a043557adbd4e0dc3651b9d1b47ab61a40acb8756c5b986d044a329bd26bf45263a667eb963acf51084d612c043c9409aeaac4e4c6ab66af0bb700 + checksum: cf777657867a0ac58b12194a1a024bb6d9da21781bfb18183cd3c0658308c129db69417ffd067218f0bef9c465825a53a4fa2ddfc7f977dd47f3d5a0cca55d52 languageName: node linkType: hard -"@rjsf/validator-ajv8@npm:5.3.1": - version: 5.3.1 - resolution: "@rjsf/validator-ajv8@npm:5.3.1" +"@rjsf/validator-ajv8@npm:5.5.0": + version: 5.5.0 + resolution: "@rjsf/validator-ajv8@npm:5.5.0" dependencies: ajv: ^8.12.0 ajv-formats: ^2.1.1 @@ -13610,7 +13610,7 @@ __metadata: lodash-es: ^4.17.15 peerDependencies: "@rjsf/utils": ^5.0.0 - checksum: b99e0d2df6b6431438ea81c2e31636aa5a1939d054153236851e5d8e8b06f8a1958c8c16887dd2babfd1608e18aa1ce3f1c0a778b3b3198028b92f0553e0383e + checksum: 7f2cd3f4e3f2df2d487ab0f93011cfb11fd7d2173a6cdf322a6fd7978817b37d031ca049fe02f433268d5df2afc59f21c7a06238ed45d3aac0be17898e54a85e languageName: node linkType: hard @@ -29693,7 +29693,7 @@ __metadata: languageName: node linkType: hard -"markdown-to-jsx@npm:^7.1.9": +"markdown-to-jsx@npm:^7.2.0": version: 7.2.0 resolution: "markdown-to-jsx@npm:7.2.0" peerDependencies: From 34dab7ee7f89343952a17a810a6480f172fff49e Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 4 Apr 2023 09:44:11 +0200 Subject: [PATCH 125/137] chore: added changeset Signed-off-by: blam --- .changeset/stupid-laws-play.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/stupid-laws-play.md diff --git a/.changeset/stupid-laws-play.md b/.changeset/stupid-laws-play.md new file mode 100644 index 0000000000..837fd08f40 --- /dev/null +++ b/.changeset/stupid-laws-play.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder': patch +--- + +`scaffolder/next`: bump `rjsf` dependencies to `5.5.0` From b319cc0bef4320ed52853e9487079603efa957dc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Apr 2023 07:58:16 +0000 Subject: [PATCH 126/137] fix(deps): update dependency @roadiehq/backstage-plugin-github-pull-requests to v2.5.6 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6490641711..91dc465634 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13667,8 +13667,8 @@ __metadata: linkType: hard "@roadiehq/backstage-plugin-github-pull-requests@npm:^2.2.7": - version: 2.5.5 - resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.5.5" + version: 2.5.6 + resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.5.6" dependencies: "@backstage/catalog-model": ^1.2.1 "@backstage/core-components": ^0.12.5 @@ -13691,7 +13691,7 @@ __metadata: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 react-router: 6.0.0-beta.0 || ^6.3.0 - checksum: 3a17a21665c397b3bd94c277e31b9f1005387b458a14b1c4c3bd28f6ef1400289fcf24e44bb8c54e07b99b59af49fe608c587f49e27d15cf01ef4d539cc25354 + checksum: 063a6a5802ec927e75c9616bac11b87721d66e168b59be57b860ce79f23c42714ef1b43cadcc530d2b4b98335deb2d074c27a8d004dce55c8eba787c479d83f2 languageName: node linkType: hard From 6dfe695b09e29b1a4c356dd239a25d5e51167e41 Mon Sep 17 00:00:00 2001 From: Mark Date: Tue, 4 Apr 2023 10:04:26 +0200 Subject: [PATCH 127/137] Update .changeset/eight-trainers-smoke.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Mark --- .changeset/eight-trainers-smoke.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/eight-trainers-smoke.md b/.changeset/eight-trainers-smoke.md index 9e4aaf3c9e..4c3cd33fbb 100644 --- a/.changeset/eight-trainers-smoke.md +++ b/.changeset/eight-trainers-smoke.md @@ -1,5 +1,5 @@ --- -'@backstage/catalog-client': minor +'@backstage/catalog-client': patch --- Fixed bug in `queryEntities` of `CatalogClient` where the `sortField` is supposed to be changed to `orderField`. From a64eae0d31149056573f6f5415346c68a35d487f Mon Sep 17 00:00:00 2001 From: Jack Palmer Date: Tue, 4 Apr 2023 10:07:13 +0100 Subject: [PATCH 128/137] fix: Flip templateFilter to match Array.filter Signed-off-by: Jack Palmer --- .../next/components/TemplateGroups/TemplateGroups.test.tsx | 2 +- .../src/next/components/TemplateGroups/TemplateGroups.tsx | 2 +- .../src/components/TemplateList/TemplateList.test.tsx | 4 ++-- .../scaffolder/src/components/TemplateList/TemplateList.tsx | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.test.tsx b/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.test.tsx index c03af41f99..894c6ea4d0 100644 --- a/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.test.tsx +++ b/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.test.tsx @@ -214,7 +214,7 @@ describe('TemplateGroups', () => { expect(TemplateGroup).toHaveBeenCalledWith( expect.objectContaining({ - templates: [expect.objectContaining({ template: mockEntities[1] })], + templates: [expect.objectContaining({ template: mockEntities[0] })], }), {}, ); diff --git a/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.tsx b/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.tsx index 50be7a4bdf..f0f06b3410 100644 --- a/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.tsx +++ b/plugins/scaffolder-react/src/next/components/TemplateGroups/TemplateGroups.tsx @@ -91,7 +91,7 @@ export const TemplateGroups = (props: TemplateGroupsProps) => { {groups.map(({ title, filter }, index) => { const templates = entities .filter(isTemplateEntityV1beta3) - .filter(e => (templateFilter ? !templateFilter(e) : true)) + .filter(e => (templateFilter ? templateFilter(e) : true)) .filter(filter) .map(template => { const additionalLinks = diff --git a/plugins/scaffolder/src/components/TemplateList/TemplateList.test.tsx b/plugins/scaffolder/src/components/TemplateList/TemplateList.test.tsx index 2ea417ad68..c65613d2f5 100644 --- a/plugins/scaffolder/src/components/TemplateList/TemplateList.test.tsx +++ b/plugins/scaffolder/src/components/TemplateList/TemplateList.test.tsx @@ -77,7 +77,7 @@ describe('TemplateList', () => { { mountedRoutes: { '/': rootRouteRef } }, ); - expect(() => screen.getByTestId('t1')).toThrow(); - expect(screen.getByTestId('t2')).toBeDefined(); + expect(() => screen.getByTestId('t2')).toThrow(); + expect(screen.getByTestId('t1')).toBeDefined(); }); }); diff --git a/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx b/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx index 9a88050d74..c925cdf6ef 100644 --- a/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx +++ b/plugins/scaffolder/src/components/TemplateList/TemplateList.tsx @@ -59,7 +59,7 @@ export const TemplateList = ({ const templateEntities = entities.filter(isTemplateEntityV1beta3); const maybeFilteredEntities = ( group ? templateEntities.filter(group.filter) : templateEntities - ).filter(e => (templateFilter ? !templateFilter(e) : true)); + ).filter(e => (templateFilter ? templateFilter(e) : true)); const titleComponent: React.ReactNode = (() => { if (group && group.title) { From 90dda42cfd22515aa83ff2f511baefb45dcc13da Mon Sep 17 00:00:00 2001 From: Jack Palmer Date: Tue, 4 Apr 2023 10:10:05 +0100 Subject: [PATCH 129/137] chore: Changeset Signed-off-by: Jack Palmer --- .changeset/modern-snakes-check.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/modern-snakes-check.md diff --git a/.changeset/modern-snakes-check.md b/.changeset/modern-snakes-check.md new file mode 100644 index 0000000000..29510ad712 --- /dev/null +++ b/.changeset/modern-snakes-check.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder': patch +--- + +bug: Invert `templateFilter` predicate to align with `Array.filter` From 788f0f5a1524573738b6797b31ea9a3eb9edecfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 4 Apr 2023 11:45:36 +0200 Subject: [PATCH 130/137] set permission backend policies using an extension point MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Patrik Oldsberg Co-authored-by: Johan Haals Signed-off-by: Fredrik Adelöw --- .changeset/famous-beds-break.md | 5 + .changeset/famous-beds-repair.md | 4 +- packages/backend-next/src/index.ts | 23 ++-- .../permission-backend/alpha-api-report.md | 9 +- plugins/permission-backend/src/alpha.ts | 2 +- plugins/permission-backend/src/plugin.ts | 116 +++++++++++++----- plugins/permission-node/alpha-api-report.md | 18 +++ plugins/permission-node/package.json | 16 +++ .../permission-node/src/alpha.ts | 20 +-- plugins/permission-node/src/plugin.ts | 36 ++++++ yarn.lock | 1 + 11 files changed, 179 insertions(+), 71 deletions(-) create mode 100644 .changeset/famous-beds-break.md create mode 100644 plugins/permission-node/alpha-api-report.md rename packages/backend-next/src/ExamplePermissionPolicy.ts => plugins/permission-node/src/alpha.ts (54%) create mode 100644 plugins/permission-node/src/plugin.ts diff --git a/.changeset/famous-beds-break.md b/.changeset/famous-beds-break.md new file mode 100644 index 0000000000..a3d2e929a8 --- /dev/null +++ b/.changeset/famous-beds-break.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-permission-node': patch +--- + +Introduced alpha export of the `policyExtensionPoint` for use in the new backend system. diff --git a/.changeset/famous-beds-repair.md b/.changeset/famous-beds-repair.md index 54adce96b5..f08506b130 100644 --- a/.changeset/famous-beds-repair.md +++ b/.changeset/famous-beds-repair.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-permission-backend': minor +'@backstage/plugin-permission-backend': patch --- -Introduced alpha export of the `permissionPlugin` using the new backend system +Introduced alpha export of the `permissionPlugin` for use in the new backend system, along with a `permissionModuleAllowAllPolicy` that can be used to allow all requests. diff --git a/packages/backend-next/src/index.ts b/packages/backend-next/src/index.ts index 12437c8ab5..fc936b1b0f 100644 --- a/packages/backend-next/src/index.ts +++ b/packages/backend-next/src/index.ts @@ -16,17 +16,19 @@ import { createBackend } from '@backstage/backend-defaults'; import { appPlugin } from '@backstage/plugin-app-backend/alpha'; -import { todoPlugin } from '@backstage/plugin-todo-backend'; -import { techdocsPlugin } from '@backstage/plugin-techdocs-backend/alpha'; import { catalogPlugin } from '@backstage/plugin-catalog-backend/alpha'; -import { catalogModuleTemplateKind } from '@backstage/plugin-scaffolder-backend/alpha'; -import { searchPlugin } from '@backstage/plugin-search-backend/alpha'; -import { searchModuleCatalogCollator } from '@backstage/plugin-search-backend-module-catalog/alpha'; -import { searchModuleTechDocsCollator } from '@backstage/plugin-search-backend-module-techdocs/alpha'; -import { searchModuleExploreCollator } from '@backstage/plugin-search-backend-module-explore/alpha'; import { kubernetesPlugin } from '@backstage/plugin-kubernetes-backend/alpha'; -import { permissionPlugin } from '@backstage/plugin-permission-backend/alpha'; -import { ExamplePermissionPolicy } from './ExamplePermissionPolicy'; +import { + permissionModuleAllowAllPolicy, + permissionPlugin, +} from '@backstage/plugin-permission-backend/alpha'; +import { catalogModuleTemplateKind } from '@backstage/plugin-scaffolder-backend/alpha'; +import { searchModuleCatalogCollator } from '@backstage/plugin-search-backend-module-catalog/alpha'; +import { searchModuleExploreCollator } from '@backstage/plugin-search-backend-module-explore/alpha'; +import { searchModuleTechDocsCollator } from '@backstage/plugin-search-backend-module-techdocs/alpha'; +import { searchPlugin } from '@backstage/plugin-search-backend/alpha'; +import { techdocsPlugin } from '@backstage/plugin-techdocs-backend/alpha'; +import { todoPlugin } from '@backstage/plugin-todo-backend'; const backend = createBackend(); @@ -52,6 +54,7 @@ backend.add(searchModuleExploreCollator()); backend.add(kubernetesPlugin()); // Permissions -backend.add(permissionPlugin({ policy: new ExamplePermissionPolicy() })); +backend.add(permissionPlugin()); +backend.add(permissionModuleAllowAllPolicy()); backend.start(); diff --git a/plugins/permission-backend/alpha-api-report.md b/plugins/permission-backend/alpha-api-report.md index a86d8903ad..926691930b 100644 --- a/plugins/permission-backend/alpha-api-report.md +++ b/plugins/permission-backend/alpha-api-report.md @@ -4,17 +4,12 @@ ```ts import { BackendFeature } from '@backstage/backend-plugin-api'; -import { PermissionPolicy } from '@backstage/plugin-permission-node'; // @alpha -export const permissionPlugin: ( - options: PermissionPluginOptions, -) => BackendFeature; +export const permissionModuleAllowAllPolicy: () => BackendFeature; // @alpha -export type PermissionPluginOptions = { - policy: PermissionPolicy; -}; +export const permissionPlugin: () => BackendFeature; // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/permission-backend/src/alpha.ts b/plugins/permission-backend/src/alpha.ts index a03fa0cee6..f6a2bb4f09 100644 --- a/plugins/permission-backend/src/alpha.ts +++ b/plugins/permission-backend/src/alpha.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { permissionPlugin, type PermissionPluginOptions } from './plugin'; +export { permissionPlugin, permissionModuleAllowAllPolicy } from './plugin'; diff --git a/plugins/permission-backend/src/plugin.ts b/plugins/permission-backend/src/plugin.ts index 9a6e5a13af..5c0a9a87a0 100644 --- a/plugins/permission-backend/src/plugin.ts +++ b/plugins/permission-backend/src/plugin.ts @@ -17,50 +17,102 @@ import { loggerToWinstonLogger } from '@backstage/backend-common'; import { coreServices, + createBackendModule, createBackendPlugin, } from '@backstage/backend-plugin-api'; -import { PermissionPolicy } from '@backstage/plugin-permission-node'; +import { BackstageIdentityResponse } from '@backstage/plugin-auth-node'; +import { + AuthorizeResult, + PolicyDecision, +} from '@backstage/plugin-permission-common'; +import { + PermissionPolicy, + PolicyQuery, +} from '@backstage/plugin-permission-node'; +import { + policyExtensionPoint, + PolicyExtensionPoint, +} from '@backstage/plugin-permission-node/alpha'; import { createRouter } from './service'; +class PolicyExtensionPointImpl implements PolicyExtensionPoint { + public policy: PermissionPolicy | undefined; + + setPolicy(policy: PermissionPolicy): void { + if (this.policy) { + throw new Error('Policy already set'); + } + this.policy = policy; + } +} + /** - * Permission plugin options + * A permission policy module that allows all requests. * * @alpha */ -export type PermissionPluginOptions = { - policy: PermissionPolicy; -}; +export const permissionModuleAllowAllPolicy = createBackendModule({ + moduleId: 'allowAllPolicy', + pluginId: 'permission', + register(reg) { + class AllowAllPermissionPolicy implements PermissionPolicy { + async handle( + _request: PolicyQuery, + _user?: BackstageIdentityResponse, + ): Promise { + return { + result: AuthorizeResult.ALLOW, + }; + } + } + + reg.registerInit({ + deps: { policy: policyExtensionPoint }, + async init({ policy }) { + policy.setPolicy(new AllowAllPermissionPolicy()); + }, + }); + }, +}); /** * Permission plugin * * @alpha */ -export const permissionPlugin = createBackendPlugin( - (options: PermissionPluginOptions) => ({ - pluginId: 'permission', - register(env) { - env.registerInit({ - deps: { - http: coreServices.httpRouter, - config: coreServices.config, - logger: coreServices.logger, - discovery: coreServices.discovery, - identity: coreServices.identity, - }, - async init({ http, config, logger, discovery, identity }) { - const winstonLogger = loggerToWinstonLogger(logger); - http.use( - await createRouter({ - config, - discovery, - identity, - logger: winstonLogger, - policy: options.policy, - }), +export const permissionPlugin = createBackendPlugin(() => ({ + pluginId: 'permission', + register(env) { + const policies = new PolicyExtensionPointImpl(); + + env.registerExtensionPoint(policyExtensionPoint, policies); + + env.registerInit({ + deps: { + http: coreServices.httpRouter, + config: coreServices.config, + logger: coreServices.logger, + discovery: coreServices.discovery, + identity: coreServices.identity, + }, + async init({ http, config, logger, discovery, identity }) { + const winstonLogger = loggerToWinstonLogger(logger); + if (!policies.policy) { + throw new Error( + 'No policy module installed! Please install a policy module. If you want to allow all requests, use permissionModuleAllowAllPolicy', ); - }, - }); - }, - }), -); + } + + http.use( + await createRouter({ + config, + discovery, + identity, + logger: winstonLogger, + policy: policies.policy, + }), + ); + }, + }); + }, +})); diff --git a/plugins/permission-node/alpha-api-report.md b/plugins/permission-node/alpha-api-report.md new file mode 100644 index 0000000000..1be8e77035 --- /dev/null +++ b/plugins/permission-node/alpha-api-report.md @@ -0,0 +1,18 @@ +## API Report File for "@backstage/plugin-permission-node" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { ExtensionPoint } from '@backstage/backend-plugin-api'; +import { PermissionPolicy } from '@backstage/plugin-permission-node'; + +// @alpha +export type PolicyExtensionPoint = { + setPolicy(policy: PermissionPolicy): void; +}; + +// @alpha +export const policyExtensionPoint: ExtensionPoint; + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index d8adbc08e7..308bd05ee2 100644 --- a/plugins/permission-node/package.json +++ b/plugins/permission-node/package.json @@ -10,6 +10,21 @@ "main": "dist/index.cjs.js", "types": "dist/index.d.ts" }, + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.ts", + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "alpha": [ + "src/alpha.ts" + ], + "package.json": [ + "package.json" + ] + } + }, "backstage": { "role": "node-library" }, @@ -34,6 +49,7 @@ }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", diff --git a/packages/backend-next/src/ExamplePermissionPolicy.ts b/plugins/permission-node/src/alpha.ts similarity index 54% rename from packages/backend-next/src/ExamplePermissionPolicy.ts rename to plugins/permission-node/src/alpha.ts index cf7c024e01..1031dc4fe9 100644 --- a/packages/backend-next/src/ExamplePermissionPolicy.ts +++ b/plugins/permission-node/src/alpha.ts @@ -13,23 +13,5 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { BackstageIdentityResponse } from '@backstage/plugin-auth-node'; -import { - AuthorizeResult, - PolicyDecision, -} from '@backstage/plugin-permission-common'; -import { - PermissionPolicy, - PolicyQuery, -} from '@backstage/plugin-permission-node'; -export class ExamplePermissionPolicy implements PermissionPolicy { - async handle( - _request: PolicyQuery, - _user?: BackstageIdentityResponse, - ): Promise { - return { - result: AuthorizeResult.ALLOW, - }; - } -} +export { type PolicyExtensionPoint, policyExtensionPoint } from './plugin'; diff --git a/plugins/permission-node/src/plugin.ts b/plugins/permission-node/src/plugin.ts new file mode 100644 index 0000000000..646223a3ee --- /dev/null +++ b/plugins/permission-node/src/plugin.ts @@ -0,0 +1,36 @@ +/* + * Copyright 2023 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 { createExtensionPoint } from '@backstage/backend-plugin-api'; +import { PermissionPolicy } from '@backstage/plugin-permission-node'; + +/** + * Allows supplying policies to the permissions backend + * + * @alpha + */ +export type PolicyExtensionPoint = { + setPolicy(policy: PermissionPolicy): void; +}; + +/** + * Allows supplying policies to the permissions backend + * + * @alpha + */ +export const policyExtensionPoint = createExtensionPoint({ + id: 'permission.policy', +}); diff --git a/yarn.lock b/yarn.lock index 80c89a35d6..02e38e1b33 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7650,6 +7650,7 @@ __metadata: resolution: "@backstage/plugin-permission-node@workspace:plugins/permission-node" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-test-utils": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" From 22d8703a264849a996c1b8c31dd43431c86d8d61 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 4 Apr 2023 11:51:51 +0200 Subject: [PATCH 131/137] cli: resolve config paths upfront Signed-off-by: Patrik Oldsberg --- .../cli/src/commands/build/buildBackend.ts | 10 +----- packages/cli/src/commands/build/command.ts | 33 ++++++++++++------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/packages/cli/src/commands/build/buildBackend.ts b/packages/cli/src/commands/build/buildBackend.ts index f82567de3c..5d42aa18d4 100644 --- a/packages/cli/src/commands/build/buildBackend.ts +++ b/packages/cli/src/commands/build/buildBackend.ts @@ -18,7 +18,6 @@ import os from 'os'; import fs from 'fs-extra'; import { resolve as resolvePath } from 'path'; import tar, { CreateOptions } from 'tar'; -import { paths } from '../../lib/paths'; import { createDistWorkspace } from '../../lib/packager'; import { getEnvironmentParallelism } from '../../lib/parallel'; import { buildPackage, Output } from '../../lib/builder'; @@ -43,18 +42,11 @@ export async function buildBackend(options: BuildBackendOptions) { outputs: new Set([Output.cjs]), }); - const resolvedConfigPaths = configPaths?.map(p => { - let path = paths.resolveTarget(p); - if (!fs.pathExistsSync(path)) { - path = paths.resolveOwnRoot(p); - } - return path; - }); const tmpDir = await fs.mkdtemp(resolvePath(os.tmpdir(), 'backstage-bundle')); try { await createDistWorkspace([pkg.name], { targetDir: tmpDir, - configPaths: resolvedConfigPaths, + configPaths, buildDependencies: !skipBuildDependencies, buildExcludes: [pkg.name], parallelism: getEnvironmentParallelism(), diff --git a/packages/cli/src/commands/build/command.ts b/packages/cli/src/commands/build/command.ts index 7330d9891f..dcbf65331d 100644 --- a/packages/cli/src/commands/build/command.ts +++ b/packages/cli/src/commands/build/command.ts @@ -20,23 +20,32 @@ import { findRoleFromCommand, getRoleInfo } from '../../lib/role'; import { paths } from '../../lib/paths'; import { buildFrontend } from './buildFrontend'; import { buildBackend } from './buildBackend'; +import { isValidUrl } from '../../lib/urls'; export async function command(opts: OptionValues): Promise { const role = await findRoleFromCommand(opts); - if (role === 'frontend') { - return buildFrontend({ - targetDir: paths.targetDir, - configPaths: opts.config as string[], - writeStats: Boolean(opts.stats), - }); - } - if (role === 'backend') { - return buildBackend({ - targetDir: paths.targetDir, - configPaths: opts.config as string[], - skipBuildDependencies: Boolean(opts.skipBuildDependencies), + if (role === 'frontend' || role === 'backend') { + const configPaths = (opts.config as string[]).map(arg => { + if (isValidUrl(arg)) { + return arg; + } + return paths.resolveTarget(arg); }); + + if (role === 'frontend') { + return buildFrontend({ + targetDir: paths.targetDir, + configPaths, + writeStats: Boolean(opts.stats), + }); + } else { + return buildBackend({ + targetDir: paths.targetDir, + configPaths, + skipBuildDependencies: Boolean(opts.skipBuildDependencies), + }); + } } const roleInfo = getRoleInfo(role); From 5786b18dca576f23710fc07ce1dbcc4ca477b0ff Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 4 Apr 2023 12:36:34 +0200 Subject: [PATCH 132/137] cli: lint fix Signed-off-by: Patrik Oldsberg --- packages/cli/src/commands/build/command.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/cli/src/commands/build/command.ts b/packages/cli/src/commands/build/command.ts index dcbf65331d..90b76545ce 100644 --- a/packages/cli/src/commands/build/command.ts +++ b/packages/cli/src/commands/build/command.ts @@ -39,13 +39,12 @@ export async function command(opts: OptionValues): Promise { configPaths, writeStats: Boolean(opts.stats), }); - } else { - return buildBackend({ - targetDir: paths.targetDir, - configPaths, - skipBuildDependencies: Boolean(opts.skipBuildDependencies), - }); } + return buildBackend({ + targetDir: paths.targetDir, + configPaths, + skipBuildDependencies: Boolean(opts.skipBuildDependencies), + }); } const roleInfo = getRoleInfo(role); From 9a5a1c4ba2d29d3d3e1340a8f906d7f8fd5a3961 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 4 Apr 2023 13:14:06 +0000 Subject: [PATCH 133/137] Version Packages (next) --- .changeset/pre.json | 24 + docs/releases/v1.13.0-next.2-changelog.md | 2337 +++++++++++++++++ package.json | 2 +- packages/app-defaults/CHANGELOG.md | 11 + packages/app-defaults/package.json | 2 +- packages/app/CHANGELOG.md | 69 + packages/app/package.json | 2 +- packages/backend-app-api/CHANGELOG.md | 17 + packages/backend-app-api/package.json | 2 +- packages/backend-common/CHANGELOG.md | 17 + packages/backend-common/package.json | 2 +- packages/backend-defaults/CHANGELOG.md | 9 + packages/backend-defaults/package.json | 2 +- packages/backend-next/CHANGELOG.md | 22 + packages/backend-next/package.json | 2 +- packages/backend-plugin-api/CHANGELOG.md | 11 + packages/backend-plugin-api/package.json | 2 +- packages/backend-tasks/CHANGELOG.md | 10 + packages/backend-tasks/package.json | 2 +- packages/backend-test-utils/CHANGELOG.md | 12 + packages/backend-test-utils/package.json | 2 +- packages/backend/CHANGELOG.md | 51 + packages/backend/package.json | 2 +- packages/catalog-client/CHANGELOG.md | 9 + packages/catalog-client/package.json | 2 +- packages/cli/CHANGELOG.md | 14 + packages/cli/package.json | 2 +- packages/core-app-api/CHANGELOG.md | 10 + packages/core-app-api/package.json | 2 +- packages/core-components/CHANGELOG.md | 13 + packages/core-components/package.json | 2 +- packages/core-plugin-api/CHANGELOG.md | 10 + packages/core-plugin-api/package.json | 2 +- packages/create-app/CHANGELOG.md | 16 + packages/create-app/package.json | 2 +- packages/dev-utils/CHANGELOG.md | 15 + packages/dev-utils/package.json | 2 +- packages/e2e-test/CHANGELOG.md | 9 + packages/e2e-test/package.json | 2 +- packages/integration-react/CHANGELOG.md | 11 + packages/integration-react/package.json | 2 +- .../techdocs-cli-embedded-app/CHANGELOG.md | 19 + .../techdocs-cli-embedded-app/package.json | 2 +- packages/techdocs-cli/CHANGELOG.md | 11 + packages/techdocs-cli/package.json | 2 +- packages/test-utils/CHANGELOG.md | 13 + packages/test-utils/package.json | 2 +- plugins/adr-backend/CHANGELOG.md | 14 + plugins/adr-backend/package.json | 2 +- plugins/adr/CHANGELOG.md | 15 + plugins/adr/package.json | 2 +- plugins/airbrake-backend/CHANGELOG.md | 8 + plugins/airbrake-backend/package.json | 2 +- plugins/airbrake/CHANGELOG.md | 13 + plugins/airbrake/package.json | 2 +- plugins/allure/CHANGELOG.md | 11 + plugins/allure/package.json | 2 +- plugins/analytics-module-ga/CHANGELOG.md | 10 + plugins/analytics-module-ga/package.json | 2 +- plugins/apache-airflow/CHANGELOG.md | 8 + plugins/apache-airflow/package.json | 2 +- plugins/api-docs/CHANGELOG.md | 12 + plugins/api-docs/package.json | 2 +- plugins/apollo-explorer/CHANGELOG.md | 9 + plugins/apollo-explorer/package.json | 2 +- plugins/app-backend/CHANGELOG.md | 11 + plugins/app-backend/package.json | 2 +- plugins/auth-backend/CHANGELOG.md | 13 + plugins/auth-backend/package.json | 2 +- plugins/auth-node/CHANGELOG.md | 9 + plugins/auth-node/package.json | 2 +- plugins/azure-devops-backend/CHANGELOG.md | 9 + plugins/azure-devops-backend/package.json | 2 +- plugins/azure-devops/CHANGELOG.md | 13 + plugins/azure-devops/package.json | 2 +- plugins/azure-sites-backend/CHANGELOG.md | 9 + plugins/azure-sites-backend/package.json | 2 +- plugins/azure-sites/CHANGELOG.md | 12 + plugins/azure-sites/package.json | 2 +- plugins/badges-backend/CHANGELOG.md | 11 + plugins/badges-backend/package.json | 2 +- plugins/badges/CHANGELOG.md | 12 + plugins/badges/package.json | 2 +- plugins/bazaar-backend/CHANGELOG.md | 11 + plugins/bazaar-backend/package.json | 2 +- plugins/bazaar/CHANGELOG.md | 15 + plugins/bazaar/package.json | 2 +- plugins/bitrise/CHANGELOG.md | 12 + plugins/bitrise/package.json | 2 +- .../catalog-backend-module-aws/CHANGELOG.md | 17 + .../catalog-backend-module-aws/package.json | 2 +- .../catalog-backend-module-azure/CHANGELOG.md | 17 + .../catalog-backend-module-azure/package.json | 2 +- .../CHANGELOG.md | 17 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 19 + .../package.json | 2 +- .../CHANGELOG.md | 15 + .../package.json | 2 +- .../CHANGELOG.md | 16 + .../package.json | 2 +- .../catalog-backend-module-ldap/CHANGELOG.md | 13 + .../catalog-backend-module-ldap/package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- plugins/catalog-backend/CHANGELOG.md | 23 + plugins/catalog-backend/package.json | 2 +- plugins/catalog-customized/CHANGELOG.md | 8 + plugins/catalog-customized/package.json | 2 +- plugins/catalog-graph/CHANGELOG.md | 12 + plugins/catalog-graph/package.json | 2 +- plugins/catalog-import/CHANGELOG.md | 16 + plugins/catalog-import/package.json | 2 +- plugins/catalog-node/CHANGELOG.md | 12 + plugins/catalog-node/package.json | 2 +- plugins/catalog-react/CHANGELOG.md | 20 + plugins/catalog-react/package.json | 2 +- plugins/catalog/CHANGELOG.md | 18 + plugins/catalog/package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/cicd-statistics/CHANGELOG.md | 10 + plugins/cicd-statistics/package.json | 2 +- plugins/circleci/CHANGELOG.md | 12 + plugins/circleci/package.json | 2 +- plugins/cloudbuild/CHANGELOG.md | 11 + plugins/cloudbuild/package.json | 2 +- plugins/code-climate/CHANGELOG.md | 11 + plugins/code-climate/package.json | 2 +- plugins/code-coverage-backend/CHANGELOG.md | 12 + plugins/code-coverage-backend/package.json | 2 +- plugins/code-coverage/CHANGELOG.md | 14 + plugins/code-coverage/package.json | 2 +- plugins/codescene/CHANGELOG.md | 11 + plugins/codescene/package.json | 2 +- plugins/config-schema/CHANGELOG.md | 12 + plugins/config-schema/package.json | 2 +- plugins/cost-insights/CHANGELOG.md | 14 + plugins/cost-insights/package.json | 2 +- plugins/dynatrace/CHANGELOG.md | 11 + plugins/dynatrace/package.json | 2 +- plugins/entity-feedback-backend/CHANGELOG.md | 12 + plugins/entity-feedback-backend/package.json | 2 +- plugins/entity-feedback/CHANGELOG.md | 13 + plugins/entity-feedback/package.json | 2 +- plugins/entity-validation/CHANGELOG.md | 14 + plugins/entity-validation/package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- .../events-backend-module-azure/CHANGELOG.md | 8 + .../events-backend-module-azure/package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../events-backend-module-gerrit/CHANGELOG.md | 8 + .../events-backend-module-gerrit/package.json | 2 +- .../events-backend-module-github/CHANGELOG.md | 9 + .../events-backend-module-github/package.json | 2 +- .../events-backend-module-gitlab/CHANGELOG.md | 9 + .../events-backend-module-gitlab/package.json | 2 +- .../events-backend-test-utils/CHANGELOG.md | 7 + .../events-backend-test-utils/package.json | 2 +- plugins/events-backend/CHANGELOG.md | 10 + plugins/events-backend/package.json | 2 +- plugins/events-node/CHANGELOG.md | 7 + plugins/events-node/package.json | 2 +- .../example-todo-list-backend/CHANGELOG.md | 11 + .../example-todo-list-backend/package.json | 2 +- plugins/example-todo-list/CHANGELOG.md | 9 + plugins/example-todo-list/package.json | 2 +- plugins/explore-backend/CHANGELOG.md | 11 + plugins/explore-backend/package.json | 2 +- plugins/explore-react/CHANGELOG.md | 8 + plugins/explore-react/package.json | 2 +- plugins/explore/CHANGELOG.md | 16 + plugins/explore/package.json | 2 +- plugins/firehydrant/CHANGELOG.md | 11 + plugins/firehydrant/package.json | 2 +- plugins/fossa/CHANGELOG.md | 12 + plugins/fossa/package.json | 2 +- plugins/gcalendar/CHANGELOG.md | 10 + plugins/gcalendar/package.json | 2 +- plugins/gcp-projects/CHANGELOG.md | 9 + plugins/gcp-projects/package.json | 2 +- plugins/git-release-manager/CHANGELOG.md | 11 + plugins/git-release-manager/package.json | 2 +- plugins/github-actions/CHANGELOG.md | 12 + plugins/github-actions/package.json | 2 +- plugins/github-deployments/CHANGELOG.md | 14 + plugins/github-deployments/package.json | 2 +- plugins/github-issues/CHANGELOG.md | 13 + plugins/github-issues/package.json | 2 +- .../github-pull-requests-board/CHANGELOG.md | 12 + .../github-pull-requests-board/package.json | 2 +- plugins/gitops-profiles/CHANGELOG.md | 10 + plugins/gitops-profiles/package.json | 2 +- plugins/gocd/CHANGELOG.md | 12 + plugins/gocd/package.json | 2 +- plugins/graphiql/CHANGELOG.md | 9 + plugins/graphiql/package.json | 2 +- plugins/graphql-backend/CHANGELOG.md | 9 + plugins/graphql-backend/package.json | 2 +- plugins/graphql-voyager/CHANGELOG.md | 9 + plugins/graphql-voyager/package.json | 2 +- plugins/home/CHANGELOG.md | 12 + plugins/home/package.json | 2 +- plugins/ilert/CHANGELOG.md | 12 + plugins/ilert/package.json | 2 +- plugins/jenkins-backend/CHANGELOG.md | 14 + plugins/jenkins-backend/package.json | 2 +- plugins/jenkins/CHANGELOG.md | 13 + plugins/jenkins/package.json | 2 +- plugins/kafka-backend/CHANGELOG.md | 11 + plugins/kafka-backend/package.json | 2 +- plugins/kafka/CHANGELOG.md | 12 + plugins/kafka/package.json | 2 +- plugins/kubernetes-backend/CHANGELOG.md | 22 + plugins/kubernetes-backend/package.json | 2 +- plugins/kubernetes/CHANGELOG.md | 13 + plugins/kubernetes/package.json | 2 +- plugins/lighthouse-backend/CHANGELOG.md | 13 + plugins/lighthouse-backend/package.json | 2 +- plugins/lighthouse/CHANGELOG.md | 13 + plugins/lighthouse/package.json | 2 +- plugins/linguist-backend/CHANGELOG.md | 15 + plugins/linguist-backend/package.json | 2 +- plugins/linguist/CHANGELOG.md | 13 + plugins/linguist/package.json | 2 +- plugins/microsoft-calendar/CHANGELOG.md | 10 + plugins/microsoft-calendar/package.json | 2 +- plugins/newrelic-dashboard/CHANGELOG.md | 11 + plugins/newrelic-dashboard/package.json | 2 +- plugins/newrelic/CHANGELOG.md | 9 + plugins/newrelic/package.json | 2 +- plugins/octopus-deploy/CHANGELOG.md | 11 + plugins/octopus-deploy/package.json | 2 +- plugins/org-react/CHANGELOG.md | 12 + plugins/org-react/package.json | 2 +- plugins/org/CHANGELOG.md | 11 + plugins/org/package.json | 2 +- plugins/pagerduty/CHANGELOG.md | 12 + plugins/pagerduty/package.json | 2 +- plugins/periskop-backend/CHANGELOG.md | 9 + plugins/periskop-backend/package.json | 2 +- plugins/periskop/CHANGELOG.md | 12 + plugins/periskop/package.json | 2 +- plugins/permission-backend/CHANGELOG.md | 14 + plugins/permission-backend/package.json | 2 +- plugins/permission-node/CHANGELOG.md | 13 + plugins/permission-node/package.json | 2 +- plugins/permission-react/CHANGELOG.md | 9 + plugins/permission-react/package.json | 2 +- plugins/playlist-backend/CHANGELOG.md | 15 + plugins/playlist-backend/package.json | 2 +- plugins/playlist/CHANGELOG.md | 18 + plugins/playlist/package.json | 2 +- plugins/proxy-backend/CHANGELOG.md | 9 + plugins/proxy-backend/package.json | 2 +- plugins/rollbar-backend/CHANGELOG.md | 9 + plugins/rollbar-backend/package.json | 2 +- plugins/rollbar/CHANGELOG.md | 11 + plugins/rollbar/package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/scaffolder-backend/CHANGELOG.md | 23 + plugins/scaffolder-backend/package.json | 2 +- plugins/scaffolder-node/CHANGELOG.md | 11 + plugins/scaffolder-node/package.json | 2 +- plugins/scaffolder-react/CHANGELOG.md | 19 + plugins/scaffolder-react/package.json | 2 +- plugins/scaffolder/CHANGELOG.md | 27 + plugins/scaffolder/package.json | 2 +- .../CHANGELOG.md | 16 + .../package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- plugins/search-backend-module-pg/CHANGELOG.md | 11 + plugins/search-backend-module-pg/package.json | 2 +- .../CHANGELOG.md | 17 + .../package.json | 2 +- plugins/search-backend-node/CHANGELOG.md | 13 + plugins/search-backend-node/package.json | 2 +- plugins/search-backend/CHANGELOG.md | 16 + plugins/search-backend/package.json | 2 +- plugins/search-react/CHANGELOG.md | 12 + plugins/search-react/package.json | 2 +- plugins/search/CHANGELOG.md | 21 + plugins/search/package.json | 2 +- plugins/sentry/CHANGELOG.md | 11 + plugins/sentry/package.json | 2 +- plugins/shortcuts/CHANGELOG.md | 10 + plugins/shortcuts/package.json | 2 +- plugins/sonarqube-backend/CHANGELOG.md | 9 + plugins/sonarqube-backend/package.json | 2 +- plugins/sonarqube-react/CHANGELOG.md | 8 + plugins/sonarqube-react/package.json | 2 +- plugins/sonarqube/CHANGELOG.md | 12 + plugins/sonarqube/package.json | 2 +- plugins/splunk-on-call/CHANGELOG.md | 11 + plugins/splunk-on-call/package.json | 2 +- plugins/stack-overflow-backend/CHANGELOG.md | 9 + plugins/stack-overflow-backend/package.json | 2 +- plugins/stack-overflow/CHANGELOG.md | 13 + plugins/stack-overflow/package.json | 2 +- plugins/stackstorm/CHANGELOG.md | 10 + plugins/stackstorm/package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- plugins/tech-insights-backend/CHANGELOG.md | 15 + plugins/tech-insights-backend/package.json | 2 +- plugins/tech-insights-node/CHANGELOG.md | 11 + plugins/tech-insights-node/package.json | 2 +- plugins/tech-insights/CHANGELOG.md | 14 + plugins/tech-insights/package.json | 2 +- plugins/tech-radar/CHANGELOG.md | 9 + plugins/tech-radar/package.json | 2 +- .../techdocs-addons-test-utils/CHANGELOG.md | 16 + .../techdocs-addons-test-utils/package.json | 2 +- plugins/techdocs-backend/CHANGELOG.md | 18 + plugins/techdocs-backend/package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- plugins/techdocs-node/CHANGELOG.md | 13 + plugins/techdocs-node/package.json | 2 +- plugins/techdocs-react/CHANGELOG.md | 11 + plugins/techdocs-react/package.json | 2 +- plugins/techdocs/CHANGELOG.md | 18 + plugins/techdocs/package.json | 2 +- plugins/todo-backend/CHANGELOG.md | 14 + plugins/todo-backend/package.json | 2 +- plugins/todo/CHANGELOG.md | 12 + plugins/todo/package.json | 2 +- plugins/user-settings-backend/CHANGELOG.md | 12 + plugins/user-settings-backend/package.json | 2 +- plugins/user-settings/CHANGELOG.md | 13 + plugins/user-settings/package.json | 2 +- plugins/vault-backend/CHANGELOG.md | 10 + plugins/vault-backend/package.json | 2 +- plugins/vault/CHANGELOG.md | 12 + plugins/vault/package.json | 2 +- plugins/xcmetrics/CHANGELOG.md | 11 + plugins/xcmetrics/package.json | 2 +- yarn.lock | 13 +- 364 files changed, 4890 insertions(+), 182 deletions(-) create mode 100644 docs/releases/v1.13.0-next.2-changelog.md diff --git a/.changeset/pre.json b/.changeset/pre.json index cfe5cab8e7..bf70830cad 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -220,17 +220,29 @@ }, "changesets": [ "all-my-auth-wanna-ride-today", + "blue-walls-drop", "bright-pumpkins-bake", + "calm-otters-destroy", "chatty-coats-thank", "clean-dolls-search", + "clean-items-draw", + "clean-teachers-thank", + "clever-lizards-whisper", "create-app-1679405836", "curly-boats-trade", "curly-jobs-kneel", + "curly-steaks-mate", "curvy-rocks-guess", + "eight-trainers-smoke", "eleven-bats-tease", "eleven-coats-refuse", "fair-roses-stare", + "famous-beds-break", + "famous-beds-repair", + "fast-gorillas-approve", "fast-snakes-buy", + "flat-ways-compete", + "forty-days-tell", "forty-gorillas-help", "fresh-schools-fly", "funny-pots-hide", @@ -242,6 +254,7 @@ "heavy-colts-wash", "hungry-lies-cry", "hungry-monkeys-reply", + "itchy-ads-sit", "khaki-cars-drum", "khaki-doors-compare", "khaki-guests-turn", @@ -250,15 +263,20 @@ "long-gorillas-remain", "many-eggs-press", "mighty-lamps-cross", + "modern-snakes-check", "nasty-nails-appear", "neat-donkeys-work", + "neat-pears-argue", "new-pigs-jam", "odd-grapes-double", "old-cougars-sit", "olive-cycles-join", "olive-months-talk", "orange-rabbits-jam", + "perfect-deers-add", + "poor-cars-fold", "popular-parents-crash", + "popular-radios-visit", "pretty-carpets-cross", "rare-seals-decide", "renovate-179fa0e", @@ -268,16 +286,20 @@ "seven-gifts-fetch", "short-panthers-float", "silly-adults-accept", + "six-jobs-hear", "soft-roses-cover", "sour-buttons-collect", "sour-dragons-cheat", "stale-cobras-beg", + "stale-paws-sparkle", "strong-crews-repeat", + "stupid-laws-play", "swift-meals-live", "tall-chairs-explain", "tall-oranges-own", "ten-hounds-bathe", "ten-mayflies-beam", + "tender-parrots-fry", "thick-forks-prove", "thin-spoons-prove", "thirty-crabs-tell", @@ -285,7 +307,9 @@ "tough-cameras-beam", "twelve-parrots-camp", "twelve-vans-sell", + "unlucky-snakes-smile", "warm-buses-switch", + "weak-oranges-give", "weak-turtles-arrive", "wet-lamps-happen", "wise-garlics-camp", diff --git a/docs/releases/v1.13.0-next.2-changelog.md b/docs/releases/v1.13.0-next.2-changelog.md new file mode 100644 index 0000000000..a6c4808306 --- /dev/null +++ b/docs/releases/v1.13.0-next.2-changelog.md @@ -0,0 +1,2337 @@ +# Release v1.13.0-next.2 + +## @backstage/plugin-kubernetes-backend@0.10.0-next.2 + +### Minor Changes + +- e6c7c850129: Plugins that instantiate the `KubernetesProxy` must now provide a parameter of the type `KubernetesProxyOptions` which includes providing a `KubernetesAuthTranslator`. The `KubernetesBuilder` now builds its own `KubernetesAuthTranslatorMap` that it provides to the `KubernetesProxy`. The `DispatchingKubernetesAuthTranslator` expects a `KubernetesTranslatorMap` to be provided as a parameter. The `KubernetesBuilder` now has a method called `setAuthTranslatorMap` which allows integrators to bring their own `KubernetesAuthTranslator's` to the `KubernetesPlugin`. + +### Patch Changes + +- 76e8f08fa24: fix localKubectlProxy auth provider fetching +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-catalog-node@1.3.5-next.2 + - @backstage/plugin-kubernetes-common@0.6.2-next.1 + - @backstage/plugin-permission-common@0.7.5-next.0 + +## @backstage/plugin-scaffolder@1.13.0-next.2 + +### Minor Changes + +- cf18c32934a: The Installed Actions page now shows details for nested objects and arrays + +### Patch Changes + +- 90dda42cfd2: bug: Invert `templateFilter` predicate to align with `Array.filter` +- 34dab7ee7f8: `scaffolder/next`: bump `rjsf` dependencies to `5.5.0` +- Updated dependencies + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/plugin-scaffolder-react@1.3.0-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-permission-react@0.4.12-next.1 + - @backstage/plugin-scaffolder-common@1.2.7-next.1 + +## @backstage/plugin-search@1.2.0-next.2 + +### Minor Changes + +- d6b73b0380d: Search modal auto closes on location change + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4-next.0 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-search-react@1.5.2-next.2 + +## @backstage/app-defaults@1.3.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/core-app-api@1.7.0-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-permission-react@0.4.12-next.1 + +## @backstage/backend-app-api@0.4.2-next.2 + +### Patch Changes + +- 5c7ce585824: Allow an additionalConfig to be provided to loadBackendConfig that fetches config values during runtime. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/config-loader@1.1.9 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + +## @backstage/backend-common@0.18.4-next.2 + +### Patch Changes + +- 5c7ce585824: Allow an additionalConfig to be provided to loadBackendConfig that fetches config values during runtime. +- Updated dependencies + - @backstage/backend-app-api@0.4.2-next.2 + - @backstage/backend-dev-utils@0.1.1 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/config-loader@1.1.9 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/integration-aws-node@0.1.2 + - @backstage/types@1.0.2 + +## @backstage/backend-defaults@0.1.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@0.4.2-next.2 + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + +## @backstage/backend-plugin-api@0.5.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + +## @backstage/backend-tasks@0.5.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/backend-test-utils@0.1.36-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@0.4.2-next.2 + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + +## @backstage/catalog-client@1.4.1-next.0 + +### Patch Changes + +- c1c4e080b79: Fixed bug in `queryEntities` of `CatalogClient` where the `sortField` is supposed to be changed to `orderField`. +- Updated dependencies + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + +## @backstage/cli@0.22.6-next.2 + +### Patch Changes + +- 8075b67e64c: When building a backend package with dependencies any `--config ` options will now be forwarded to any dependent app package builds, unless the build script in the app package already contains a `--config` option. +- Updated dependencies + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/config-loader@1.1.9 + - @backstage/errors@1.1.5 + - @backstage/eslint-plugin@0.1.3-next.0 + - @backstage/release-manifests@0.0.9 + - @backstage/types@1.0.2 + +## @backstage/core-app-api@1.7.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4-next.0 + +## @backstage/core-components@0.12.6-next.2 + +### Patch Changes + +- 67140d9f96f: Upgrade `react-virtualized-auto-sizer´ to version `^1.0.11\` +- 7e60bee2dea: Split the `BackstageSidebar` style `drawer` class, such that the `width` property is in a separate `drawerWidth` class instead. This makes it such that you can style the `drawer` class in your theme again. +- Updated dependencies + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/version-bridge@1.0.4-next.0 + +## @backstage/core-plugin-api@1.5.1-next.1 + +### Patch Changes + +- 2898b6c8d52: Minor type tweaks for TypeScript 5.0 +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4-next.0 + +## @backstage/create-app@0.4.39-next.2 + +### Patch Changes + +- 2945923b133: Upgraded the TypeScript version to 5.0 + + To apply this change in your own project, switch the TypeScript version in your root `package.json`: + + ```diff + - "typescript": "~4.6.4", + + "typescript": "~5.0.0", + ``` + +- Updated dependencies + - @backstage/cli-common@0.1.12 + +## @backstage/dev-utils@1.0.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/app-defaults@1.3.0-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/core-app-api@1.7.0-next.2 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/test-utils@1.3.0-next.2 + - @backstage/theme@0.2.19-next.0 + +## @backstage/integration-react@1.1.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.4-next.0 + - @backstage/theme@0.2.19-next.0 + +## @techdocs/cli@1.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/plugin-techdocs-node@1.6.1-next.2 + +## @backstage/test-utils@1.3.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/core-app-api@1.7.0-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-permission-react@0.4.12-next.1 + +## @backstage/plugin-adr@0.4.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-adr-common@0.2.8-next.0 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-search-react@1.5.2-next.2 + +## @backstage/plugin-adr-backend@0.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/plugin-adr-common@0.2.8-next.0 + - @backstage/plugin-search-common@1.2.3-next.0 + +## @backstage/plugin-airbrake@0.3.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/dev-utils@1.0.14-next.2 + - @backstage/test-utils@1.3.0-next.2 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-airbrake-backend@0.2.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + +## @backstage/plugin-allure@0.1.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-analytics-module-ga@0.1.28-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-apache-airflow@0.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + +## @backstage/plugin-api-docs@0.9.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-catalog@1.10.0-next.2 + +## @backstage/plugin-apollo-explorer@0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-app-backend@0.3.44-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/config-loader@1.1.9 + - @backstage/types@1.0.2 + +## @backstage/plugin-auth-backend@0.18.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + +## @backstage/plugin-auth-node@0.2.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-azure-devops@0.2.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-azure-devops-common@0.3.0 + +## @backstage/plugin-azure-devops-backend@0.3.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-devops-common@0.3.0 + +## @backstage/plugin-azure-sites@0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-azure-sites-common@0.1.0 + +## @backstage/plugin-azure-sites-backend@0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-sites-common@0.1.0 + +## @backstage/plugin-badges@0.2.41-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-badges-backend@0.1.38-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-bazaar@0.2.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.22.6-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-catalog@1.10.0-next.2 + +## @backstage/plugin-bazaar-backend@0.2.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.2 + +## @backstage/plugin-bitrise@0.1.44-next.2 + +### Patch Changes + +- 55a969fe574: Bumped `recharts` dependency to `^2.5.0`. +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-catalog@1.10.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-search-react@1.5.2-next.2 + +## @backstage/plugin-catalog-backend@1.8.1-next.2 + +### Patch Changes + +- 62a725e3a94: Use the `LocationSpec` type from the `catalog-common` package in place of the deprecated `LocationSpec` from the `catalog-node` package. +- c36b89f2af3: Fixed bug in the `DefaultCatalogProcessingEngine` where entities that contained multiple different types of relations for the same source entity would not properly trigger stitching for that source entity. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-scaffolder-common@1.2.7-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.0-next.1 + - @backstage/plugin-search-common@1.2.3-next.0 + +## @backstage/plugin-catalog-backend-module-aws@0.1.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + - @backstage/plugin-kubernetes-common@0.6.2-next.1 + +## @backstage/plugin-catalog-backend-module-azure@0.1.15-next.2 + +### Patch Changes + +- 62a725e3a94: Use the `LocationSpec` type from the `catalog-common` package in place of the deprecated `LocationSpec` from the `catalog-node` package. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + +## @backstage/plugin-catalog-backend-module-bitbucket@0.2.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-bitbucket-cloud-common@0.2.5-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.4-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.5-next.0 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + - @backstage/plugin-events-node@0.2.5-next.2 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + +## @backstage/plugin-catalog-backend-module-gerrit@0.1.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + +## @backstage/plugin-catalog-backend-module-github@0.2.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.1-next.2 + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + - @backstage/plugin-events-node@0.2.5-next.2 + +## @backstage/plugin-catalog-backend-module-gitlab@0.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-node@1.3.5-next.2 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.3.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.1-next.2 + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.5-next.2 + - @backstage/plugin-events-node@0.2.5-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + +## @backstage/plugin-catalog-backend-module-ldap@0.5.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + +## @backstage/plugin-catalog-backend-module-msgraph@0.5.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + +## @backstage/plugin-catalog-backend-module-openapi@0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.1-next.2 + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-node@1.3.5-next.2 + +## @backstage/plugin-catalog-graph@0.2.29-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-catalog-import@0.9.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + +## @backstage/plugin-catalog-node@1.3.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + +## @backstage/plugin-catalog-react@1.4.1-next.2 + +### Patch Changes + +- 81bee24c5de: Fixed bug in catalog filters where you could not click on the text to select a value. +- 2898b6c8d52: Minor type tweaks for TypeScript 5.0 +- Updated dependencies + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4-next.0 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-permission-react@0.4.12-next.1 + +## @backstage/plugin-cicd-statistics@0.1.19-next.2 + +### Patch Changes + +- 55a969fe574: Bumped `recharts` dependency to `^2.5.0`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + +## @backstage/plugin-cicd-statistics-module-gitlab@0.1.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-cicd-statistics@0.1.19-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + +## @backstage/plugin-circleci@0.3.17-next.2 + +### Patch Changes + +- d14ac997c36: Add hover over CircleCI avatar icon to show user name in builds table +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-cloudbuild@0.3.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-code-climate@0.1.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-code-coverage@0.2.10-next.2 + +### Patch Changes + +- 55a969fe574: Bumped `recharts` dependency to `^2.5.0`. +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-code-coverage-backend@0.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + +## @backstage/plugin-codescene@0.1.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-config-schema@0.1.40-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + +## @backstage/plugin-cost-insights@0.12.6-next.2 + +### Patch Changes + +- 55a969fe574: Bumped `recharts` dependency to `^2.5.0`. +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-cost-insights-common@0.1.1 + +## @backstage/plugin-dynatrace@3.0.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-entity-feedback@0.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-entity-feedback-common@0.1.1-next.0 + +## @backstage/plugin-entity-feedback-backend@0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-entity-feedback-common@0.1.1-next.0 + +## @backstage/plugin-entity-validation@0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-catalog-common@1.0.13-next.0 + +## @backstage/plugin-events-backend@0.2.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.5-next.2 + +## @backstage/plugin-events-backend-module-aws-sqs@0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-events-node@0.2.5-next.2 + +## @backstage/plugin-events-backend-module-azure@0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/plugin-events-node@0.2.5-next.2 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/plugin-events-node@0.2.5-next.2 + +## @backstage/plugin-events-backend-module-gerrit@0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/plugin-events-node@0.2.5-next.2 + +## @backstage/plugin-events-backend-module-github@0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.5-next.2 + +## @backstage/plugin-events-backend-module-gitlab@0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.5-next.2 + +## @backstage/plugin-events-backend-test-utils@0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.5-next.2 + +## @backstage/plugin-events-node@0.2.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.2 + +## @backstage/plugin-explore@0.4.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-explore-react@0.0.28-next.1 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-search-react@1.5.2-next.2 + +## @backstage/plugin-explore-backend@0.0.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-backend-module-explore@0.1.0-next.1 + - @backstage/plugin-search-common@1.2.3-next.0 + +## @backstage/plugin-explore-react@0.0.28-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/plugin-explore-common@0.0.1 + +## @backstage/plugin-firehydrant@0.2.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-fossa@0.2.49-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-gcalendar@0.3.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-gcp-projects@0.3.36-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-git-release-manager@0.3.30-next.2 + +### Patch Changes + +- 55a969fe574: Bumped `recharts` dependency to `^2.5.0`. +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/integration@1.4.4-next.0 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-github-actions@0.5.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.4-next.0 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-github-deployments@0.1.48-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-github-issues@0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-github-pull-requests-board@0.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.4-next.0 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-gitops-profiles@0.3.35-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-gocd@0.1.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-graphiql@0.2.49-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-graphql-backend@0.1.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-graphql@0.3.20-next.1 + +## @backstage/plugin-graphql-voyager@0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-home@0.4.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-ilert@0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-jenkins@0.7.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-jenkins-common@0.1.15-next.0 + +## @backstage/plugin-jenkins-backend@0.1.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-jenkins-common@0.1.15-next.0 + - @backstage/plugin-permission-common@0.7.5-next.0 + +## @backstage/plugin-kafka@0.3.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-kafka-backend@0.2.37-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-kubernetes@0.7.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-kubernetes-common@0.6.2-next.1 + +## @backstage/plugin-lighthouse@0.4.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-lighthouse-common@0.1.1 + +## @backstage/plugin-lighthouse-backend@0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-lighthouse-common@0.1.1 + +## @backstage/plugin-linguist@0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-linguist-common@0.1.0 + +## @backstage/plugin-linguist-backend@0.2.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-linguist-common@0.1.0 + +## @backstage/plugin-microsoft-calendar@0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-newrelic@0.3.35-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-newrelic-dashboard@0.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-octopus-deploy@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-org@0.6.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-org-react@0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-pagerduty@0.5.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-periskop@0.1.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-periskop-backend@0.1.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + +## @backstage/plugin-permission-backend@0.5.19-next.2 + +### Patch Changes + +- 84946a580c4: Introduced alpha export of the `permissionPlugin` for use in the new backend system, along with a `permissionModuleAllowAllPolicy` that can be used to allow all requests. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + +## @backstage/plugin-permission-node@0.7.7-next.2 + +### Patch Changes + +- 788f0f5a152: Introduced alpha export of the `policyExtensionPoint` for use in the new backend system. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + +## @backstage/plugin-permission-react@0.4.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-permission-common@0.7.5-next.0 + +## @backstage/plugin-playlist@0.1.8-next.2 + +### Patch Changes + +- 1b3c0546047: Added config properties to change dynamically the group noun for all the components in the UI +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-permission-react@0.4.12-next.1 + - @backstage/plugin-playlist-common@0.1.6-next.0 + - @backstage/plugin-search-react@1.5.2-next.2 + +## @backstage/plugin-playlist-backend@0.2.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-playlist-common@0.1.6-next.0 + +## @backstage/plugin-proxy-backend@0.2.38-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + +## @backstage/plugin-rollbar@0.4.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-rollbar-backend@0.1.41-next.2 + +### Patch Changes + +- 66b6cfc5716: Replace `camelcase-keys` dependency with one with better compatibility. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + +## @backstage/plugin-scaffolder-backend@1.13.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.1-next.2 + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/plugin-scaffolder-node@0.1.2-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-scaffolder-common@1.2.7-next.1 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.1.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/plugin-scaffolder-node@0.1.2-next.2 + - @backstage/plugin-scaffolder-backend@1.13.0-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.19-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/plugin-scaffolder-node@0.1.2-next.2 + - @backstage/plugin-scaffolder-backend@1.13.0-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.1.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.2-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + +## @backstage/plugin-scaffolder-backend-module-rails@0.4.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/plugin-scaffolder-node@0.1.2-next.2 + - @backstage/plugin-scaffolder-backend@1.13.0-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.2-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.2-next.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-scaffolder-node@0.1.2-next.2 + +### Patch Changes + +- 2898b6c8d52: Minor type tweaks for TypeScript 5.0 +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-common@1.2.7-next.1 + +## @backstage/plugin-scaffolder-react@1.3.0-next.2 + +### Patch Changes + +- 90dda42cfd2: bug: Invert `templateFilter` predicate to align with `Array.filter` +- 34dab7ee7f8: `scaffolder/next`: bump `rjsf` dependencies to `5.5.0` +- 2898b6c8d52: Minor type tweaks for TypeScript 5.0 +- Updated dependencies + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4-next.0 + - @backstage/plugin-scaffolder-common@1.2.7-next.1 + +## @backstage/plugin-search-backend@1.3.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-search-backend-node@1.2.0-next.2 + - @backstage/plugin-search-common@1.2.3-next.0 + +## @backstage/plugin-search-backend-module-catalog@0.1.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-search-backend-node@1.2.0-next.2 + - @backstage/plugin-search-common@1.2.3-next.0 + +## @backstage/plugin-search-backend-module-elasticsearch@1.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-search-backend-node@1.2.0-next.2 + - @backstage/plugin-search-common@1.2.3-next.0 + +## @backstage/plugin-search-backend-module-explore@0.1.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-backend-node@1.2.0-next.2 + - @backstage/plugin-search-common@1.2.3-next.0 + +## @backstage/plugin-search-backend-module-pg@0.5.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-search-backend-node@1.2.0-next.2 + - @backstage/plugin-search-common@1.2.3-next.0 + +## @backstage/plugin-search-backend-module-techdocs@0.1.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-search-backend-node@1.2.0-next.2 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-techdocs-node@1.6.1-next.2 + +## @backstage/plugin-search-backend-node@1.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-search-common@1.2.3-next.0 + +## @backstage/plugin-search-react@1.5.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4-next.0 + - @backstage/plugin-search-common@1.2.3-next.0 + +## @backstage/plugin-sentry@0.5.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-shortcuts@0.3.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + +## @backstage/plugin-sonarqube@0.6.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-sonarqube-react@0.1.5-next.1 + +## @backstage/plugin-sonarqube-backend@0.1.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-sonarqube-react@0.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + +## @backstage/plugin-splunk-on-call@0.4.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-stack-overflow@0.1.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-home@0.4.33-next.2 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-search-react@1.5.2-next.2 + +## @backstage/plugin-stack-overflow-backend@0.1.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3-next.0 + +## @backstage/plugin-stackstorm@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-tech-insights@0.3.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + +## @backstage/plugin-tech-insights-backend@0.5.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + - @backstage/plugin-tech-insights-node@0.4.2-next.2 + +## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.28-next.2 + +### Patch Changes + +- 9cb1db6546a: When multiple fact retrievers are used for a check, allow for cases where only one returns a given fact +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-tech-insights-common@0.2.10 + - @backstage/plugin-tech-insights-node@0.4.2-next.2 + +## @backstage/plugin-tech-insights-node@0.4.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + +## @backstage/plugin-tech-radar@0.6.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-techdocs@1.6.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-search-react@1.5.2-next.2 + - @backstage/plugin-techdocs-react@1.1.5-next.2 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/plugin-techdocs@1.6.1-next.2 + - @backstage/core-app-api@1.7.0-next.2 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/test-utils@1.3.0-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-catalog@1.10.0-next.2 + - @backstage/plugin-search-react@1.5.2-next.2 + - @backstage/plugin-techdocs-react@1.1.5-next.2 + +## @backstage/plugin-techdocs-backend@1.6.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.0-next.1 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-techdocs-node@1.6.1-next.2 + +## @backstage/plugin-techdocs-module-addons-contrib@1.0.12-next.2 + +### Patch Changes + +- c657d0a610e: Bump `photoswipe` dependency to `^5.3.7`. +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/integration@1.4.4-next.0 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-techdocs-react@1.1.5-next.2 + +## @backstage/plugin-techdocs-node@1.6.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/integration-aws-node@0.1.2 + - @backstage/plugin-search-common@1.2.3-next.0 + +## @backstage/plugin-techdocs-react@1.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/version-bridge@1.0.4-next.0 + +## @backstage/plugin-todo@0.2.19-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-todo-backend@0.1.41-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + +## @backstage/plugin-user-settings@0.7.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/core-app-api@1.7.0-next.2 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + +## @backstage/plugin-user-settings-backend@0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + +## @backstage/plugin-vault@0.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + +## @backstage/plugin-vault-backend@0.3.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-xcmetrics@0.2.37-next.2 + +### Patch Changes + +- 55a969fe574: Bumped `recharts` dependency to `^2.5.0`. +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + +## example-app@0.2.82-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-circleci@0.3.17-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.12-next.2 + - @backstage/cli@0.22.6-next.2 + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/plugin-scaffolder-react@1.3.0-next.2 + - @backstage/plugin-scaffolder@1.13.0-next.2 + - @backstage/plugin-code-coverage@0.2.10-next.2 + - @backstage/plugin-cost-insights@0.12.6-next.2 + - @backstage/plugin-playlist@0.1.8-next.2 + - @backstage/plugin-search@1.2.0-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/plugin-techdocs@1.6.1-next.2 + - @backstage/app-defaults@1.3.0-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/core-app-api@1.7.0-next.2 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-airbrake@0.3.17-next.2 + - @backstage/plugin-apache-airflow@0.2.10-next.2 + - @backstage/plugin-api-docs@0.9.2-next.2 + - @backstage/plugin-azure-devops@0.2.8-next.2 + - @backstage/plugin-azure-sites@0.1.6-next.2 + - @backstage/plugin-badges@0.2.41-next.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-graph@0.2.29-next.2 + - @backstage/plugin-catalog-import@0.9.7-next.2 + - @backstage/plugin-cloudbuild@0.3.17-next.2 + - @backstage/plugin-dynatrace@3.0.1-next.2 + - @backstage/plugin-entity-feedback@0.2.0-next.2 + - @backstage/plugin-explore@0.4.2-next.2 + - @backstage/plugin-gcalendar@0.3.13-next.2 + - @backstage/plugin-gcp-projects@0.3.36-next.2 + - @backstage/plugin-github-actions@0.5.17-next.2 + - @backstage/plugin-gocd@0.1.23-next.2 + - @backstage/plugin-graphiql@0.2.49-next.2 + - @backstage/plugin-home@0.4.33-next.2 + - @backstage/plugin-jenkins@0.7.16-next.2 + - @backstage/plugin-kafka@0.3.17-next.2 + - @backstage/plugin-kubernetes@0.7.10-next.2 + - @backstage/plugin-lighthouse@0.4.2-next.2 + - @backstage/plugin-linguist@0.1.2-next.2 + - @backstage/plugin-linguist-common@0.1.0 + - @backstage/plugin-microsoft-calendar@0.1.2-next.2 + - @backstage/plugin-newrelic@0.3.35-next.2 + - @backstage/plugin-newrelic-dashboard@0.2.10-next.2 + - @backstage/plugin-org@0.6.7-next.2 + - @backstage/plugin-pagerduty@0.5.10-next.2 + - @backstage/plugin-permission-react@0.4.12-next.1 + - @backstage/plugin-rollbar@0.4.17-next.2 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-search-react@1.5.2-next.2 + - @backstage/plugin-sentry@0.5.2-next.2 + - @backstage/plugin-shortcuts@0.3.9-next.2 + - @backstage/plugin-stack-overflow@0.1.13-next.2 + - @backstage/plugin-stackstorm@0.1.1-next.2 + - @backstage/plugin-tech-insights@0.3.9-next.2 + - @backstage/plugin-tech-radar@0.6.3-next.2 + - @backstage/plugin-techdocs-react@1.1.5-next.2 + - @backstage/plugin-todo@0.2.19-next.2 + - @backstage/plugin-user-settings@0.7.2-next.2 + - @internal/plugin-catalog-customized@0.0.9-next.2 + +## example-backend@0.2.82-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.10.0-next.2 + - @backstage/plugin-catalog-backend@1.8.1-next.2 + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/plugin-permission-backend@0.5.19-next.2 + - @backstage/plugin-rollbar-backend@0.1.41-next.2 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.28-next.2 + - @backstage/plugin-scaffolder-backend@1.13.0-next.2 + - example-app@0.2.82-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.4-next.0 + - @backstage/plugin-adr-backend@0.3.2-next.2 + - @backstage/plugin-app-backend@0.3.44-next.2 + - @backstage/plugin-auth-backend@0.18.2-next.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-azure-devops-backend@0.3.23-next.2 + - @backstage/plugin-azure-sites-backend@0.1.6-next.2 + - @backstage/plugin-badges-backend@0.1.38-next.2 + - @backstage/plugin-catalog-node@1.3.5-next.2 + - @backstage/plugin-code-coverage-backend@0.2.10-next.2 + - @backstage/plugin-entity-feedback-backend@0.1.2-next.2 + - @backstage/plugin-events-backend@0.2.5-next.2 + - @backstage/plugin-events-node@0.2.5-next.2 + - @backstage/plugin-explore-backend@0.0.6-next.2 + - @backstage/plugin-graphql-backend@0.1.34-next.2 + - @backstage/plugin-jenkins-backend@0.1.34-next.2 + - @backstage/plugin-kafka-backend@0.2.37-next.2 + - @backstage/plugin-lighthouse-backend@0.1.2-next.2 + - @backstage/plugin-linguist-backend@0.2.1-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-playlist-backend@0.2.7-next.2 + - @backstage/plugin-proxy-backend@0.2.38-next.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.12-next.2 + - @backstage/plugin-search-backend@1.3.0-next.2 + - @backstage/plugin-search-backend-module-elasticsearch@1.2.0-next.2 + - @backstage/plugin-search-backend-module-pg@0.5.5-next.2 + - @backstage/plugin-search-backend-node@1.2.0-next.2 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-tech-insights-backend@0.5.10-next.2 + - @backstage/plugin-tech-insights-node@0.4.2-next.2 + - @backstage/plugin-techdocs-backend@1.6.1-next.2 + - @backstage/plugin-todo-backend@0.1.41-next.2 + +## example-backend-next@0.0.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.10.0-next.2 + - @backstage/plugin-catalog-backend@1.8.1-next.2 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/plugin-permission-backend@0.5.19-next.2 + - @backstage/plugin-scaffolder-backend@1.13.0-next.2 + - @backstage/backend-defaults@0.1.9-next.2 + - @backstage/plugin-app-backend@0.3.44-next.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-search-backend@1.3.0-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.0-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.0-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.0-next.1 + - @backstage/plugin-search-backend-node@1.2.0-next.2 + - @backstage/plugin-techdocs-backend@1.6.1-next.2 + - @backstage/plugin-todo-backend@0.1.41-next.2 + +## e2e-test@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.4.39-next.2 + - @backstage/cli-common@0.1.12 + - @backstage/errors@1.1.5 + +## techdocs-cli-embedded-app@0.2.81-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.22.6-next.2 + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/plugin-techdocs@1.6.1-next.2 + - @backstage/app-defaults@1.3.0-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/core-app-api@1.7.0-next.2 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/test-utils@1.3.0-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-catalog@1.10.0-next.2 + - @backstage/plugin-techdocs-react@1.1.5-next.2 + +## @internal/plugin-catalog-customized@0.0.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/plugin-catalog@1.10.0-next.2 + +## @internal/plugin-todo-list@1.0.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/theme@0.2.19-next.0 + +## @internal/plugin-todo-list-backend@1.0.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.2 diff --git a/package.json b/package.json index 6cf9251a6c..e6f04eac95 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@types/react": "^17", "@types/react-dom": "^17" }, - "version": "1.13.0-next.1", + "version": "1.13.0-next.2", "dependencies": { "@backstage/errors": "workspace:^", "@manypkg/get-packages": "^1.1.3" diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index 4f073e1b2d..b33264451c 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/app-defaults +## 1.3.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/core-app-api@1.7.0-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-permission-react@0.4.12-next.1 + ## 1.3.0-next.1 ### Patch Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index 7d47452b77..08b726cbbe 100644 --- a/packages/app-defaults/package.json +++ b/packages/app-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/app-defaults", "description": "Provides the default wiring of a Backstage App", - "version": "1.3.0-next.1", + "version": "1.3.0-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 1af398f7c7..3cc4aa0190 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,74 @@ # example-app +## 0.2.82-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-circleci@0.3.17-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.12-next.2 + - @backstage/cli@0.22.6-next.2 + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/plugin-scaffolder-react@1.3.0-next.2 + - @backstage/plugin-scaffolder@1.13.0-next.2 + - @backstage/plugin-code-coverage@0.2.10-next.2 + - @backstage/plugin-cost-insights@0.12.6-next.2 + - @backstage/plugin-playlist@0.1.8-next.2 + - @backstage/plugin-search@1.2.0-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/plugin-techdocs@1.6.1-next.2 + - @backstage/app-defaults@1.3.0-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/core-app-api@1.7.0-next.2 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-airbrake@0.3.17-next.2 + - @backstage/plugin-apache-airflow@0.2.10-next.2 + - @backstage/plugin-api-docs@0.9.2-next.2 + - @backstage/plugin-azure-devops@0.2.8-next.2 + - @backstage/plugin-azure-sites@0.1.6-next.2 + - @backstage/plugin-badges@0.2.41-next.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-graph@0.2.29-next.2 + - @backstage/plugin-catalog-import@0.9.7-next.2 + - @backstage/plugin-cloudbuild@0.3.17-next.2 + - @backstage/plugin-dynatrace@3.0.1-next.2 + - @backstage/plugin-entity-feedback@0.2.0-next.2 + - @backstage/plugin-explore@0.4.2-next.2 + - @backstage/plugin-gcalendar@0.3.13-next.2 + - @backstage/plugin-gcp-projects@0.3.36-next.2 + - @backstage/plugin-github-actions@0.5.17-next.2 + - @backstage/plugin-gocd@0.1.23-next.2 + - @backstage/plugin-graphiql@0.2.49-next.2 + - @backstage/plugin-home@0.4.33-next.2 + - @backstage/plugin-jenkins@0.7.16-next.2 + - @backstage/plugin-kafka@0.3.17-next.2 + - @backstage/plugin-kubernetes@0.7.10-next.2 + - @backstage/plugin-lighthouse@0.4.2-next.2 + - @backstage/plugin-linguist@0.1.2-next.2 + - @backstage/plugin-linguist-common@0.1.0 + - @backstage/plugin-microsoft-calendar@0.1.2-next.2 + - @backstage/plugin-newrelic@0.3.35-next.2 + - @backstage/plugin-newrelic-dashboard@0.2.10-next.2 + - @backstage/plugin-org@0.6.7-next.2 + - @backstage/plugin-pagerduty@0.5.10-next.2 + - @backstage/plugin-permission-react@0.4.12-next.1 + - @backstage/plugin-rollbar@0.4.17-next.2 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-search-react@1.5.2-next.2 + - @backstage/plugin-sentry@0.5.2-next.2 + - @backstage/plugin-shortcuts@0.3.9-next.2 + - @backstage/plugin-stack-overflow@0.1.13-next.2 + - @backstage/plugin-stackstorm@0.1.1-next.2 + - @backstage/plugin-tech-insights@0.3.9-next.2 + - @backstage/plugin-tech-radar@0.6.3-next.2 + - @backstage/plugin-techdocs-react@1.1.5-next.2 + - @backstage/plugin-todo@0.2.19-next.2 + - @backstage/plugin-user-settings@0.7.2-next.2 + - @internal/plugin-catalog-customized@0.0.9-next.2 + ## 0.2.82-next.1 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index d43dd4ac3a..155f33250a 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "example-app", - "version": "0.2.82-next.1", + "version": "0.2.82-next.2", "private": true, "backstage": { "role": "frontend" diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md index 806a6e98b5..429a9ba824 100644 --- a/packages/backend-app-api/CHANGELOG.md +++ b/packages/backend-app-api/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/backend-app-api +## 0.4.2-next.2 + +### Patch Changes + +- 5c7ce585824: Allow an additionalConfig to be provided to loadBackendConfig that fetches config values during runtime. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/config-loader@1.1.9 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + ## 0.4.2-next.1 ### Patch Changes diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index 5006884430..708b9769d5 100644 --- a/packages/backend-app-api/package.json +++ b/packages/backend-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-app-api", "description": "Core API used by Backstage backend apps", - "version": "0.4.2-next.1", + "version": "0.4.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md index 6b001cb651..cd363a7d83 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/backend-common +## 0.18.4-next.2 + +### Patch Changes + +- 5c7ce585824: Allow an additionalConfig to be provided to loadBackendConfig that fetches config values during runtime. +- Updated dependencies + - @backstage/backend-app-api@0.4.2-next.2 + - @backstage/backend-dev-utils@0.1.1 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/config-loader@1.1.9 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/integration-aws-node@0.1.2 + - @backstage/types@1.0.2 + ## 0.18.4-next.1 ### Patch Changes diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index 4b7789a04d..6d6473a721 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.18.4-next.1", + "version": "0.18.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index 889c09ada3..2b2fa0a062 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/backend-defaults +## 0.1.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@0.4.2-next.2 + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + ## 0.1.9-next.1 ### Patch Changes diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index e2d2e6f7e2..3fb8420ca6 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-defaults", "description": "Backend defaults used by Backstage backend apps", - "version": "0.1.9-next.1", + "version": "0.1.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-next/CHANGELOG.md b/packages/backend-next/CHANGELOG.md index 783b3165e5..d325959c18 100644 --- a/packages/backend-next/CHANGELOG.md +++ b/packages/backend-next/CHANGELOG.md @@ -1,5 +1,27 @@ # example-backend-next +## 0.0.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.10.0-next.2 + - @backstage/plugin-catalog-backend@1.8.1-next.2 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/plugin-permission-backend@0.5.19-next.2 + - @backstage/plugin-scaffolder-backend@1.13.0-next.2 + - @backstage/backend-defaults@0.1.9-next.2 + - @backstage/plugin-app-backend@0.3.44-next.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-search-backend@1.3.0-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.0-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.0-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.0-next.1 + - @backstage/plugin-search-backend-node@1.2.0-next.2 + - @backstage/plugin-techdocs-backend@1.6.1-next.2 + - @backstage/plugin-todo-backend@0.1.41-next.2 + ## 0.0.10-next.1 ### Patch Changes diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index 48b4cd10a6..9ad6d2f7a1 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -1,6 +1,6 @@ { "name": "example-backend-next", - "version": "0.0.10-next.1", + "version": "0.0.10-next.2", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md index edce2a0c07..3ded5d7fa4 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/backend-plugin-api +## 0.5.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + ## 0.5.1-next.1 ### Patch Changes diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index 75573fa503..a98cdd0b0f 100644 --- a/packages/backend-plugin-api/package.json +++ b/packages/backend-plugin-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-plugin-api", "description": "Core API used by Backstage backend plugins", - "version": "0.5.1-next.1", + "version": "0.5.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md index 0c905c51df..fa0e3fc00c 100644 --- a/packages/backend-tasks/CHANGELOG.md +++ b/packages/backend-tasks/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/backend-tasks +## 0.5.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.5.1-next.1 ### Patch Changes diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index 40c72fe895..04e4c75470 100644 --- a/packages/backend-tasks/package.json +++ b/packages/backend-tasks/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-tasks", "description": "Common distributed task management library for Backstage backends", - "version": "0.5.1-next.1", + "version": "0.5.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index 95eb874114..a25d966eb5 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/backend-test-utils +## 0.1.36-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@0.4.2-next.2 + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + ## 0.1.36-next.1 ### Patch Changes diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index 5d5d639c66..a9d8f33377 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-test-utils", "description": "Test helpers library for Backstage backends", - "version": "0.1.36-next.1", + "version": "0.1.36-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 4d44a4f7f1..27f99c23a0 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,56 @@ # example-backend +## 0.2.82-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.10.0-next.2 + - @backstage/plugin-catalog-backend@1.8.1-next.2 + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/plugin-permission-backend@0.5.19-next.2 + - @backstage/plugin-rollbar-backend@0.1.41-next.2 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.28-next.2 + - @backstage/plugin-scaffolder-backend@1.13.0-next.2 + - example-app@0.2.82-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.4-next.0 + - @backstage/plugin-adr-backend@0.3.2-next.2 + - @backstage/plugin-app-backend@0.3.44-next.2 + - @backstage/plugin-auth-backend@0.18.2-next.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-azure-devops-backend@0.3.23-next.2 + - @backstage/plugin-azure-sites-backend@0.1.6-next.2 + - @backstage/plugin-badges-backend@0.1.38-next.2 + - @backstage/plugin-catalog-node@1.3.5-next.2 + - @backstage/plugin-code-coverage-backend@0.2.10-next.2 + - @backstage/plugin-entity-feedback-backend@0.1.2-next.2 + - @backstage/plugin-events-backend@0.2.5-next.2 + - @backstage/plugin-events-node@0.2.5-next.2 + - @backstage/plugin-explore-backend@0.0.6-next.2 + - @backstage/plugin-graphql-backend@0.1.34-next.2 + - @backstage/plugin-jenkins-backend@0.1.34-next.2 + - @backstage/plugin-kafka-backend@0.2.37-next.2 + - @backstage/plugin-lighthouse-backend@0.1.2-next.2 + - @backstage/plugin-linguist-backend@0.2.1-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-playlist-backend@0.2.7-next.2 + - @backstage/plugin-proxy-backend@0.2.38-next.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.12-next.2 + - @backstage/plugin-search-backend@1.3.0-next.2 + - @backstage/plugin-search-backend-module-elasticsearch@1.2.0-next.2 + - @backstage/plugin-search-backend-module-pg@0.5.5-next.2 + - @backstage/plugin-search-backend-node@1.2.0-next.2 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-tech-insights-backend@0.5.10-next.2 + - @backstage/plugin-tech-insights-node@0.4.2-next.2 + - @backstage/plugin-techdocs-backend@1.6.1-next.2 + - @backstage/plugin-todo-backend@0.1.41-next.2 + ## 0.2.82-next.1 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index fd8ec82d91..2de450b348 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.2.82-next.1", + "version": "0.2.82-next.2", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/catalog-client/CHANGELOG.md b/packages/catalog-client/CHANGELOG.md index edd3811ef8..90d71ada6c 100644 --- a/packages/catalog-client/CHANGELOG.md +++ b/packages/catalog-client/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/catalog-client +## 1.4.1-next.0 + +### Patch Changes + +- c1c4e080b79: Fixed bug in `queryEntities` of `CatalogClient` where the `sortField` is supposed to be changed to `orderField`. +- Updated dependencies + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + ## 1.4.0 ### Minor Changes diff --git a/packages/catalog-client/package.json b/packages/catalog-client/package.json index 07709d8c65..61af4ff046 100644 --- a/packages/catalog-client/package.json +++ b/packages/catalog-client/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/catalog-client", "description": "An isomorphic client for the catalog backend", - "version": "1.4.0", + "version": "1.4.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index aeb2a3d48d..99918f2da5 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/cli +## 0.22.6-next.2 + +### Patch Changes + +- 8075b67e64c: When building a backend package with dependencies any `--config ` options will now be forwarded to any dependent app package builds, unless the build script in the app package already contains a `--config` option. +- Updated dependencies + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/config-loader@1.1.9 + - @backstage/errors@1.1.5 + - @backstage/eslint-plugin@0.1.3-next.0 + - @backstage/release-manifests@0.0.9 + - @backstage/types@1.0.2 + ## 0.22.6-next.1 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 354321b934..5974116843 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.22.6-next.1", + "version": "0.22.6-next.2", "publishConfig": { "access": "public" }, diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index 35eeb8147b..fbb8d2b430 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/core-app-api +## 1.7.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4-next.0 + ## 1.7.0-next.1 ### Patch Changes diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index b0f3bb2808..6ec3e26ad5 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": "1.7.0-next.1", + "version": "1.7.0-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index ceff1a0857..4f79a0264a 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/core-components +## 0.12.6-next.2 + +### Patch Changes + +- 67140d9f96f: Upgrade `react-virtualized-auto-sizer´ to version `^1.0.11` +- 7e60bee2dea: Split the `BackstageSidebar` style `drawer` class, such that the `width` property is in a separate `drawerWidth` class instead. This makes it such that you can style the `drawer` class in your theme again. +- Updated dependencies + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/version-bridge@1.0.4-next.0 + ## 0.12.6-next.1 ### Patch Changes diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 76c53a7809..a885afc8c7 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.12.6-next.1", + "version": "0.12.6-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/core-plugin-api/CHANGELOG.md b/packages/core-plugin-api/CHANGELOG.md index 8c6258dc11..c3b4b660d1 100644 --- a/packages/core-plugin-api/CHANGELOG.md +++ b/packages/core-plugin-api/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/core-plugin-api +## 1.5.1-next.1 + +### Patch Changes + +- 2898b6c8d52: Minor type tweaks for TypeScript 5.0 +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4-next.0 + ## 1.5.1-next.0 ### Patch Changes diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json index 5bdcf83f4b..a5d55c89c6 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": "1.5.1-next.0", + "version": "1.5.1-next.1", "publishConfig": { "access": "public" }, diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index ee40fba169..861d91dcc3 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/create-app +## 0.4.39-next.2 + +### Patch Changes + +- 2945923b133: Upgraded the TypeScript version to 5.0 + + To apply this change in your own project, switch the TypeScript version in your root `package.json`: + + ```diff + - "typescript": "~4.6.4", + + "typescript": "~5.0.0", + ``` + +- Updated dependencies + - @backstage/cli-common@0.1.12 + ## 0.4.39-next.1 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 20333dff0f..497a4365ad 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/create-app", "description": "A CLI that helps you create your own Backstage app", - "version": "0.4.39-next.1", + "version": "0.4.39-next.2", "publishConfig": { "access": "public" }, diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 89e0b58770..b42a9d04c3 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/dev-utils +## 1.0.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/app-defaults@1.3.0-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/core-app-api@1.7.0-next.2 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/test-utils@1.3.0-next.2 + - @backstage/theme@0.2.19-next.0 + ## 1.0.14-next.1 ### Patch Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 528565d87e..c6a3dcba1b 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": "1.0.14-next.1", + "version": "1.0.14-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/e2e-test/CHANGELOG.md b/packages/e2e-test/CHANGELOG.md index 6aab69e59c..b85b553093 100644 --- a/packages/e2e-test/CHANGELOG.md +++ b/packages/e2e-test/CHANGELOG.md @@ -1,5 +1,14 @@ # e2e-test +## 0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.4.39-next.2 + - @backstage/cli-common@0.1.12 + - @backstage/errors@1.1.5 + ## 0.2.2-next.1 ### Patch Changes diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json index 8d50128a49..558f9c0bf0 100644 --- a/packages/e2e-test/package.json +++ b/packages/e2e-test/package.json @@ -1,7 +1,7 @@ { "name": "e2e-test", "description": "E2E test for verifying Backstage packages", - "version": "0.2.2-next.1", + "version": "0.2.2-next.2", "private": true, "backstage": { "role": "cli" diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index 5ce97a4ba3..b6ada5ca49 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/integration-react +## 1.1.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.4-next.0 + - @backstage/theme@0.2.19-next.0 + ## 1.1.12-next.1 ### Patch Changes diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index e31202c2fc..a65f6b1917 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration-react", "description": "Frontend package for managing integrations towards external systems", - "version": "1.1.12-next.1", + "version": "1.1.12-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index c35144626d..44adfb82ac 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,24 @@ # techdocs-cli-embedded-app +## 0.2.81-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.22.6-next.2 + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/plugin-techdocs@1.6.1-next.2 + - @backstage/app-defaults@1.3.0-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/core-app-api@1.7.0-next.2 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/test-utils@1.3.0-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-catalog@1.10.0-next.2 + - @backstage/plugin-techdocs-react@1.1.5-next.2 + ## 0.2.81-next.1 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index bfadbd8471..38fc6813e6 100644 --- a/packages/techdocs-cli-embedded-app/package.json +++ b/packages/techdocs-cli-embedded-app/package.json @@ -1,6 +1,6 @@ { "name": "techdocs-cli-embedded-app", - "version": "0.2.81-next.1", + "version": "0.2.81-next.2", "private": true, "backstage": { "role": "frontend" diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md index 38a7b04fb8..91b7c5841a 100644 --- a/packages/techdocs-cli/CHANGELOG.md +++ b/packages/techdocs-cli/CHANGELOG.md @@ -1,5 +1,16 @@ # @techdocs/cli +## 1.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/plugin-techdocs-node@1.6.1-next.2 + ## 1.4.1-next.1 ### Patch Changes diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index 86a32e1cf5..b1cfda135f 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -1,7 +1,7 @@ { "name": "@techdocs/cli", "description": "Utility CLI for managing TechDocs sites in Backstage.", - "version": "1.4.1-next.1", + "version": "1.4.1-next.2", "publishConfig": { "access": "public" }, diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index a68765743d..7992c31644 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/test-utils +## 1.3.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/core-app-api@1.7.0-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-permission-react@0.4.12-next.1 + ## 1.3.0-next.1 ### Patch Changes diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index fcba882c19..b94986aca2 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": "1.3.0-next.1", + "version": "1.3.0-next.2", "publishConfig": { "access": "public" }, diff --git a/plugins/adr-backend/CHANGELOG.md b/plugins/adr-backend/CHANGELOG.md index 1779d769f9..fe4d38223c 100644 --- a/plugins/adr-backend/CHANGELOG.md +++ b/plugins/adr-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-adr-backend +## 0.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/plugin-adr-common@0.2.8-next.0 + - @backstage/plugin-search-common@1.2.3-next.0 + ## 0.3.2-next.1 ### Patch Changes diff --git a/plugins/adr-backend/package.json b/plugins/adr-backend/package.json index 8e7c676cc9..fc30f22440 100644 --- a/plugins/adr-backend/package.json +++ b/plugins/adr-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr-backend", - "version": "0.3.2-next.1", + "version": "0.3.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/adr/CHANGELOG.md b/plugins/adr/CHANGELOG.md index 1e193fb1dc..7e5d25251f 100644 --- a/plugins/adr/CHANGELOG.md +++ b/plugins/adr/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-adr +## 0.4.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-adr-common@0.2.8-next.0 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-search-react@1.5.2-next.2 + ## 0.4.2-next.1 ### Patch Changes diff --git a/plugins/adr/package.json b/plugins/adr/package.json index 9928fde364..05414dd8fb 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr", - "version": "0.4.2-next.1", + "version": "0.4.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake-backend/CHANGELOG.md b/plugins/airbrake-backend/CHANGELOG.md index 74d2567b20..a04748cc1e 100644 --- a/plugins/airbrake-backend/CHANGELOG.md +++ b/plugins/airbrake-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-airbrake-backend +## 0.2.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + ## 0.2.17-next.1 ### Patch Changes diff --git a/plugins/airbrake-backend/package.json b/plugins/airbrake-backend/package.json index 3c445c578c..6010fd99be 100644 --- a/plugins/airbrake-backend/package.json +++ b/plugins/airbrake-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake-backend", - "version": "0.2.17-next.1", + "version": "0.2.17-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake/CHANGELOG.md b/plugins/airbrake/CHANGELOG.md index 0869ca7fb0..23c20ab47e 100644 --- a/plugins/airbrake/CHANGELOG.md +++ b/plugins/airbrake/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-airbrake +## 0.3.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/dev-utils@1.0.14-next.2 + - @backstage/test-utils@1.3.0-next.2 + - @backstage/theme@0.2.19-next.0 + ## 0.3.17-next.1 ### Patch Changes diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json index 706793ad41..3045c5e365 100644 --- a/plugins/airbrake/package.json +++ b/plugins/airbrake/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake", - "version": "0.3.17-next.1", + "version": "0.3.17-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/allure/CHANGELOG.md b/plugins/allure/CHANGELOG.md index b0920244c7..70abb3a232 100644 --- a/plugins/allure/CHANGELOG.md +++ b/plugins/allure/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-allure +## 0.1.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + ## 0.1.33-next.1 ### Patch Changes diff --git a/plugins/allure/package.json b/plugins/allure/package.json index ba28028373..015abaa7ee 100644 --- a/plugins/allure/package.json +++ b/plugins/allure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-allure", "description": "A Backstage plugin that integrates with Allure", - "version": "0.1.33-next.1", + "version": "0.1.33-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/analytics-module-ga/CHANGELOG.md b/plugins/analytics-module-ga/CHANGELOG.md index a1728540fd..cbe66ee1db 100644 --- a/plugins/analytics-module-ga/CHANGELOG.md +++ b/plugins/analytics-module-ga/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-analytics-module-ga +## 0.1.28-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19-next.0 + ## 0.1.28-next.1 ### Patch Changes diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json index 9d76a6966f..84270bd42a 100644 --- a/plugins/analytics-module-ga/package.json +++ b/plugins/analytics-module-ga/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-analytics-module-ga", - "version": "0.1.28-next.1", + "version": "0.1.28-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/apache-airflow/CHANGELOG.md b/plugins/apache-airflow/CHANGELOG.md index 8220cfda4a..52f8e91729 100644 --- a/plugins/apache-airflow/CHANGELOG.md +++ b/plugins/apache-airflow/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-apache-airflow +## 0.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + ## 0.2.10-next.1 ### Patch Changes diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json index a0f34b5bf6..e8d548387b 100644 --- a/plugins/apache-airflow/package.json +++ b/plugins/apache-airflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apache-airflow", - "version": "0.2.10-next.1", + "version": "0.2.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index 2d988f1654..2b3efec31b 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-api-docs +## 0.9.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-catalog@1.10.0-next.2 + ## 0.9.2-next.1 ### Patch Changes diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index 9e4592e680..bd4ffcf87e 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-api-docs", "description": "A Backstage plugin that helps represent API entities in the frontend", - "version": "0.9.2-next.1", + "version": "0.9.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/apollo-explorer/CHANGELOG.md b/plugins/apollo-explorer/CHANGELOG.md index 185f55f013..0bc54602cc 100644 --- a/plugins/apollo-explorer/CHANGELOG.md +++ b/plugins/apollo-explorer/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-apollo-explorer +## 0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/theme@0.2.19-next.0 + ## 0.1.10-next.1 ### Patch Changes diff --git a/plugins/apollo-explorer/package.json b/plugins/apollo-explorer/package.json index 486e437f31..4fd555c8a2 100644 --- a/plugins/apollo-explorer/package.json +++ b/plugins/apollo-explorer/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apollo-explorer", - "version": "0.1.10-next.1", + "version": "0.1.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md index 4fc9b23420..7a77524198 100644 --- a/plugins/app-backend/CHANGELOG.md +++ b/plugins/app-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-app-backend +## 0.3.44-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/config-loader@1.1.9 + - @backstage/types@1.0.2 + ## 0.3.44-next.1 ### Patch Changes diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index d8cfdac3ec..c244f8272c 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-app-backend", "description": "A Backstage backend plugin that serves the Backstage frontend app", - "version": "0.3.44-next.1", + "version": "0.3.44-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index 63ca11d829..5f31bc9253 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-auth-backend +## 0.18.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + ## 0.18.2-next.1 ### Patch Changes diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 6ed1a125f7..38497f5d6a 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend", "description": "A Backstage backend plugin that handles authentication", - "version": "0.18.2-next.1", + "version": "0.18.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md index 44ed726d5a..9dde123f84 100644 --- a/plugins/auth-node/CHANGELOG.md +++ b/plugins/auth-node/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-node +## 0.2.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.13-next.1 ### Patch Changes diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json index ba5e912ebc..3c5003793b 100644 --- a/plugins/auth-node/package.json +++ b/plugins/auth-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-node", - "version": "0.2.13-next.1", + "version": "0.2.13-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops-backend/CHANGELOG.md b/plugins/azure-devops-backend/CHANGELOG.md index d5339767bd..5102c3c787 100644 --- a/plugins/azure-devops-backend/CHANGELOG.md +++ b/plugins/azure-devops-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-azure-devops-backend +## 0.3.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-devops-common@0.3.0 + ## 0.3.23-next.1 ### Patch Changes diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json index 8db640ba28..dadb20d3e7 100644 --- a/plugins/azure-devops-backend/package.json +++ b/plugins/azure-devops-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops-backend", - "version": "0.3.23-next.1", + "version": "0.3.23-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops/CHANGELOG.md b/plugins/azure-devops/CHANGELOG.md index e16dcf8ae8..6f5add94fa 100644 --- a/plugins/azure-devops/CHANGELOG.md +++ b/plugins/azure-devops/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-azure-devops +## 0.2.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-azure-devops-common@0.3.0 + ## 0.2.8-next.1 ### Patch Changes diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json index c01f24f4d7..fcd8a960f8 100644 --- a/plugins/azure-devops/package.json +++ b/plugins/azure-devops/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops", - "version": "0.2.8-next.1", + "version": "0.2.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-sites-backend/CHANGELOG.md b/plugins/azure-sites-backend/CHANGELOG.md index 65536ca7e1..38fe8f8478 100644 --- a/plugins/azure-sites-backend/CHANGELOG.md +++ b/plugins/azure-sites-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-azure-sites-backend +## 0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-sites-common@0.1.0 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/azure-sites-backend/package.json b/plugins/azure-sites-backend/package.json index dfe0d0072e..fbfd3b2426 100644 --- a/plugins/azure-sites-backend/package.json +++ b/plugins/azure-sites-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-sites-backend", - "version": "0.1.6-next.1", + "version": "0.1.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-sites/CHANGELOG.md b/plugins/azure-sites/CHANGELOG.md index 91518fc2d6..8fddf78af9 100644 --- a/plugins/azure-sites/CHANGELOG.md +++ b/plugins/azure-sites/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-azure-sites +## 0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-azure-sites-common@0.1.0 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/azure-sites/package.json b/plugins/azure-sites/package.json index d1ef1c04f1..050a854bab 100644 --- a/plugins/azure-sites/package.json +++ b/plugins/azure-sites/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-sites", - "version": "0.1.6-next.1", + "version": "0.1.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges-backend/CHANGELOG.md b/plugins/badges-backend/CHANGELOG.md index 7e85f16b61..ae567184a3 100644 --- a/plugins/badges-backend/CHANGELOG.md +++ b/plugins/badges-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-badges-backend +## 0.1.38-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.38-next.1 ### Patch Changes diff --git a/plugins/badges-backend/package.json b/plugins/badges-backend/package.json index af36d6d383..7db6655c28 100644 --- a/plugins/badges-backend/package.json +++ b/plugins/badges-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges-backend", "description": "A Backstage backend plugin that generates README badges for your entities", - "version": "0.1.38-next.1", + "version": "0.1.38-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md index 944e5d006b..d60a754399 100644 --- a/plugins/badges/CHANGELOG.md +++ b/plugins/badges/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-badges +## 0.2.41-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + ## 0.2.41-next.1 ### Patch Changes diff --git a/plugins/badges/package.json b/plugins/badges/package.json index feaa9e7199..f0ce91bbf0 100644 --- a/plugins/badges/package.json +++ b/plugins/badges/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges", "description": "A Backstage plugin that generates README badges for your entities", - "version": "0.2.41-next.1", + "version": "0.2.41-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar-backend/CHANGELOG.md b/plugins/bazaar-backend/CHANGELOG.md index 69dd407f58..d2fe3dd640 100644 --- a/plugins/bazaar-backend/CHANGELOG.md +++ b/plugins/bazaar-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-bazaar-backend +## 0.2.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.2 + ## 0.2.7-next.1 ### Patch Changes diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json index 9312cd1e88..3c417dc7aa 100644 --- a/plugins/bazaar-backend/package.json +++ b/plugins/bazaar-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar-backend", - "version": "0.2.7-next.1", + "version": "0.2.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar/CHANGELOG.md b/plugins/bazaar/CHANGELOG.md index 726ab99b0d..a272608a74 100644 --- a/plugins/bazaar/CHANGELOG.md +++ b/plugins/bazaar/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-bazaar +## 0.2.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.22.6-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-catalog@1.10.0-next.2 + ## 0.2.7-next.1 ### Patch Changes diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json index 0d0db8b1bd..34e969ecbe 100644 --- a/plugins/bazaar/package.json +++ b/plugins/bazaar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar", - "version": "0.2.7-next.1", + "version": "0.2.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md index 69cc1ebb14..5c6dcdccec 100644 --- a/plugins/bitrise/CHANGELOG.md +++ b/plugins/bitrise/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-bitrise +## 0.1.44-next.2 + +### Patch Changes + +- 55a969fe574: Bumped `recharts` dependency to `^2.5.0`. +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + ## 0.1.44-next.1 ### Patch Changes diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index d491d51969..b6c37d0cb8 100644 --- a/plugins/bitrise/package.json +++ b/plugins/bitrise/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitrise", "description": "A Backstage plugin that integrates towards Bitrise", - "version": "0.1.44-next.1", + "version": "0.1.44-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md index 7f90b3fd48..6058a58ff4 100644 --- a/plugins/catalog-backend-module-aws/CHANGELOG.md +++ b/plugins/catalog-backend-module-aws/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-catalog-backend-module-aws +## 0.1.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + - @backstage/plugin-kubernetes-common@0.6.2-next.1 + ## 0.1.18-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index 2cc7af7864..bb8226421c 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-aws", "description": "A Backstage catalog backend module that helps integrate towards AWS", - "version": "0.1.18-next.1", + "version": "0.1.18-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md index 84fa012561..bf9c7bc1d4 100644 --- a/plugins/catalog-backend-module-azure/CHANGELOG.md +++ b/plugins/catalog-backend-module-azure/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-catalog-backend-module-azure +## 0.1.15-next.2 + +### Patch Changes + +- 62a725e3a94: Use the `LocationSpec` type from the `catalog-common` package in place of the deprecated `LocationSpec` from the `catalog-node` package. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + ## 0.1.15-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index 292a4aa9da..a1ed6ef5aa 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-azure", "description": "A Backstage catalog backend module that helps integrate towards Azure", - "version": "0.1.15-next.1", + "version": "0.1.15-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md index 83ad89a421..f984b900c4 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-catalog-backend-module-bitbucket-cloud +## 0.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.4-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.5-next.0 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + - @backstage/plugin-events-node@0.2.5-next.2 + ## 0.1.11-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index 6c68e623bb..b234b5da4f 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/package.json +++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-cloud", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket Cloud", - "version": "0.1.11-next.1", + "version": "0.1.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md index 585d71de97..442ce64608 100644 --- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-bitbucket-server +## 0.1.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + ## 0.1.9-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index 26172a1a67..71be3ffa1a 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-server", - "version": "0.1.9-next.1", + "version": "0.1.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md index ad1095e516..22c721846d 100644 --- a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-bitbucket +## 0.2.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-bitbucket-cloud-common@0.2.5-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + ## 0.2.11-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json index 82ffe0e2b2..f00a8e0622 100644 --- a/plugins/catalog-backend-module-bitbucket/package.json +++ b/plugins/catalog-backend-module-bitbucket/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket", - "version": "0.2.11-next.1", + "version": "0.2.11-next.2", "deprecated": true, "main": "src/index.ts", "types": "src/index.ts", diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md index 64f6802299..94f73e33c6 100644 --- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md +++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-gerrit +## 0.1.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + ## 0.1.12-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index 1738e353f3..6dd5c9e094 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gerrit", - "version": "0.1.12-next.1", + "version": "0.1.12-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md index 25b20998a8..3703fd1d4f 100644 --- a/plugins/catalog-backend-module-github/CHANGELOG.md +++ b/plugins/catalog-backend-module-github/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-catalog-backend-module-github +## 0.2.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.1-next.2 + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + - @backstage/plugin-events-node@0.2.5-next.2 + ## 0.2.7-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index 75dfdad2df..b202086e77 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-github", "description": "A Backstage catalog backend module that helps integrate towards GitHub", - "version": "0.2.7-next.1", + "version": "0.2.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md index 22520d23f4..e2e09b0fa7 100644 --- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-catalog-backend-module-gitlab +## 0.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-node@1.3.5-next.2 + ## 0.2.0-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index c690cc4c58..2294745a0e 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-gitlab", "description": "A Backstage catalog backend module that helps integrate towards GitLab", - "version": "0.2.0-next.1", + "version": "0.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md index dc093645eb..478bc1f167 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md +++ b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-backend-module-incremental-ingestion +## 0.3.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.1-next.2 + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-node@1.3.5-next.2 + - @backstage/plugin-events-node@0.2.5-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + ## 0.3.1-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json index 61ad8f365d..f0a576cff4 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/package.json +++ b/plugins/catalog-backend-module-incremental-ingestion/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-incremental-ingestion", "description": "An entity provider for streaming large asset sources into the catalog", - "version": "0.3.1-next.1", + "version": "0.3.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md index 3f29bba1b9..d2484c8a38 100644 --- a/plugins/catalog-backend-module-ldap/CHANGELOG.md +++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-ldap +## 0.5.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + ## 0.5.11-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index ba8fa9935d..17d061498f 100644 --- a/plugins/catalog-backend-module-ldap/package.json +++ b/plugins/catalog-backend-module-ldap/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-ldap", "description": "A Backstage catalog backend module that helps integrate towards LDAP", - "version": "0.5.11-next.1", + "version": "0.5.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md index deadba915f..ca44edf735 100644 --- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md +++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-msgraph +## 0.5.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + ## 0.5.3-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index 5a781a7cae..28e3a82e8e 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-msgraph", "description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph", - "version": "0.5.3-next.1", + "version": "0.5.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md index e90fe8386a..484546af43 100644 --- a/plugins/catalog-backend-module-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-openapi +## 0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.1-next.2 + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + ## 0.1.10-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index b2120322f5..268d26ab4d 100644 --- a/plugins/catalog-backend-module-openapi/package.json +++ b/plugins/catalog-backend-module-openapi/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-openapi", "description": "A Backstage catalog backend module that helps with OpenAPI specifications", - "version": "0.1.10-next.1", + "version": "0.1.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md index df41ec8386..51352842f9 100644 --- a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md +++ b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-puppetdb +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-node@1.3.5-next.2 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json index e62bac1646..6e4ad500f3 100644 --- a/plugins/catalog-backend-module-puppetdb/package.json +++ b/plugins/catalog-backend-module-puppetdb/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-puppetdb", "description": "A Backstage catalog backend module that helps integrate towards PuppetDB", - "version": "0.1.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index 637e2ed103..d3f7622277 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-catalog-backend +## 1.8.1-next.2 + +### Patch Changes + +- 62a725e3a94: Use the `LocationSpec` type from the `catalog-common` package in place of the deprecated `LocationSpec` from the `catalog-node` package. +- c36b89f2af3: Fixed bug in the `DefaultCatalogProcessingEngine` where entities that contained multiple different types of relations for the same source entity would not properly trigger stitching for that source entity. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-scaffolder-common@1.2.7-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.0-next.1 + - @backstage/plugin-search-common@1.2.3-next.0 + ## 1.8.1-next.1 ### Patch Changes diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 3929491378..db9e1845fe 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend", "description": "The Backstage backend plugin that provides the Backstage catalog", - "version": "1.8.1-next.1", + "version": "1.8.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-customized/CHANGELOG.md b/plugins/catalog-customized/CHANGELOG.md index 3cc9dc53c6..509f90ec66 100644 --- a/plugins/catalog-customized/CHANGELOG.md +++ b/plugins/catalog-customized/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/plugin-catalog-customized +## 0.0.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/plugin-catalog@1.10.0-next.2 + ## 0.0.9-next.1 ### Patch Changes diff --git a/plugins/catalog-customized/package.json b/plugins/catalog-customized/package.json index 37cb2f2488..595bdcf737 100644 --- a/plugins/catalog-customized/package.json +++ b/plugins/catalog-customized/package.json @@ -1,7 +1,7 @@ { "name": "@internal/plugin-catalog-customized", "description": "The internal Backstage Customizable plugin for browsing the Backstage catalog", - "version": "0.0.9-next.1", + "version": "0.0.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md index c5c5ce4966..c55bb73225 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-graph +## 0.2.29-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + ## 0.2.29-next.1 ### Patch Changes diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index 1588bf1c61..49d157c0d3 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-graph", - "version": "0.2.29-next.1", + "version": "0.2.29-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index a9baac02b8..1ea63d5de6 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-import +## 0.9.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + ## 0.9.7-next.1 ### Patch Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index fc7599af40..9fc9198d0f 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-import", "description": "A Backstage plugin the helps you import entities into your catalog", - "version": "0.9.7-next.1", + "version": "0.9.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md index 7a84ad76fc..60912f8b1b 100644 --- a/plugins/catalog-node/CHANGELOG.md +++ b/plugins/catalog-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-node +## 1.3.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + ## 1.3.5-next.1 ### Patch Changes diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json index 46b1430d8b..eb1c151904 100644 --- a/plugins/catalog-node/package.json +++ b/plugins/catalog-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-node", "description": "The plugin-catalog-node module for @backstage/plugin-catalog-backend", - "version": "1.3.5-next.1", + "version": "1.3.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index 824bb6a30b..8ab5aa53ec 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-catalog-react +## 1.4.1-next.2 + +### Patch Changes + +- 81bee24c5de: Fixed bug in catalog filters where you could not click on the text to select a value. +- 2898b6c8d52: Minor type tweaks for TypeScript 5.0 +- Updated dependencies + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4-next.0 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-permission-react@0.4.12-next.1 + ## 1.4.1-next.1 ### Patch Changes diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index 39028f49bf..8aed25949f 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-react", "description": "A frontend library that helps other Backstage plugins interact with the catalog", - "version": "1.4.1-next.1", + "version": "1.4.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 335b19a415..c3e006f817 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-catalog +## 1.10.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-search-react@1.5.2-next.2 + ## 1.10.0-next.1 ### Patch Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 81cbe58f66..7e16e90c66 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog", "description": "The Backstage plugin for browsing the Backstage catalog", - "version": "1.10.0-next.1", + "version": "1.10.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md index f30e0a2fb2..6c70dddbc5 100644 --- a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md +++ b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-cicd-statistics-module-gitlab +## 0.1.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-cicd-statistics@0.1.19-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + ## 0.1.13-next.1 ### Patch Changes diff --git a/plugins/cicd-statistics-module-gitlab/package.json b/plugins/cicd-statistics-module-gitlab/package.json index c39b8c7ef9..9b32cab9ce 100644 --- a/plugins/cicd-statistics-module-gitlab/package.json +++ b/plugins/cicd-statistics-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics-module-gitlab", "description": "CI/CD Statistics plugin module; Gitlab CICD", - "version": "0.1.13-next.1", + "version": "0.1.13-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics/CHANGELOG.md b/plugins/cicd-statistics/CHANGELOG.md index 90d36fa01f..9f34b725c7 100644 --- a/plugins/cicd-statistics/CHANGELOG.md +++ b/plugins/cicd-statistics/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-cicd-statistics +## 0.1.19-next.2 + +### Patch Changes + +- 55a969fe574: Bumped `recharts` dependency to `^2.5.0`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + ## 0.1.19-next.1 ### Patch Changes diff --git a/plugins/cicd-statistics/package.json b/plugins/cicd-statistics/package.json index 0f2503304a..ef0ad6b742 100644 --- a/plugins/cicd-statistics/package.json +++ b/plugins/cicd-statistics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics", "description": "A frontend plugin visualizing CI/CD pipeline statistics (build time)", - "version": "0.1.19-next.1", + "version": "0.1.19-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md index 4819e06e00..10a03abeb8 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-circleci +## 0.3.17-next.2 + +### Patch Changes + +- d14ac997c36: Add hover over CircleCI avatar icon to show user name in builds table +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + ## 0.3.17-next.1 ### Patch Changes diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index e205aefc21..2af2455c7b 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-circleci", "description": "A Backstage plugin that integrates towards Circle CI", - "version": "0.3.17-next.1", + "version": "0.3.17-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index 6e4be27e90..f81013384f 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-cloudbuild +## 0.3.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + ## 0.3.17-next.1 ### Patch Changes diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index 8a4bdee93b..c9be4a66bc 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cloudbuild", "description": "A Backstage plugin that integrates towards Google Cloud Build", - "version": "0.3.17-next.1", + "version": "0.3.17-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-climate/CHANGELOG.md b/plugins/code-climate/CHANGELOG.md index 5ed516f6f5..74efa37203 100644 --- a/plugins/code-climate/CHANGELOG.md +++ b/plugins/code-climate/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-code-climate +## 0.1.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + ## 0.1.17-next.1 ### Patch Changes diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json index 2f834916f8..6c1bfa7d05 100644 --- a/plugins/code-climate/package.json +++ b/plugins/code-climate/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-code-climate", - "version": "0.1.17-next.1", + "version": "0.1.17-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage-backend/CHANGELOG.md b/plugins/code-coverage-backend/CHANGELOG.md index 32cf86e76f..0850bc86aa 100644 --- a/plugins/code-coverage-backend/CHANGELOG.md +++ b/plugins/code-coverage-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-code-coverage-backend +## 0.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + ## 0.2.10-next.1 ### Patch Changes diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json index 1b681e9f51..5d43e8901f 100644 --- a/plugins/code-coverage-backend/package.json +++ b/plugins/code-coverage-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage-backend", "description": "A Backstage backend plugin that helps you keep track of your code coverage", - "version": "0.2.10-next.1", + "version": "0.2.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage/CHANGELOG.md b/plugins/code-coverage/CHANGELOG.md index a8a6d7078f..cd4afbc753 100644 --- a/plugins/code-coverage/CHANGELOG.md +++ b/plugins/code-coverage/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-code-coverage +## 0.2.10-next.2 + +### Patch Changes + +- 55a969fe574: Bumped `recharts` dependency to `^2.5.0`. +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + ## 0.2.10-next.1 ### Patch Changes diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index 7b535be4bc..ed4901ab10 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage", "description": "A Backstage plugin that helps you keep track of your code coverage", - "version": "0.2.10-next.1", + "version": "0.2.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/codescene/CHANGELOG.md b/plugins/codescene/CHANGELOG.md index eb4fde25e6..7ef63f8d1a 100644 --- a/plugins/codescene/CHANGELOG.md +++ b/plugins/codescene/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-codescene +## 0.1.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + ## 0.1.12-next.1 ### Patch Changes diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index e07247370c..896eadd58e 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-codescene", - "version": "0.1.12-next.1", + "version": "0.1.12-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index 9a9aa1d7a8..e39a5a567a 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-config-schema +## 0.1.40-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + ## 0.1.40-next.1 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index 7f1bbca821..5fe740310b 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-config-schema", "description": "A Backstage plugin that lets you browse the configuration schema of your app", - "version": "0.1.40-next.1", + "version": "0.1.40-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md index 67f14ccbb2..17fccbe7cf 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-cost-insights +## 0.12.6-next.2 + +### Patch Changes + +- 55a969fe574: Bumped `recharts` dependency to `^2.5.0`. +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-cost-insights-common@0.1.1 + ## 0.12.6-next.1 ### Patch Changes diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index 6a552e8bd7..d9f94f1516 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cost-insights", "description": "A Backstage plugin that helps you keep track of your cloud spend", - "version": "0.12.6-next.1", + "version": "0.12.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/dynatrace/CHANGELOG.md b/plugins/dynatrace/CHANGELOG.md index a83c38bcdd..bea873c257 100644 --- a/plugins/dynatrace/CHANGELOG.md +++ b/plugins/dynatrace/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-dynatrace +## 3.0.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + ## 3.0.1-next.1 ### Patch Changes diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json index 799194ecb5..9a857f3948 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-dynatrace", - "version": "3.0.1-next.1", + "version": "3.0.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-feedback-backend/CHANGELOG.md b/plugins/entity-feedback-backend/CHANGELOG.md index 9641fed208..5c077b876c 100644 --- a/plugins/entity-feedback-backend/CHANGELOG.md +++ b/plugins/entity-feedback-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-entity-feedback-backend +## 0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-entity-feedback-common@0.1.1-next.0 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/entity-feedback-backend/package.json b/plugins/entity-feedback-backend/package.json index 715df95830..80be69dfd1 100644 --- a/plugins/entity-feedback-backend/package.json +++ b/plugins/entity-feedback-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-feedback-backend", - "version": "0.1.2-next.1", + "version": "0.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-feedback/CHANGELOG.md b/plugins/entity-feedback/CHANGELOG.md index 029b41995f..3981d2c91a 100644 --- a/plugins/entity-feedback/CHANGELOG.md +++ b/plugins/entity-feedback/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-entity-feedback +## 0.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-entity-feedback-common@0.1.1-next.0 + ## 0.2.0-next.1 ### Patch Changes diff --git a/plugins/entity-feedback/package.json b/plugins/entity-feedback/package.json index c636ecb242..a73deb7537 100644 --- a/plugins/entity-feedback/package.json +++ b/plugins/entity-feedback/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-feedback", - "version": "0.2.0-next.1", + "version": "0.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-validation/CHANGELOG.md b/plugins/entity-validation/CHANGELOG.md index 9cd86f5cd1..9a98243489 100644 --- a/plugins/entity-validation/CHANGELOG.md +++ b/plugins/entity-validation/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-entity-validation +## 0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-catalog-common@1.0.13-next.0 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/entity-validation/package.json b/plugins/entity-validation/package.json index 7e71945859..a0b232385d 100644 --- a/plugins/entity-validation/package.json +++ b/plugins/entity-validation/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-validation", - "version": "0.1.2-next.1", + "version": "0.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-aws-sqs/CHANGELOG.md b/plugins/events-backend-module-aws-sqs/CHANGELOG.md index 18a51394bc..1ce598cbad 100644 --- a/plugins/events-backend-module-aws-sqs/CHANGELOG.md +++ b/plugins/events-backend-module-aws-sqs/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-events-backend-module-aws-sqs +## 0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-events-node@0.2.5-next.2 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-aws-sqs/package.json b/plugins/events-backend-module-aws-sqs/package.json index 20b4ad8278..0210e7efb4 100644 --- a/plugins/events-backend-module-aws-sqs/package.json +++ b/plugins/events-backend-module-aws-sqs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-aws-sqs", - "version": "0.1.6-next.1", + "version": "0.1.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-azure/CHANGELOG.md b/plugins/events-backend-module-azure/CHANGELOG.md index a5e732f786..43f7910658 100644 --- a/plugins/events-backend-module-azure/CHANGELOG.md +++ b/plugins/events-backend-module-azure/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-azure +## 0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/plugin-events-node@0.2.5-next.2 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-azure/package.json b/plugins/events-backend-module-azure/package.json index 4694a1909e..fa2236cf55 100644 --- a/plugins/events-backend-module-azure/package.json +++ b/plugins/events-backend-module-azure/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-azure", - "version": "0.1.6-next.1", + "version": "0.1.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md index 2fad706971..c35aa7519c 100644 --- a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-bitbucket-cloud +## 0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/plugin-events-node@0.2.5-next.2 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-bitbucket-cloud/package.json b/plugins/events-backend-module-bitbucket-cloud/package.json index 2bcf5c6bd6..cac3d4bf57 100644 --- a/plugins/events-backend-module-bitbucket-cloud/package.json +++ b/plugins/events-backend-module-bitbucket-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-bitbucket-cloud", - "version": "0.1.6-next.1", + "version": "0.1.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-gerrit/CHANGELOG.md b/plugins/events-backend-module-gerrit/CHANGELOG.md index a7e28557f1..b71339f368 100644 --- a/plugins/events-backend-module-gerrit/CHANGELOG.md +++ b/plugins/events-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-gerrit +## 0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/plugin-events-node@0.2.5-next.2 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-gerrit/package.json b/plugins/events-backend-module-gerrit/package.json index 3bdbc799dc..a70a784676 100644 --- a/plugins/events-backend-module-gerrit/package.json +++ b/plugins/events-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gerrit", - "version": "0.1.6-next.1", + "version": "0.1.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-github/CHANGELOG.md b/plugins/events-backend-module-github/CHANGELOG.md index 3122ff7644..c048025dc9 100644 --- a/plugins/events-backend-module-github/CHANGELOG.md +++ b/plugins/events-backend-module-github/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-events-backend-module-github +## 0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.5-next.2 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-github/package.json b/plugins/events-backend-module-github/package.json index 4f24cb6b9d..8b0e35ccf3 100644 --- a/plugins/events-backend-module-github/package.json +++ b/plugins/events-backend-module-github/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-github", - "version": "0.1.6-next.1", + "version": "0.1.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-gitlab/CHANGELOG.md b/plugins/events-backend-module-gitlab/CHANGELOG.md index 1ebfe2c2ce..0bfec21ef9 100644 --- a/plugins/events-backend-module-gitlab/CHANGELOG.md +++ b/plugins/events-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-events-backend-module-gitlab +## 0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.5-next.2 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-gitlab/package.json b/plugins/events-backend-module-gitlab/package.json index aa9fc68f38..2e92c8595b 100644 --- a/plugins/events-backend-module-gitlab/package.json +++ b/plugins/events-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gitlab", - "version": "0.1.6-next.1", + "version": "0.1.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-test-utils/CHANGELOG.md b/plugins/events-backend-test-utils/CHANGELOG.md index ffb55a083e..cd78f21d2e 100644 --- a/plugins/events-backend-test-utils/CHANGELOG.md +++ b/plugins/events-backend-test-utils/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-events-backend-test-utils +## 0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.5-next.2 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/events-backend-test-utils/package.json b/plugins/events-backend-test-utils/package.json index 0577815b23..ca66ed256f 100644 --- a/plugins/events-backend-test-utils/package.json +++ b/plugins/events-backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-events-backend-test-utils", "description": "The plugin-events-backend-test-utils for @backstage/plugin-events-node", - "version": "0.1.6-next.1", + "version": "0.1.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend/CHANGELOG.md b/plugins/events-backend/CHANGELOG.md index 1d1c89d719..050bdd23ed 100644 --- a/plugins/events-backend/CHANGELOG.md +++ b/plugins/events-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-events-backend +## 0.2.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.5-next.2 + ## 0.2.5-next.1 ### Patch Changes diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index 4598e8fb20..2a32c7af52 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend", - "version": "0.2.5-next.1", + "version": "0.2.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-node/CHANGELOG.md b/plugins/events-node/CHANGELOG.md index 9978a84a0b..10ecc60b56 100644 --- a/plugins/events-node/CHANGELOG.md +++ b/plugins/events-node/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-events-node +## 0.2.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.2 + ## 0.2.5-next.1 ### Patch Changes diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json index 616176a46f..8cb4089ecc 100644 --- a/plugins/events-node/package.json +++ b/plugins/events-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-events-node", "description": "The plugin-events-node module for @backstage/plugin-events-backend", - "version": "0.2.5-next.1", + "version": "0.2.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md index a1bb518822..49db6f68dc 100644 --- a/plugins/example-todo-list-backend/CHANGELOG.md +++ b/plugins/example-todo-list-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @internal/plugin-todo-list-backend +## 1.0.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.2 + ## 1.0.12-next.1 ### Patch Changes diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 69e757eed0..bd8c08ca9e 100644 --- a/plugins/example-todo-list-backend/package.json +++ b/plugins/example-todo-list-backend/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-backend", - "version": "1.0.12-next.1", + "version": "1.0.12-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index 96b4f4f5a5..3fbed55471 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,14 @@ # @internal/plugin-todo-list +## 1.0.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/theme@0.2.19-next.0 + ## 1.0.12-next.1 ### Patch Changes diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index 1ee4c55707..c0ccb45f5a 100644 --- a/plugins/example-todo-list/package.json +++ b/plugins/example-todo-list/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list", - "version": "1.0.12-next.1", + "version": "1.0.12-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore-backend/CHANGELOG.md b/plugins/explore-backend/CHANGELOG.md index bf0de480b3..da59730432 100644 --- a/plugins/explore-backend/CHANGELOG.md +++ b/plugins/explore-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-explore-backend +## 0.0.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-backend-module-explore@0.1.0-next.1 + - @backstage/plugin-search-common@1.2.3-next.0 + ## 0.0.6-next.1 ### Patch Changes diff --git a/plugins/explore-backend/package.json b/plugins/explore-backend/package.json index e425c1d46f..9f28f024cd 100644 --- a/plugins/explore-backend/package.json +++ b/plugins/explore-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-explore-backend", - "version": "0.0.6-next.1", + "version": "0.0.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore-react/CHANGELOG.md b/plugins/explore-react/CHANGELOG.md index 0880725375..8ffc709466 100644 --- a/plugins/explore-react/CHANGELOG.md +++ b/plugins/explore-react/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-explore-react +## 0.0.28-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/plugin-explore-common@0.0.1 + ## 0.0.28-next.0 ### Patch Changes diff --git a/plugins/explore-react/package.json b/plugins/explore-react/package.json index 96f7b8d0c5..0808950a00 100644 --- a/plugins/explore-react/package.json +++ b/plugins/explore-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore-react", "description": "A frontend library for Backstage plugins that want to interact with the explore plugin", - "version": "0.0.28-next.0", + "version": "0.0.28-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md index 860a42752d..d58e16f49b 100644 --- a/plugins/explore/CHANGELOG.md +++ b/plugins/explore/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-explore +## 0.4.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-explore-react@0.0.28-next.1 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-search-react@1.5.2-next.2 + ## 0.4.2-next.1 ### Patch Changes diff --git a/plugins/explore/package.json b/plugins/explore/package.json index ecc2e6a26a..3b642e1098 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore", "description": "A Backstage plugin for building an exploration page of your software ecosystem", - "version": "0.4.2-next.1", + "version": "0.4.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/firehydrant/CHANGELOG.md b/plugins/firehydrant/CHANGELOG.md index 3ef1962aa5..1722a03fd1 100644 --- a/plugins/firehydrant/CHANGELOG.md +++ b/plugins/firehydrant/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-firehydrant +## 0.2.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + ## 0.2.1-next.1 ### Patch Changes diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json index 8f101e1714..6974111940 100644 --- a/plugins/firehydrant/package.json +++ b/plugins/firehydrant/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-firehydrant", "description": "A Backstage plugin that integrates towards FireHydrant", - "version": "0.2.1-next.1", + "version": "0.2.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/fossa/CHANGELOG.md b/plugins/fossa/CHANGELOG.md index bef45dc38d..36fad5fbc4 100644 --- a/plugins/fossa/CHANGELOG.md +++ b/plugins/fossa/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-fossa +## 0.2.49-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + ## 0.2.49-next.1 ### Patch Changes diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index 2a73c2b5fe..3219c4529f 100644 --- a/plugins/fossa/package.json +++ b/plugins/fossa/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-fossa", "description": "A Backstage plugin that integrates towards FOSSA", - "version": "0.2.49-next.1", + "version": "0.2.49-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcalendar/CHANGELOG.md b/plugins/gcalendar/CHANGELOG.md index a5f62ebb36..d485153d78 100644 --- a/plugins/gcalendar/CHANGELOG.md +++ b/plugins/gcalendar/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-gcalendar +## 0.3.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + ## 0.3.13-next.1 ### Patch Changes diff --git a/plugins/gcalendar/package.json b/plugins/gcalendar/package.json index 05068811f4..e8b4d88d98 100644 --- a/plugins/gcalendar/package.json +++ b/plugins/gcalendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-gcalendar", - "version": "0.3.13-next.1", + "version": "0.3.13-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcp-projects/CHANGELOG.md b/plugins/gcp-projects/CHANGELOG.md index da05668e49..1b5f508807 100644 --- a/plugins/gcp-projects/CHANGELOG.md +++ b/plugins/gcp-projects/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-gcp-projects +## 0.3.36-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/theme@0.2.19-next.0 + ## 0.3.36-next.1 ### Patch Changes diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index 664223f889..e280507184 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gcp-projects", "description": "A Backstage plugin that helps you manage projects in GCP", - "version": "0.3.36-next.1", + "version": "0.3.36-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/git-release-manager/CHANGELOG.md b/plugins/git-release-manager/CHANGELOG.md index f40a99c48b..92f33e1d01 100644 --- a/plugins/git-release-manager/CHANGELOG.md +++ b/plugins/git-release-manager/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-git-release-manager +## 0.3.30-next.2 + +### Patch Changes + +- 55a969fe574: Bumped `recharts` dependency to `^2.5.0`. +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/integration@1.4.4-next.0 + - @backstage/theme@0.2.19-next.0 + ## 0.3.30-next.1 ### Patch Changes diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index 7f3da60f83..ea49ff9d3d 100644 --- a/plugins/git-release-manager/package.json +++ b/plugins/git-release-manager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-git-release-manager", "description": "A Backstage plugin that helps you manage releases in git", - "version": "0.3.30-next.1", + "version": "0.3.30-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md index 69bf5c3bf8..d689403ea7 100644 --- a/plugins/github-actions/CHANGELOG.md +++ b/plugins/github-actions/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-github-actions +## 0.5.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.4-next.0 + - @backstage/theme@0.2.19-next.0 + ## 0.5.17-next.1 ### Patch Changes diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index 5b5138ff8f..9d7f52e44f 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-actions", "description": "A Backstage plugin that integrates towards GitHub Actions", - "version": "0.5.17-next.1", + "version": "0.5.17-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md index 52a77bb304..3563977d19 100644 --- a/plugins/github-deployments/CHANGELOG.md +++ b/plugins/github-deployments/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-github-deployments +## 0.1.48-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/theme@0.2.19-next.0 + ## 0.1.48-next.1 ### Patch Changes diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index fc1f7ef0e1..5fb7e85db8 100644 --- a/plugins/github-deployments/package.json +++ b/plugins/github-deployments/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-deployments", "description": "A Backstage plugin that integrates towards GitHub Deployments", - "version": "0.1.48-next.1", + "version": "0.1.48-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-issues/CHANGELOG.md b/plugins/github-issues/CHANGELOG.md index 393b8c25ab..76f6e33fc9 100644 --- a/plugins/github-issues/CHANGELOG.md +++ b/plugins/github-issues/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-github-issues +## 0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/theme@0.2.19-next.0 + ## 0.2.6-next.1 ### Patch Changes diff --git a/plugins/github-issues/package.json b/plugins/github-issues/package.json index fba982ee8a..f3a7eb3306 100644 --- a/plugins/github-issues/package.json +++ b/plugins/github-issues/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-github-issues", - "version": "0.2.6-next.1", + "version": "0.2.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-pull-requests-board/CHANGELOG.md b/plugins/github-pull-requests-board/CHANGELOG.md index 2b663022e7..c79991926d 100644 --- a/plugins/github-pull-requests-board/CHANGELOG.md +++ b/plugins/github-pull-requests-board/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-github-pull-requests-board +## 0.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/integration@1.4.4-next.0 + - @backstage/theme@0.2.19-next.0 + ## 0.1.11-next.1 ### Patch Changes diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index 33a64284dd..3dbf7c60fb 100644 --- a/plugins/github-pull-requests-board/package.json +++ b/plugins/github-pull-requests-board/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-pull-requests-board", "description": "A Backstage plugin that allows you to see all open Pull Requests for all the repositories owned by your team", - "version": "0.1.11-next.1", + "version": "0.1.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gitops-profiles/CHANGELOG.md b/plugins/gitops-profiles/CHANGELOG.md index 2073bfce85..1efec0e36d 100644 --- a/plugins/gitops-profiles/CHANGELOG.md +++ b/plugins/gitops-profiles/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-gitops-profiles +## 0.3.35-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19-next.0 + ## 0.3.35-next.1 ### Patch Changes diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index b2ae200d75..749f963215 100644 --- a/plugins/gitops-profiles/package.json +++ b/plugins/gitops-profiles/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gitops-profiles", "description": "A Backstage plugin that helps you manage GitOps profiles", - "version": "0.3.35-next.1", + "version": "0.3.35-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gocd/CHANGELOG.md b/plugins/gocd/CHANGELOG.md index ddff5b627b..87559fc8b4 100644 --- a/plugins/gocd/CHANGELOG.md +++ b/plugins/gocd/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-gocd +## 0.1.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + ## 0.1.23-next.1 ### Patch Changes diff --git a/plugins/gocd/package.json b/plugins/gocd/package.json index 006d364697..b543111f2c 100644 --- a/plugins/gocd/package.json +++ b/plugins/gocd/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gocd", "description": "A Backstage plugin that integrates towards GoCD", - "version": "0.1.23-next.1", + "version": "0.1.23-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/graphiql/CHANGELOG.md b/plugins/graphiql/CHANGELOG.md index e487e394d5..2edf5d59b2 100644 --- a/plugins/graphiql/CHANGELOG.md +++ b/plugins/graphiql/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-graphiql +## 0.2.49-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/theme@0.2.19-next.0 + ## 0.2.49-next.1 ### Patch Changes diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index c90afdb3ca..b0c010ff9e 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.49-next.1", + "version": "0.2.49-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/graphql-backend/CHANGELOG.md b/plugins/graphql-backend/CHANGELOG.md index 9d0491b79a..8d54ca767e 100644 --- a/plugins/graphql-backend/CHANGELOG.md +++ b/plugins/graphql-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-graphql-backend +## 0.1.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-graphql@0.3.20-next.1 + ## 0.1.34-next.1 ### Patch Changes diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json index ccf0799f6a..e9a2d2458f 100644 --- a/plugins/graphql-backend/package.json +++ b/plugins/graphql-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphql-backend", "description": "An experimental Backstage backend plugin for GraphQL", - "version": "0.1.34-next.1", + "version": "0.1.34-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/graphql-voyager/CHANGELOG.md b/plugins/graphql-voyager/CHANGELOG.md index c8aef4d31f..168bc00df2 100644 --- a/plugins/graphql-voyager/CHANGELOG.md +++ b/plugins/graphql-voyager/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-graphql-voyager +## 0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/theme@0.2.19-next.0 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/graphql-voyager/package.json b/plugins/graphql-voyager/package.json index 6524dbb3ec..a8843d3b99 100644 --- a/plugins/graphql-voyager/package.json +++ b/plugins/graphql-voyager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphql-voyager", "description": "Backstage plugin for GraphQL Voyager", - "version": "0.1.2-next.1", + "version": "0.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md index 425cf97609..04f5f1a0b8 100644 --- a/plugins/home/CHANGELOG.md +++ b/plugins/home/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-home +## 0.4.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19-next.0 + ## 0.4.33-next.1 ### Patch Changes diff --git a/plugins/home/package.json b/plugins/home/package.json index 1daaccb28e..4610df4d40 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-home", "description": "A Backstage plugin that helps you build a home page", - "version": "0.4.33-next.1", + "version": "0.4.33-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/ilert/CHANGELOG.md b/plugins/ilert/CHANGELOG.md index 77d12474ea..02f77b394a 100644 --- a/plugins/ilert/CHANGELOG.md +++ b/plugins/ilert/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-ilert +## 0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + ## 0.2.6-next.1 ### Patch Changes diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index 486410fbf0..4e413d6c82 100644 --- a/plugins/ilert/package.json +++ b/plugins/ilert/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-ilert", "description": "A Backstage plugin that integrates towards iLert", - "version": "0.2.6-next.1", + "version": "0.2.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins-backend/CHANGELOG.md b/plugins/jenkins-backend/CHANGELOG.md index 7d34f4d73b..210bf9c6a1 100644 --- a/plugins/jenkins-backend/CHANGELOG.md +++ b/plugins/jenkins-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-jenkins-backend +## 0.1.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-jenkins-common@0.1.15-next.0 + - @backstage/plugin-permission-common@0.7.5-next.0 + ## 0.1.34-next.1 ### Patch Changes diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index 4063634193..f92ef37f66 100644 --- a/plugins/jenkins-backend/package.json +++ b/plugins/jenkins-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins-backend", "description": "A Backstage backend plugin that integrates towards Jenkins", - "version": "0.1.34-next.1", + "version": "0.1.34-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md index a7a2176e5a..9f135f0ce5 100644 --- a/plugins/jenkins/CHANGELOG.md +++ b/plugins/jenkins/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-jenkins +## 0.7.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-jenkins-common@0.1.15-next.0 + ## 0.7.16-next.1 ### Patch Changes diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index 9721f471b5..1452a1067e 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins", "description": "A Backstage plugin that integrates towards Jenkins", - "version": "0.7.16-next.1", + "version": "0.7.16-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka-backend/CHANGELOG.md b/plugins/kafka-backend/CHANGELOG.md index d4ec7156e7..e23db68e83 100644 --- a/plugins/kafka-backend/CHANGELOG.md +++ b/plugins/kafka-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-kafka-backend +## 0.2.37-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.37-next.1 ### Patch Changes diff --git a/plugins/kafka-backend/package.json b/plugins/kafka-backend/package.json index 99f5e5c06a..b54bf490f8 100644 --- a/plugins/kafka-backend/package.json +++ b/plugins/kafka-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka-backend", "description": "A Backstage backend plugin that integrates towards Kafka", - "version": "0.2.37-next.1", + "version": "0.2.37-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka/CHANGELOG.md b/plugins/kafka/CHANGELOG.md index 5d9b8cbe1b..3bbd50a54e 100644 --- a/plugins/kafka/CHANGELOG.md +++ b/plugins/kafka/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-kafka +## 0.3.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19-next.0 + ## 0.3.17-next.1 ### Patch Changes diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index a7607be706..c117f488d4 100644 --- a/plugins/kafka/package.json +++ b/plugins/kafka/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka", "description": "A Backstage plugin that integrates towards Kafka", - "version": "0.3.17-next.1", + "version": "0.3.17-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index cd3900ec36..a5dc29a247 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-kubernetes-backend +## 0.10.0-next.2 + +### Minor Changes + +- e6c7c850129: Plugins that instantiate the `KubernetesProxy` must now provide a parameter of the type `KubernetesProxyOptions` which includes providing a `KubernetesAuthTranslator`. The `KubernetesBuilder` now builds its own `KubernetesAuthTranslatorMap` that it provides to the `KubernetesProxy`. The `DispatchingKubernetesAuthTranslator` expects a `KubernetesTranslatorMap` to be provided as a parameter. The `KubernetesBuilder` now has a method called `setAuthTranslatorMap` which allows integrators to bring their own `KubernetesAuthTranslator's` to the `KubernetesPlugin`. + +### Patch Changes + +- 76e8f08fa24: fix localKubectlProxy auth provider fetching +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-catalog-node@1.3.5-next.2 + - @backstage/plugin-kubernetes-common@0.6.2-next.1 + - @backstage/plugin-permission-common@0.7.5-next.0 + ## 0.10.0-next.1 ### Minor Changes diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 791273af7d..892f81a42a 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-backend", "description": "A Backstage backend plugin that integrates towards Kubernetes", - "version": "0.10.0-next.1", + "version": "0.10.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index a1271e0d23..fbecb8ee2e 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-kubernetes +## 0.7.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-kubernetes-common@0.6.2-next.1 + ## 0.7.10-next.1 ### Patch Changes diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index ae39da0598..7b3b3d7b25 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes", "description": "A Backstage plugin that integrates towards Kubernetes", - "version": "0.7.10-next.1", + "version": "0.7.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/lighthouse-backend/CHANGELOG.md b/plugins/lighthouse-backend/CHANGELOG.md index 36cd9f849b..6dd9f1e1f3 100644 --- a/plugins/lighthouse-backend/CHANGELOG.md +++ b/plugins/lighthouse-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-lighthouse-backend +## 0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-lighthouse-common@0.1.1 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/lighthouse-backend/package.json b/plugins/lighthouse-backend/package.json index 8f8d6ba3d0..d46ffa506a 100644 --- a/plugins/lighthouse-backend/package.json +++ b/plugins/lighthouse-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse-backend", "description": "Backend functionalities for lighthouse", - "version": "0.1.2-next.1", + "version": "0.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/lighthouse/CHANGELOG.md b/plugins/lighthouse/CHANGELOG.md index dd360eaed6..2031e811b3 100644 --- a/plugins/lighthouse/CHANGELOG.md +++ b/plugins/lighthouse/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-lighthouse +## 0.4.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-lighthouse-common@0.1.1 + ## 0.4.2-next.1 ### Patch Changes diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index 8447d09fa3..0765634940 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse", "description": "A Backstage plugin that integrates towards Lighthouse", - "version": "0.4.2-next.1", + "version": "0.4.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/linguist-backend/CHANGELOG.md b/plugins/linguist-backend/CHANGELOG.md index eb5126e41e..1a520139cd 100644 --- a/plugins/linguist-backend/CHANGELOG.md +++ b/plugins/linguist-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-linguist-backend +## 0.2.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-linguist-common@0.1.0 + ## 0.2.1-next.1 ### Patch Changes diff --git a/plugins/linguist-backend/package.json b/plugins/linguist-backend/package.json index fad77875f2..2456be9608 100644 --- a/plugins/linguist-backend/package.json +++ b/plugins/linguist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist-backend", - "version": "0.2.1-next.1", + "version": "0.2.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/linguist/CHANGELOG.md b/plugins/linguist/CHANGELOG.md index 80a139fe11..d39be5a604 100644 --- a/plugins/linguist/CHANGELOG.md +++ b/plugins/linguist/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-linguist +## 0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-linguist-common@0.1.0 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/linguist/package.json b/plugins/linguist/package.json index cf36485ae8..6ca88bffd1 100644 --- a/plugins/linguist/package.json +++ b/plugins/linguist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist", - "version": "0.1.2-next.1", + "version": "0.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/microsoft-calendar/CHANGELOG.md b/plugins/microsoft-calendar/CHANGELOG.md index 8a2d3b894f..983542af09 100644 --- a/plugins/microsoft-calendar/CHANGELOG.md +++ b/plugins/microsoft-calendar/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-microsoft-calendar +## 0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/microsoft-calendar/package.json b/plugins/microsoft-calendar/package.json index a80135c82e..898dc383dc 100644 --- a/plugins/microsoft-calendar/package.json +++ b/plugins/microsoft-calendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-microsoft-calendar", - "version": "0.1.2-next.1", + "version": "0.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic-dashboard/CHANGELOG.md b/plugins/newrelic-dashboard/CHANGELOG.md index f15716e74d..482e78baab 100644 --- a/plugins/newrelic-dashboard/CHANGELOG.md +++ b/plugins/newrelic-dashboard/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-newrelic-dashboard +## 0.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + ## 0.2.10-next.1 ### Patch Changes diff --git a/plugins/newrelic-dashboard/package.json b/plugins/newrelic-dashboard/package.json index 2771719ec4..e00bba36f2 100644 --- a/plugins/newrelic-dashboard/package.json +++ b/plugins/newrelic-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-newrelic-dashboard", - "version": "0.2.10-next.1", + "version": "0.2.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md index 2dedb044cb..6542ab6d5f 100644 --- a/plugins/newrelic/CHANGELOG.md +++ b/plugins/newrelic/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-newrelic +## 0.3.35-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/theme@0.2.19-next.0 + ## 0.3.35-next.1 ### Patch Changes diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index 498a3e5d17..b3f8986757 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-newrelic", "description": "A Backstage plugin that integrates towards New Relic", - "version": "0.3.35-next.1", + "version": "0.3.35-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/octopus-deploy/CHANGELOG.md b/plugins/octopus-deploy/CHANGELOG.md index c247e33fd2..db1bb22834 100644 --- a/plugins/octopus-deploy/CHANGELOG.md +++ b/plugins/octopus-deploy/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-octopus-deploy +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/octopus-deploy/package.json b/plugins/octopus-deploy/package.json index b4ae8d397d..f1f01c1f3e 100644 --- a/plugins/octopus-deploy/package.json +++ b/plugins/octopus-deploy/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-octopus-deploy", - "version": "0.1.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/org-react/CHANGELOG.md b/plugins/org-react/CHANGELOG.md index 2a8dcc26e5..87ec76c66b 100644 --- a/plugins/org-react/CHANGELOG.md +++ b/plugins/org-react/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-org-react +## 0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/org-react/package.json b/plugins/org-react/package.json index f778a1195b..631286f575 100644 --- a/plugins/org-react/package.json +++ b/plugins/org-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-org-react", - "version": "0.1.6-next.1", + "version": "0.1.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index 95115dbcf2..a3518388d6 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-org +## 0.6.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + ## 0.6.7-next.1 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index a432e25edf..7627b3955d 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-org", "description": "A Backstage plugin that helps you create entity pages for your organization", - "version": "0.6.7-next.1", + "version": "0.6.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md index 10183ec985..bc956de572 100644 --- a/plugins/pagerduty/CHANGELOG.md +++ b/plugins/pagerduty/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-pagerduty +## 0.5.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + ## 0.5.10-next.1 ### Patch Changes diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index 159ad4953e..44cc77a7c1 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-pagerduty", "description": "A Backstage plugin that integrates towards PagerDuty", - "version": "0.5.10-next.1", + "version": "0.5.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop-backend/CHANGELOG.md b/plugins/periskop-backend/CHANGELOG.md index 7030940a58..260f57eb6a 100644 --- a/plugins/periskop-backend/CHANGELOG.md +++ b/plugins/periskop-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-periskop-backend +## 0.1.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + ## 0.1.15-next.1 ### Patch Changes diff --git a/plugins/periskop-backend/package.json b/plugins/periskop-backend/package.json index 7a3e481a02..83e97b0234 100644 --- a/plugins/periskop-backend/package.json +++ b/plugins/periskop-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop-backend", - "version": "0.1.15-next.1", + "version": "0.1.15-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop/CHANGELOG.md b/plugins/periskop/CHANGELOG.md index c4970c12ab..ab8028538f 100644 --- a/plugins/periskop/CHANGELOG.md +++ b/plugins/periskop/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-periskop +## 0.1.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + ## 0.1.15-next.1 ### Patch Changes diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json index d745bd7d24..38300e4b21 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop", - "version": "0.1.15-next.1", + "version": "0.1.15-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md index 46ed93642b..3e65f628a5 100644 --- a/plugins/permission-backend/CHANGELOG.md +++ b/plugins/permission-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-permission-backend +## 0.5.19-next.2 + +### Patch Changes + +- 84946a580c4: Introduced alpha export of the `permissionPlugin` for use in the new backend system, along with a `permissionModuleAllowAllPolicy` that can be used to allow all requests. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + ## 0.5.19-next.1 ### Patch Changes diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index 0d2c0a840e..23394e4aa4 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-backend", - "version": "0.5.19-next.1", + "version": "0.5.19-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md index d34e860efc..654283d4e7 100644 --- a/plugins/permission-node/CHANGELOG.md +++ b/plugins/permission-node/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-permission-node +## 0.7.7-next.2 + +### Patch Changes + +- 788f0f5a152: Introduced alpha export of the `policyExtensionPoint` for use in the new backend system. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + ## 0.7.7-next.1 ### Patch Changes diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index 308bd05ee2..d7170c86a9 100644 --- a/plugins/permission-node/package.json +++ b/plugins/permission-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-node", "description": "Common permission and authorization utilities for backend plugins", - "version": "0.7.7-next.1", + "version": "0.7.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-react/CHANGELOG.md b/plugins/permission-react/CHANGELOG.md index c23f9e0a73..8edff27f2b 100644 --- a/plugins/permission-react/CHANGELOG.md +++ b/plugins/permission-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-permission-react +## 0.4.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-permission-common@0.7.5-next.0 + ## 0.4.12-next.0 ### Patch Changes diff --git a/plugins/permission-react/package.json b/plugins/permission-react/package.json index 31f475e388..3a8cf8950a 100644 --- a/plugins/permission-react/package.json +++ b/plugins/permission-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-react", - "version": "0.4.12-next.0", + "version": "0.4.12-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist-backend/CHANGELOG.md b/plugins/playlist-backend/CHANGELOG.md index 38e4a26ca8..8172d8b132 100644 --- a/plugins/playlist-backend/CHANGELOG.md +++ b/plugins/playlist-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-playlist-backend +## 0.2.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-playlist-common@0.1.6-next.0 + ## 0.2.7-next.1 ### Patch Changes diff --git a/plugins/playlist-backend/package.json b/plugins/playlist-backend/package.json index 8ccc0b2199..7aee62b158 100644 --- a/plugins/playlist-backend/package.json +++ b/plugins/playlist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist-backend", - "version": "0.2.7-next.1", + "version": "0.2.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist/CHANGELOG.md b/plugins/playlist/CHANGELOG.md index ac791d37e6..a4230877b3 100644 --- a/plugins/playlist/CHANGELOG.md +++ b/plugins/playlist/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-playlist +## 0.1.8-next.2 + +### Patch Changes + +- 1b3c0546047: Added config properties to change dynamically the group noun for all the components in the UI +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-permission-react@0.4.12-next.1 + - @backstage/plugin-playlist-common@0.1.6-next.0 + - @backstage/plugin-search-react@1.5.2-next.2 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/playlist/package.json b/plugins/playlist/package.json index a962e82290..dafdde48d5 100644 --- a/plugins/playlist/package.json +++ b/plugins/playlist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist", - "version": "0.1.8-next.1", + "version": "0.1.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md index 2d165e6ea0..fabcaf7be7 100644 --- a/plugins/proxy-backend/CHANGELOG.md +++ b/plugins/proxy-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-proxy-backend +## 0.2.38-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + ## 0.2.38-next.1 ### Patch Changes diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index b96d71583c..a2378efce4 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-proxy-backend", "description": "A Backstage backend plugin that helps you set up proxy endpoints in the backend", - "version": "0.2.38-next.1", + "version": "0.2.38-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar-backend/CHANGELOG.md b/plugins/rollbar-backend/CHANGELOG.md index 38d24cc574..896d1c6116 100644 --- a/plugins/rollbar-backend/CHANGELOG.md +++ b/plugins/rollbar-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-rollbar-backend +## 0.1.41-next.2 + +### Patch Changes + +- 66b6cfc5716: Replace `camelcase-keys` dependency with one with better compatibility. +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + ## 0.1.41-next.1 ### Patch Changes diff --git a/plugins/rollbar-backend/package.json b/plugins/rollbar-backend/package.json index 4ba138d6ca..e400d33ba9 100644 --- a/plugins/rollbar-backend/package.json +++ b/plugins/rollbar-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar-backend", "description": "A Backstage backend plugin that integrates towards Rollbar", - "version": "0.1.41-next.1", + "version": "0.1.41-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md index 4ba47698cd..2439b71ef1 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-rollbar +## 0.4.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + ## 0.4.17-next.1 ### Patch Changes diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index b2c3159fec..f34ba7061d 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar", "description": "A Backstage plugin that integrates towards Rollbar", - "version": "0.4.17-next.1", + "version": "0.4.17-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md index 84d7f00322..3773e85e3e 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-scaffolder-backend-module-confluence-to-markdown +## 0.1.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/plugin-scaffolder-node@0.1.2-next.2 + - @backstage/plugin-scaffolder-backend@1.13.0-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + ## 0.1.0-next.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json index 81357b3158..410bdff252 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown", "description": "The confluence-to-markdown module for @backstage/plugin-scaffolder-backend", - "version": "0.1.0-next.0", + "version": "0.1.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md index 53fce1f10b..004e416337 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-scaffolder-backend-module-cookiecutter +## 0.2.19-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/plugin-scaffolder-node@0.1.2-next.2 + - @backstage/plugin-scaffolder-backend@1.13.0-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + ## 0.2.19-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index 543e0b1f7a..3e24f6664d 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/package.json +++ b/plugins/scaffolder-backend-module-cookiecutter/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-cookiecutter", "description": "A module for the scaffolder backend that lets you template projects using cookiecutter", - "version": "0.2.19-next.1", + "version": "0.2.19-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md index a063b46465..b7da2bcc08 100644 --- a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-scaffolder-backend-module-gitlab +## 0.1.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.2-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + ## 0.1.0-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index 632ff0c4f6..7b8f42bd17 100644 --- a/plugins/scaffolder-backend-module-gitlab/package.json +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-gitlab", - "version": "0.1.0-next.1", + "version": "0.1.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md index 2e12f048ef..ca8475d2ea 100644 --- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-scaffolder-backend-module-rails +## 0.4.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/plugin-scaffolder-node@0.1.2-next.2 + - @backstage/plugin-scaffolder-backend@1.13.0-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + ## 0.4.12-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index b47a7535e4..caf63204da 100644 --- a/plugins/scaffolder-backend-module-rails/package.json +++ b/plugins/scaffolder-backend-module-rails/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-rails", "description": "A module for the scaffolder backend that lets you template projects using Rails", - "version": "0.4.12-next.1", + "version": "0.4.12-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md index 7e253a7064..768e114acb 100644 --- a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-backend-module-sentry +## 0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.2-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.4-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json index b57806f136..9a5d749bdc 100644 --- a/plugins/scaffolder-backend-module-sentry/package.json +++ b/plugins/scaffolder-backend-module-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-sentry", - "version": "0.1.4-next.1", + "version": "0.1.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md index 5fb4a87f10..871c345d38 100644 --- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-backend-module-yeoman +## 0.2.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.2-next.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.2.17-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index 6cca671d4d..91f1c9b848 100644 --- a/plugins/scaffolder-backend-module-yeoman/package.json +++ b/plugins/scaffolder-backend-module-yeoman/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-yeoman", - "version": "0.2.17-next.1", + "version": "0.2.17-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index ae69fd3548..4b8ba1359d 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-scaffolder-backend +## 1.13.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.8.1-next.2 + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/plugin-scaffolder-node@0.1.2-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-scaffolder-common@1.2.7-next.1 + ## 1.13.0-next.1 ### Minor Changes diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 97d4577d23..a2669ec164 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend", "description": "The Backstage backend plugin that helps you create new things", - "version": "1.13.0-next.1", + "version": "1.13.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-node/CHANGELOG.md b/plugins/scaffolder-node/CHANGELOG.md index d834e519ac..17ab2a73ce 100644 --- a/plugins/scaffolder-node/CHANGELOG.md +++ b/plugins/scaffolder-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-node +## 0.1.2-next.2 + +### Patch Changes + +- 2898b6c8d52: Minor type tweaks for TypeScript 5.0 +- Updated dependencies + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-common@1.2.7-next.1 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json index 3f19ce8ae0..5098a33788 100644 --- a/plugins/scaffolder-node/package.json +++ b/plugins/scaffolder-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-node", "description": "The plugin-scaffolder-node module for @backstage/plugin-scaffolder-backend", - "version": "0.1.2-next.1", + "version": "0.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-react/CHANGELOG.md b/plugins/scaffolder-react/CHANGELOG.md index dd409c38d2..b6c3b48440 100644 --- a/plugins/scaffolder-react/CHANGELOG.md +++ b/plugins/scaffolder-react/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-scaffolder-react +## 1.3.0-next.2 + +### Patch Changes + +- 90dda42cfd2: bug: Invert `templateFilter` predicate to align with `Array.filter` +- 34dab7ee7f8: `scaffolder/next`: bump `rjsf` dependencies to `5.5.0` +- 2898b6c8d52: Minor type tweaks for TypeScript 5.0 +- Updated dependencies + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4-next.0 + - @backstage/plugin-scaffolder-common@1.2.7-next.1 + ## 1.3.0-next.1 ### Patch Changes diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index 50a060985c..f4c5234454 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-react", "description": "A frontend library that helps other Backstage plugins interact with the Scaffolder", - "version": "1.3.0-next.1", + "version": "1.3.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index be5ec0e59c..c9f5adf94a 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-scaffolder +## 1.13.0-next.2 + +### Minor Changes + +- cf18c32934a: The Installed Actions page now shows details for nested objects and arrays + +### Patch Changes + +- 90dda42cfd2: bug: Invert `templateFilter` predicate to align with `Array.filter` +- 34dab7ee7f8: `scaffolder/next`: bump `rjsf` dependencies to `5.5.0` +- Updated dependencies + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/plugin-scaffolder-react@1.3.0-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-permission-react@0.4.12-next.1 + - @backstage/plugin-scaffolder-common@1.2.7-next.1 + ## 1.13.0-next.1 ### Patch Changes diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 0e0ffdafda..b2e38afcb2 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder", "description": "The Backstage plugin that helps you create new things", - "version": "1.13.0-next.1", + "version": "1.13.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-catalog/CHANGELOG.md b/plugins/search-backend-module-catalog/CHANGELOG.md index 04b775ccca..1d806026e3 100644 --- a/plugins/search-backend-module-catalog/CHANGELOG.md +++ b/plugins/search-backend-module-catalog/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-search-backend-module-catalog +## 0.1.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-search-backend-node@1.2.0-next.2 + - @backstage/plugin-search-common@1.2.3-next.0 + ## 0.1.0-next.0 ### Minor Changes diff --git a/plugins/search-backend-module-catalog/package.json b/plugins/search-backend-module-catalog/package.json index c73c416441..56f09a03f5 100644 --- a/plugins/search-backend-module-catalog/package.json +++ b/plugins/search-backend-module-catalog/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-catalog", "description": "A module for the search backend that exports catalog modules", - "version": "0.1.0-next.0", + "version": "0.1.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md index 9d0ff6e853..b501b4aee7 100644 --- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md +++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-search-backend-module-elasticsearch +## 1.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-search-backend-node@1.2.0-next.2 + - @backstage/plugin-search-common@1.2.3-next.0 + ## 1.2.0-next.1 ### Minor Changes diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index f7338303d3..0400f0b407 100644 --- a/plugins/search-backend-module-elasticsearch/package.json +++ b/plugins/search-backend-module-elasticsearch/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-elasticsearch", "description": "A module for the search backend that implements search using ElasticSearch", - "version": "1.2.0-next.1", + "version": "1.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-explore/CHANGELOG.md b/plugins/search-backend-module-explore/CHANGELOG.md index aa13a15c75..f1c8c79c3c 100644 --- a/plugins/search-backend-module-explore/CHANGELOG.md +++ b/plugins/search-backend-module-explore/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-search-backend-module-explore +## 0.1.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-backend-node@1.2.0-next.2 + - @backstage/plugin-search-common@1.2.3-next.0 + ## 0.1.0-next.0 ### Minor Changes diff --git a/plugins/search-backend-module-explore/package.json b/plugins/search-backend-module-explore/package.json index 819ddabc76..d448d0ee51 100644 --- a/plugins/search-backend-module-explore/package.json +++ b/plugins/search-backend-module-explore/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-explore", "description": "A module for the search backend that exports explore modules", - "version": "0.1.0-next.0", + "version": "0.1.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md index 19c6183fcd..e7e998018c 100644 --- a/plugins/search-backend-module-pg/CHANGELOG.md +++ b/plugins/search-backend-module-pg/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-search-backend-module-pg +## 0.5.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-search-backend-node@1.2.0-next.2 + - @backstage/plugin-search-common@1.2.3-next.0 + ## 0.5.5-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index a5c40c8fe4..ce1d5f174a 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-pg", "description": "A module for the search backend that implements search using PostgreSQL", - "version": "0.5.5-next.1", + "version": "0.5.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-techdocs/CHANGELOG.md b/plugins/search-backend-module-techdocs/CHANGELOG.md index 4a90c96889..2629004017 100644 --- a/plugins/search-backend-module-techdocs/CHANGELOG.md +++ b/plugins/search-backend-module-techdocs/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-search-backend-module-techdocs +## 0.1.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-search-backend-node@1.2.0-next.2 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-techdocs-node@1.6.1-next.2 + ## 0.1.0-next.0 ### Minor Changes diff --git a/plugins/search-backend-module-techdocs/package.json b/plugins/search-backend-module-techdocs/package.json index 22a64b4601..d2e28b9be4 100644 --- a/plugins/search-backend-module-techdocs/package.json +++ b/plugins/search-backend-module-techdocs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-techdocs", "description": "A module for the search backend that exports techdocs modules", - "version": "0.1.0-next.0", + "version": "0.1.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md index 5c83ef7771..62b802616f 100644 --- a/plugins/search-backend-node/CHANGELOG.md +++ b/plugins/search-backend-node/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-search-backend-node +## 1.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-search-common@1.2.3-next.0 + ## 1.2.0-next.1 ### Minor Changes diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index eeac6e1ba3..178882b4fe 100644 --- a/plugins/search-backend-node/package.json +++ b/plugins/search-backend-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-node", "description": "A library for Backstage backend plugins that want to interact with the search backend plugin", - "version": "1.2.0-next.1", + "version": "1.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md index cc5926a2f5..f7b920da78 100644 --- a/plugins/search-backend/CHANGELOG.md +++ b/plugins/search-backend/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-search-backend +## 1.3.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-search-backend-node@1.2.0-next.2 + - @backstage/plugin-search-common@1.2.3-next.0 + ## 1.3.0-next.1 ### Minor Changes diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index fbbda5734d..57230dad16 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend", "description": "The Backstage backend plugin that provides your backstage app with search", - "version": "1.3.0-next.1", + "version": "1.3.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md index 08079ae7bd..5f805f5760 100644 --- a/plugins/search-react/CHANGELOG.md +++ b/plugins/search-react/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-search-react +## 1.5.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4-next.0 + - @backstage/plugin-search-common@1.2.3-next.0 + ## 1.5.2-next.1 ### Patch Changes diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json index 1cc2ea03c3..188834a695 100644 --- a/plugins/search-react/package.json +++ b/plugins/search-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-react", - "version": "1.5.2-next.1", + "version": "1.5.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md index f5fd302f8e..fc1f22f81c 100644 --- a/plugins/search/CHANGELOG.md +++ b/plugins/search/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-search +## 1.2.0-next.2 + +### Minor Changes + +- d6b73b0380d: Search modal auto closes on location change + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4-next.0 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-search-react@1.5.2-next.2 + ## 1.1.2-next.1 ### Patch Changes diff --git a/plugins/search/package.json b/plugins/search/package.json index 7616a03ffd..98151c9d3f 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search", "description": "The Backstage plugin that provides your backstage app with search", - "version": "1.1.2-next.1", + "version": "1.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md index 9a98c12752..6a9f0a999d 100644 --- a/plugins/sentry/CHANGELOG.md +++ b/plugins/sentry/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-sentry +## 0.5.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + ## 0.5.2-next.1 ### Patch Changes diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index 2d85a8552c..be2eb5c02b 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sentry", "description": "A Backstage plugin that integrates towards Sentry", - "version": "0.5.2-next.1", + "version": "0.5.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/shortcuts/CHANGELOG.md b/plugins/shortcuts/CHANGELOG.md index 33a2990a15..5121115a86 100644 --- a/plugins/shortcuts/CHANGELOG.md +++ b/plugins/shortcuts/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-shortcuts +## 0.3.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + ## 0.3.9-next.1 ### Patch Changes diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index a2d1ce578e..fba65e7b5e 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-shortcuts", "description": "A Backstage plugin that provides a shortcuts feature to the sidebar", - "version": "0.3.9-next.1", + "version": "0.3.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube-backend/CHANGELOG.md b/plugins/sonarqube-backend/CHANGELOG.md index 54ac27af07..7a2d2c46ea 100644 --- a/plugins/sonarqube-backend/CHANGELOG.md +++ b/plugins/sonarqube-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-sonarqube-backend +## 0.1.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.9-next.1 ### Patch Changes diff --git a/plugins/sonarqube-backend/package.json b/plugins/sonarqube-backend/package.json index 3ec1bee0e5..c7417b6b06 100644 --- a/plugins/sonarqube-backend/package.json +++ b/plugins/sonarqube-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sonarqube-backend", - "version": "0.1.9-next.1", + "version": "0.1.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube-react/CHANGELOG.md b/plugins/sonarqube-react/CHANGELOG.md index 5ce3721423..94bc754364 100644 --- a/plugins/sonarqube-react/CHANGELOG.md +++ b/plugins/sonarqube-react/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-sonarqube-react +## 0.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + ## 0.1.5-next.0 ### Patch Changes diff --git a/plugins/sonarqube-react/package.json b/plugins/sonarqube-react/package.json index 457a52c65d..b0e36b742b 100644 --- a/plugins/sonarqube-react/package.json +++ b/plugins/sonarqube-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sonarqube-react", - "version": "0.1.5-next.0", + "version": "0.1.5-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md index b30e4c51a0..327f0c7793 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-sonarqube +## 0.6.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-sonarqube-react@0.1.5-next.1 + ## 0.6.6-next.1 ### Patch Changes diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index 1e62a91c8d..722614b030 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sonarqube", "description": "", - "version": "0.6.6-next.1", + "version": "0.6.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md index 31245febfc..54be3f285e 100644 --- a/plugins/splunk-on-call/CHANGELOG.md +++ b/plugins/splunk-on-call/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-splunk-on-call +## 0.4.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/theme@0.2.19-next.0 + ## 0.4.6-next.1 ### Patch Changes diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index 361835bc43..f88131357c 100644 --- a/plugins/splunk-on-call/package.json +++ b/plugins/splunk-on-call/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-splunk-on-call", "description": "A Backstage plugin that integrates towards Splunk On-Call", - "version": "0.4.6-next.1", + "version": "0.4.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow-backend/CHANGELOG.md b/plugins/stack-overflow-backend/CHANGELOG.md index 543ac6b9f3..5b227da921 100644 --- a/plugins/stack-overflow-backend/CHANGELOG.md +++ b/plugins/stack-overflow-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-stack-overflow-backend +## 0.1.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3-next.0 + ## 0.1.13-next.1 ### Patch Changes diff --git a/plugins/stack-overflow-backend/package.json b/plugins/stack-overflow-backend/package.json index b31ee346bc..a0430707b4 100644 --- a/plugins/stack-overflow-backend/package.json +++ b/plugins/stack-overflow-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow-backend", - "version": "0.1.13-next.1", + "version": "0.1.13-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow/CHANGELOG.md b/plugins/stack-overflow/CHANGELOG.md index cc5cd08759..1d6a48b625 100644 --- a/plugins/stack-overflow/CHANGELOG.md +++ b/plugins/stack-overflow/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-stack-overflow +## 0.1.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-home@0.4.33-next.2 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-search-react@1.5.2-next.2 + ## 0.1.13-next.1 ### Patch Changes diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json index 4cfb56bd15..163c70e758 100644 --- a/plugins/stack-overflow/package.json +++ b/plugins/stack-overflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow", - "version": "0.1.13-next.1", + "version": "0.1.13-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stackstorm/CHANGELOG.md b/plugins/stackstorm/CHANGELOG.md index 75b87e0789..f939f4669e 100644 --- a/plugins/stackstorm/CHANGELOG.md +++ b/plugins/stackstorm/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-stackstorm +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/stackstorm/package.json b/plugins/stackstorm/package.json index 28f43bcff3..0cba270449 100644 --- a/plugins/stackstorm/package.json +++ b/plugins/stackstorm/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-stackstorm", "description": "A Backstage plugin that integrates towards StackStorm", - "version": "0.1.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md index d15c6e8e5c..d6c2ac84c6 100644 --- a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md +++ b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-tech-insights-backend-module-jsonfc +## 0.1.28-next.2 + +### Patch Changes + +- 9cb1db6546a: When multiple fact retrievers are used for a check, allow for cases where only one returns a given fact +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-tech-insights-common@0.2.10 + - @backstage/plugin-tech-insights-node@0.4.2-next.2 + ## 0.1.28-next.1 ### Patch Changes diff --git a/plugins/tech-insights-backend-module-jsonfc/package.json b/plugins/tech-insights-backend-module-jsonfc/package.json index 343fd73346..fb549384a0 100644 --- a/plugins/tech-insights-backend-module-jsonfc/package.json +++ b/plugins/tech-insights-backend-module-jsonfc/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend-module-jsonfc", - "version": "0.1.28-next.1", + "version": "0.1.28-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend/CHANGELOG.md b/plugins/tech-insights-backend/CHANGELOG.md index 35abcfd5ea..1dc5782caf 100644 --- a/plugins/tech-insights-backend/CHANGELOG.md +++ b/plugins/tech-insights-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-tech-insights-backend +## 0.5.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + - @backstage/plugin-tech-insights-node@0.4.2-next.2 + ## 0.5.10-next.1 ### Patch Changes diff --git a/plugins/tech-insights-backend/package.json b/plugins/tech-insights-backend/package.json index 5a22261687..a8a90c7a1e 100644 --- a/plugins/tech-insights-backend/package.json +++ b/plugins/tech-insights-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend", - "version": "0.5.10-next.1", + "version": "0.5.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-node/CHANGELOG.md b/plugins/tech-insights-node/CHANGELOG.md index a1419ba993..1baf8bcb35 100644 --- a/plugins/tech-insights-node/CHANGELOG.md +++ b/plugins/tech-insights-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-tech-insights-node +## 0.4.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.4.2-next.1 ### Patch Changes diff --git a/plugins/tech-insights-node/package.json b/plugins/tech-insights-node/package.json index f726694638..1b6a429fd0 100644 --- a/plugins/tech-insights-node/package.json +++ b/plugins/tech-insights-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-node", - "version": "0.4.2-next.1", + "version": "0.4.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights/CHANGELOG.md b/plugins/tech-insights/CHANGELOG.md index dfc08e22d1..3c729bf8df 100644 --- a/plugins/tech-insights/CHANGELOG.md +++ b/plugins/tech-insights/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-tech-insights +## 0.3.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.3.9-next.1 ### Patch Changes diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json index 5eb4352760..022b5bc24f 100644 --- a/plugins/tech-insights/package.json +++ b/plugins/tech-insights/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights", - "version": "0.3.9-next.1", + "version": "0.3.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md index 9e3831c757..215aa011b5 100644 --- a/plugins/tech-radar/CHANGELOG.md +++ b/plugins/tech-radar/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-tech-radar +## 0.6.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/theme@0.2.19-next.0 + ## 0.6.3-next.1 ### Patch Changes diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index f5f87c8443..622930a67d 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-tech-radar", "description": "A Backstage plugin that lets you display a Tech Radar for your organization", - "version": "0.6.3-next.1", + "version": "0.6.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index 4c84795a42..5c290d700d 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.0.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/plugin-techdocs@1.6.1-next.2 + - @backstage/core-app-api@1.7.0-next.2 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/test-utils@1.3.0-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-catalog@1.10.0-next.2 + - @backstage/plugin-search-react@1.5.2-next.2 + - @backstage/plugin-techdocs-react@1.1.5-next.2 + ## 1.0.12-next.1 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index fd3bcc2858..61eb206494 100644 --- a/plugins/techdocs-addons-test-utils/package.json +++ b/plugins/techdocs-addons-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-addons-test-utils", - "version": "1.0.12-next.1", + "version": "1.0.12-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index 82366856aa..751848bab2 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-techdocs-backend +## 1.6.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/plugin-catalog-common@1.0.13-next.0 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.0-next.1 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-techdocs-node@1.6.1-next.2 + ## 1.6.1-next.1 ### Patch Changes diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index a710e649c6..73043942eb 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-backend", "description": "The Backstage backend plugin that renders technical documentation for your components", - "version": "1.6.1-next.1", + "version": "1.6.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index 43e6840750..856576a3df 100644 --- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md +++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-techdocs-module-addons-contrib +## 1.0.12-next.2 + +### Patch Changes + +- c657d0a610e: Bump `photoswipe` dependency to `^5.3.7`. +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/integration@1.4.4-next.0 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-techdocs-react@1.1.5-next.2 + ## 1.0.12-next.1 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index 4ce37cd465..f27bc99e27 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-module-addons-contrib", "description": "Plugin module for contributed TechDocs Addons", - "version": "1.0.12-next.1", + "version": "1.0.12-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md index 5eec6e43de..0a6d87e679 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-techdocs-node +## 1.6.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/integration-aws-node@0.1.2 + - @backstage/plugin-search-common@1.2.3-next.0 + ## 1.6.1-next.1 ### Patch Changes diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index 75c99775ea..ed0ca977dd 100644 --- a/plugins/techdocs-node/package.json +++ b/plugins/techdocs-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-node", "description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli", - "version": "1.6.1-next.1", + "version": "1.6.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index 06eb77f7fa..d984aaa3a4 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-techdocs-react +## 1.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/version-bridge@1.0.4-next.0 + ## 1.1.5-next.1 ### Patch Changes diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index af0aeace87..048829476d 100644 --- a/plugins/techdocs-react/package.json +++ b/plugins/techdocs-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-react", "description": "Shared frontend utilities for TechDocs and Addons", - "version": "1.1.5-next.1", + "version": "1.1.5-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index b25673f5bf..ecc4671ed8 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-techdocs +## 1.6.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/integration-react@1.1.12-next.2 + - @backstage/theme@0.2.19-next.0 + - @backstage/plugin-search-common@1.2.3-next.0 + - @backstage/plugin-search-react@1.5.2-next.2 + - @backstage/plugin-techdocs-react@1.1.5-next.2 + ## 1.6.1-next.1 ### Patch Changes diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 48bd40ae84..e91e5d1318 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs", "description": "The Backstage plugin that renders technical documentation for your components", - "version": "1.6.1-next.1", + "version": "1.6.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo-backend/CHANGELOG.md b/plugins/todo-backend/CHANGELOG.md index 0a0e5e79f3..3477e36061 100644 --- a/plugins/todo-backend/CHANGELOG.md +++ b/plugins/todo-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-todo-backend +## 0.1.41-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/catalog-client@1.4.1-next.0 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/integration@1.4.4-next.0 + - @backstage/plugin-catalog-node@1.3.5-next.2 + ## 0.1.41-next.1 ### Patch Changes diff --git a/plugins/todo-backend/package.json b/plugins/todo-backend/package.json index 7731293996..1e064c4017 100644 --- a/plugins/todo-backend/package.json +++ b/plugins/todo-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo-backend", "description": "A Backstage backend plugin that lets you browse TODO comments in your source code", - "version": "0.1.41-next.1", + "version": "0.1.41-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo/CHANGELOG.md b/plugins/todo/CHANGELOG.md index 60d107ffe6..929abebf01 100644 --- a/plugins/todo/CHANGELOG.md +++ b/plugins/todo/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-todo +## 0.2.19-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + ## 0.2.19-next.1 ### Patch Changes diff --git a/plugins/todo/package.json b/plugins/todo/package.json index a305b79df7..54c1aca6b5 100644 --- a/plugins/todo/package.json +++ b/plugins/todo/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo", "description": "A Backstage plugin that lets you browse TODO comments in your source code", - "version": "0.2.19-next.1", + "version": "0.2.19-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings-backend/CHANGELOG.md b/plugins/user-settings-backend/CHANGELOG.md index eeb62965a5..2b26814d27 100644 --- a/plugins/user-settings-backend/CHANGELOG.md +++ b/plugins/user-settings-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-user-settings-backend +## 0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-plugin-api@0.5.1-next.2 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json index 343eda45b8..6143705d61 100644 --- a/plugins/user-settings-backend/package.json +++ b/plugins/user-settings-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings-backend", "description": "The Backstage backend plugin to manage user settings", - "version": "0.1.8-next.1", + "version": "0.1.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index 5fe3362beb..c44041ae2a 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-user-settings +## 0.7.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/core-app-api@1.7.0-next.2 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + - @backstage/types@1.0.2 + ## 0.7.2-next.1 ### Patch Changes diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 362b1e2344..0e3ea1ff2a 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings", "description": "A Backstage plugin that provides a settings page", - "version": "0.7.2-next.1", + "version": "0.7.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault-backend/CHANGELOG.md b/plugins/vault-backend/CHANGELOG.md index 0f0ea675f0..4576354dce 100644 --- a/plugins/vault-backend/CHANGELOG.md +++ b/plugins/vault-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-vault-backend +## 0.3.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.4-next.2 + - @backstage/backend-tasks@0.5.1-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.3.0-next.1 ### Patch Changes diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json index 4a58b42c69..23b4058c7c 100644 --- a/plugins/vault-backend/package.json +++ b/plugins/vault-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault-backend", "description": "A Backstage backend plugin that integrates towards Vault", - "version": "0.3.0-next.1", + "version": "0.3.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault/CHANGELOG.md b/plugins/vault/CHANGELOG.md index 7580b64043..586cd17a33 100644 --- a/plugins/vault/CHANGELOG.md +++ b/plugins/vault/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-vault +## 0.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/plugin-catalog-react@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/catalog-model@1.2.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + ## 0.1.11-next.1 ### Patch Changes diff --git a/plugins/vault/package.json b/plugins/vault/package.json index 0cbd40b3fe..b43e2a4e1f 100644 --- a/plugins/vault/package.json +++ b/plugins/vault/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault", "description": "A Backstage plugin that integrates towards Vault", - "version": "0.1.11-next.1", + "version": "0.1.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/xcmetrics/CHANGELOG.md b/plugins/xcmetrics/CHANGELOG.md index fc2bf583b7..bf01295b5a 100644 --- a/plugins/xcmetrics/CHANGELOG.md +++ b/plugins/xcmetrics/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-xcmetrics +## 0.2.37-next.2 + +### Patch Changes + +- 55a969fe574: Bumped `recharts` dependency to `^2.5.0`. +- Updated dependencies + - @backstage/core-components@0.12.6-next.2 + - @backstage/core-plugin-api@1.5.1-next.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19-next.0 + ## 0.2.37-next.1 ### Patch Changes diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index cced2ca271..1a654fd52f 100644 --- a/plugins/xcmetrics/package.json +++ b/plugins/xcmetrics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-xcmetrics", "description": "A Backstage plugin that shows XCode build metrics for your components", - "version": "0.2.37-next.1", + "version": "0.2.37-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/yarn.lock b/yarn.lock index 33726f44d2..75f4a41905 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3644,7 +3644,18 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-client@^1.4.0, @backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client": +"@backstage/catalog-client@npm:^1.4.0": + version: 1.4.0 + resolution: "@backstage/catalog-client@npm:1.4.0" + dependencies: + "@backstage/catalog-model": ^1.2.1 + "@backstage/errors": ^1.1.5 + cross-fetch: ^3.1.5 + checksum: 8ffa95d74b2be83247beafce3aebe06cb688b018ada8ce4364b48ca09500293b1057cb48b90650a44b6252775bc3e09eeafcef79b8d8db4114271f8ec31bec80 + languageName: node + linkType: hard + +"@backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client": version: 0.0.0-use.local resolution: "@backstage/catalog-client@workspace:packages/catalog-client" dependencies: From a580e4af62760d30a511ef4842271b4cbad073e0 Mon Sep 17 00:00:00 2001 From: Sam Blausten Date: Tue, 4 Apr 2023 17:48:11 +0200 Subject: [PATCH 134/137] Update .changeset/itchy-kiwis-unite.md Co-authored-by: Patrik Oldsberg Signed-off-by: Sam Blausten --- .changeset/itchy-kiwis-unite.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/itchy-kiwis-unite.md b/.changeset/itchy-kiwis-unite.md index c7bcad6759..f4d263589b 100644 --- a/.changeset/itchy-kiwis-unite.md +++ b/.changeset/itchy-kiwis-unite.md @@ -2,4 +2,4 @@ '@backstage/plugin-explore': patch --- -Extracted generic EntityExplorerContent component so that it is easy to show any component kinds in their own tab in the Explore page. +Extracted generic `EntityExplorerContent` component so that it is easy to show any component kinds in their own tab in the explore page. From f40e571360bf14dfb395757c0546ad97148fea47 Mon Sep 17 00:00:00 2001 From: Sam Blausten Date: Tue, 4 Apr 2023 17:49:35 +0200 Subject: [PATCH 135/137] Update plugins/explore/README.md Co-authored-by: Patrik Oldsberg Signed-off-by: Sam Blausten --- plugins/explore/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/explore/README.md b/plugins/explore/README.md index 44942ab2a3..a1cb273aab 100644 --- a/plugins/explore/README.md +++ b/plugins/explore/README.md @@ -117,10 +117,10 @@ export const ExplorePage = () => { subtitle="Browse our ecosystem" > - + - + From fab17a4f6dadd752f7150b93a9e7e829fa253a94 Mon Sep 17 00:00:00 2001 From: sblausten Date: Tue, 4 Apr 2023 17:51:53 +0200 Subject: [PATCH 136/137] Remove extra licencing comments Signed-off-by: sblausten --- .../src/components/DomainCard/DomainCard.test.tsx | 15 --------------- .../src/components/DomainCard/DomainCard.tsx | 15 --------------- .../explore/src/components/DomainCard/index.ts | 15 --------------- 3 files changed, 45 deletions(-) diff --git a/plugins/explore/src/components/DomainCard/DomainCard.test.tsx b/plugins/explore/src/components/DomainCard/DomainCard.test.tsx index 1e4b9b30f1..df9b84820a 100644 --- a/plugins/explore/src/components/DomainCard/DomainCard.test.tsx +++ b/plugins/explore/src/components/DomainCard/DomainCard.test.tsx @@ -52,18 +52,3 @@ describe('', () => { ); }); }); -/* - * Copyright 2023 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. - */ diff --git a/plugins/explore/src/components/DomainCard/DomainCard.tsx b/plugins/explore/src/components/DomainCard/DomainCard.tsx index 867109f03c..0d37e3e273 100644 --- a/plugins/explore/src/components/DomainCard/DomainCard.tsx +++ b/plugins/explore/src/components/DomainCard/DomainCard.tsx @@ -73,18 +73,3 @@ export const DomainCard = (props: { entity: DomainEntity }) => { ); }; -/* - * Copyright 2023 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. - */ diff --git a/plugins/explore/src/components/DomainCard/index.ts b/plugins/explore/src/components/DomainCard/index.ts index 47870e5645..dbae755460 100644 --- a/plugins/explore/src/components/DomainCard/index.ts +++ b/plugins/explore/src/components/DomainCard/index.ts @@ -15,18 +15,3 @@ */ export { DomainCard } from './DomainCard'; -/* - * Copyright 2023 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. - */ From 6b2a5fe7482b27c47dca052cb71b80ccecd30f7c Mon Sep 17 00:00:00 2001 From: sblausten Date: Tue, 4 Apr 2023 17:53:23 +0200 Subject: [PATCH 137/137] Component name update Signed-off-by: sblausten --- .changeset/itchy-kiwis-unite.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/itchy-kiwis-unite.md b/.changeset/itchy-kiwis-unite.md index f4d263589b..0e3bcae282 100644 --- a/.changeset/itchy-kiwis-unite.md +++ b/.changeset/itchy-kiwis-unite.md @@ -2,4 +2,4 @@ '@backstage/plugin-explore': patch --- -Extracted generic `EntityExplorerContent` component so that it is easy to show any component kinds in their own tab in the explore page. +Extracted generic `CatalogKindExploreContent` component so that it is easy to show any component kinds in their own tab in the explore page.