From d47aaa3250eee541e65848dd62a3c39a4ce9b738 Mon Sep 17 00:00:00 2001 From: Mahendra Patel Date: Thu, 20 Mar 2025 03:16:34 +0530 Subject: [PATCH 01/61] Added EntityOrderFilter to sort entities by different fields Signed-off-by: Mahendra Patel --- .changeset/sharp-numbers-doubt.md | 20 +++++++++++++++++++ .../UserListPicker/UserListPicker.test.tsx | 20 +++++++++++++++++++ .../useAllEntitiesCount.test.tsx | 6 ++++++ .../useOwnedEntitiesCount.test.tsx | 12 +++++++++++ .../useStarredEntitiesCount.test.tsx | 6 ++++++ plugins/catalog-react/src/filters.ts | 17 ++++++++++++++++ .../src/hooks/useEntityListProvider.tsx | 3 ++- plugins/catalog-react/src/utils/filters.ts | 16 ++++++++++++++- 8 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 .changeset/sharp-numbers-doubt.md diff --git a/.changeset/sharp-numbers-doubt.md b/.changeset/sharp-numbers-doubt.md new file mode 100644 index 0000000000..93f1b5f233 --- /dev/null +++ b/.changeset/sharp-numbers-doubt.md @@ -0,0 +1,20 @@ +--- +'@backstage/plugin-catalog-react': minor +--- + +Added EntityOrderFilter to sort entities by different fields/columns. This new filter allows users to specify the order in which entities are displayed in the catalog. + +Example usage: + +```ts +import { EntityOrderFilter } from '@backstage/plugin-catalog-react'; + +updateFilters({ + order: new EntityOrderFilter([ + { + field: 'metadata.name', + order: 'desc', + }, + ]), +}); +``` diff --git a/plugins/catalog-react/src/components/UserListPicker/UserListPicker.test.tsx b/plugins/catalog-react/src/components/UserListPicker/UserListPicker.test.tsx index 2471ce5277..0952822f95 100644 --- a/plugins/catalog-react/src/components/UserListPicker/UserListPicker.test.tsx +++ b/plugins/catalog-react/src/components/UserListPicker/UserListPicker.test.tsx @@ -60,6 +60,12 @@ const mockUser: UserEntity = { }; const ownershipEntityRefs = ['user:default/testuser']; +const orderFields = [ + { + field: 'metadata.name', + order: 'asc', + }, +]; const mockConfigApi = mockApis.config({ data: { organization: { name: 'Test Company' } }, @@ -190,6 +196,7 @@ describe('', () => { 'metadata.namespace': ['default'], }, limit: 0, + orderFields, }); expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { @@ -197,6 +204,7 @@ describe('', () => { 'relations.ownedBy': ['user:default/testuser'], }, limit: 0, + orderFields, }); expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { @@ -204,6 +212,7 @@ describe('', () => { 'metadata.name': ['e-1', 'e-2'], }, limit: 1000, + orderFields, }); }); @@ -229,10 +238,12 @@ describe('', () => { expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { 'metadata.tags': ['tag1'] }, limit: 0, + orderFields, }); expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { 'metadata.name': ['e-1', 'e-2'], 'metadata.tags': ['tag1'] }, limit: 1000, + orderFields, }); expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { @@ -240,6 +251,7 @@ describe('', () => { 'metadata.tags': ['tag1'], }, limit: 0, + orderFields, }); }); @@ -272,10 +284,12 @@ describe('', () => { expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { kind: 'component' }, limit: 0, + orderFields, }); expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { kind: 'component', 'metadata.name': ['e-1', 'e-2'] }, limit: 1000, + orderFields, }); expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { @@ -283,6 +297,7 @@ describe('', () => { 'relations.ownedBy': ['user:default/testuser'], }, limit: 0, + orderFields, }); }); @@ -308,10 +323,12 @@ describe('', () => { expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { kind: 'component', 'metadata.name': ['e-1', 'e-2'] }, limit: 1000, + orderFields, }); expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { kind: 'component' }, limit: 0, + orderFields, }); expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { @@ -319,6 +336,7 @@ describe('', () => { 'relations.ownedBy': ['user:default/testuser'], }, limit: 0, + orderFields, }); }); @@ -451,6 +469,7 @@ describe('', () => { expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { 'metadata.name': ['e-1', 'e-2'] }, limit: 1000, + orderFields, }); }); expect(updateFilters).not.toHaveBeenCalledWith({ @@ -624,6 +643,7 @@ describe('', () => { expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { 'metadata.name': ['e-1', 'e-2'] }, limit: 1000, + orderFields, }); }); expect(updateFilters).not.toHaveBeenCalledWith({ diff --git a/plugins/catalog-react/src/components/UserListPicker/useAllEntitiesCount.test.tsx b/plugins/catalog-react/src/components/UserListPicker/useAllEntitiesCount.test.tsx index 2449d47a1c..718f7499a9 100644 --- a/plugins/catalog-react/src/components/UserListPicker/useAllEntitiesCount.test.tsx +++ b/plugins/catalog-react/src/components/UserListPicker/useAllEntitiesCount.test.tsx @@ -74,6 +74,12 @@ describe('useAllEntitiesCount', () => { 'relations.ownedBy': ['user:default/owner'], }, limit: 0, + orderFields: [ + { + field: 'metadata.name', + order: 'asc', + }, + ], }), ); expect(result.current).toEqual({ count: 10, loading: false }); diff --git a/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.test.tsx b/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.test.tsx index 8ea9f63472..7b4f89d70a 100644 --- a/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.test.tsx +++ b/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.test.tsx @@ -115,6 +115,12 @@ describe('useOwnedEntitiesCount', () => { 'relations.ownedBy': ['user:default/spiderman', 'user:group/a-group'], }, limit: 0, + orderFields: [ + { + field: 'metadata.name', + order: 'asc', + }, + ], }), ); @@ -190,6 +196,12 @@ describe('useOwnedEntitiesCount', () => { 'relations.ownedBy': ['user:group/a-group'], }, limit: 0, + orderFields: [ + { + field: 'metadata.name', + order: 'asc', + }, + ], }), ); diff --git a/plugins/catalog-react/src/components/UserListPicker/useStarredEntitiesCount.test.tsx b/plugins/catalog-react/src/components/UserListPicker/useStarredEntitiesCount.test.tsx index 096ad01ddd..8808d4a3b6 100644 --- a/plugins/catalog-react/src/components/UserListPicker/useStarredEntitiesCount.test.tsx +++ b/plugins/catalog-react/src/components/UserListPicker/useStarredEntitiesCount.test.tsx @@ -87,6 +87,12 @@ describe('useStarredEntitiesCount', () => { 'metadata.name': ['favourite1', 'favourite2'], }, limit: 1000, + orderFields: [ + { + field: 'metadata.name', + order: 'asc', + }, + ], }); expect(result.current).toEqual({ count: 2, diff --git a/plugins/catalog-react/src/filters.ts b/plugins/catalog-react/src/filters.ts index 3ac7bda73a..3bbae986fa 100644 --- a/plugins/catalog-react/src/filters.ts +++ b/plugins/catalog-react/src/filters.ts @@ -23,6 +23,7 @@ import { import { AlphaEntity } from '@backstage/catalog-model/alpha'; import { EntityFilter, UserListFilterKind } from './types'; import { getEntityRelations } from './utils/getEntityRelations'; +import { EntityOrderQuery } from '@backstage/catalog-client'; /** * Filter entities based on Kind. @@ -331,3 +332,19 @@ export class EntityErrorFilter implements EntityFilter { return error !== undefined && this.value === error; } } + +/** + * Sort entities by a given field/column. + * @public + */ +export class EntityOrderFilter implements EntityFilter { + constructor(readonly value: EntityOrderQuery) {} + + getOrderFilters(): EntityOrderQuery { + return this.value; + } + + filterEntity(_: Entity): boolean { + return true; + } +} diff --git a/plugins/catalog-react/src/hooks/useEntityListProvider.tsx b/plugins/catalog-react/src/hooks/useEntityListProvider.tsx index fc2dfe6a73..3b09434c81 100644 --- a/plugins/catalog-react/src/hooks/useEntityListProvider.tsx +++ b/plugins/catalog-react/src/hooks/useEntityListProvider.tsx @@ -35,6 +35,7 @@ import { EntityKindFilter, EntityLifecycleFilter, EntityNamespaceFilter, + EntityOrderFilter, EntityOrphanFilter, EntityOwnerFilter, EntityTagFilter, @@ -64,6 +65,7 @@ export type DefaultEntityFilters = { orphan?: EntityOrphanFilter; error?: EntityErrorFilter; namespace?: EntityNamespaceFilter; + order?: EntityOrderFilter; }; /** @public */ @@ -287,7 +289,6 @@ export const EntityListProvider = ( ...backendFilter, limit, offset, - orderFields: [{ field: 'metadata.name', order: 'asc' }], }); setOutputState({ appliedFilters: requestedFilters, diff --git a/plugins/catalog-react/src/utils/filters.ts b/plugins/catalog-react/src/utils/filters.ts index 82d7358b91..1ff7334ffb 100644 --- a/plugins/catalog-react/src/utils/filters.ts +++ b/plugins/catalog-react/src/utils/filters.ts @@ -19,6 +19,7 @@ import { EntityFilter } from '../types'; import { EntityLifecycleFilter, EntityNamespaceFilter, + EntityOrderFilter, EntityOrphanFilter, EntityOwnerFilter, EntityTagFilter, @@ -26,18 +27,24 @@ import { EntityUserFilter, UserListFilter, } from '../filters'; +import { EntityOrderQuery } from '@backstage/catalog-client'; export interface CatalogFilters { filter: Record; fullTextFilter?: { term: string; }; + orderFields?: EntityOrderQuery; } function isEntityTextFilter(t: EntityFilter): t is EntityTextFilter { return !!(t as EntityTextFilter).getFullTextFilters; } +function isEntityOrderFilter(t: EntityFilter): t is EntityOrderFilter { + return !!(t as EntityOrderFilter).getOrderFilters; +} + export function reduceCatalogFilters(filters: EntityFilter[]): CatalogFilters { const condensedFilters = filters.reduce( (compoundFilter, filter) => { @@ -50,7 +57,14 @@ export function reduceCatalogFilters(filters: EntityFilter[]): CatalogFilters { ); const fullTextFilter = filters.find(isEntityTextFilter)?.getFullTextFilters(); - return { filter: condensedFilters, fullTextFilter }; + + const orderFields = filters.find(isEntityOrderFilter)?.getOrderFilters() || [ + { + field: 'metadata.name', + order: 'asc', + }, + ]; + return { filter: condensedFilters, fullTextFilter, orderFields }; } /** From 711798d6d96d8ed28e01af85ffb18e24c8b02f58 Mon Sep 17 00:00:00 2001 From: Mahendra Patel Date: Thu, 20 Mar 2025 10:18:15 +0530 Subject: [PATCH 02/61] Added EntityOrderFilter to sort entities by different fields Signed-off-by: Mahendra Patel --- plugins/catalog-react/report.api.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/plugins/catalog-react/report.api.md b/plugins/catalog-react/report.api.md index a0e2d22141..a25da938a9 100644 --- a/plugins/catalog-react/report.api.md +++ b/plugins/catalog-react/report.api.md @@ -11,6 +11,7 @@ import { ComponentEntity } from '@backstage/catalog-model'; import { ComponentProps } from 'react'; import { CompoundEntityRef } from '@backstage/catalog-model'; import { Entity } from '@backstage/catalog-model'; +import { EntityOrderQuery } from '@backstage/catalog-client'; import IconButton from '@material-ui/core/IconButton'; import { IconComponent } from '@backstage/core-plugin-api'; import { InfoCardVariants } from '@backstage/core-components'; @@ -196,6 +197,7 @@ export type DefaultEntityFilters = { orphan?: EntityOrphanFilter; error?: EntityErrorFilter; namespace?: EntityNamespaceFilter; + order?: EntityOrderFilter; }; // @public @@ -407,6 +409,17 @@ export interface EntityNamespacePickerProps { initiallySelectedNamespaces?: string[]; } +// @public +export class EntityOrderFilter implements EntityFilter { + constructor(value: EntityOrderQuery); + // (undocumented) + filterEntity(_: Entity): boolean; + // (undocumented) + getOrderFilters(): EntityOrderQuery; + // (undocumented) + readonly value: EntityOrderQuery; +} + // @public export class EntityOrphanFilter implements EntityFilter { constructor(value: boolean); From 1b6f043701ae330d27942b13110d31d66f3e7499 Mon Sep 17 00:00:00 2001 From: Mahendra Patel Date: Fri, 21 Mar 2025 19:15:12 +0530 Subject: [PATCH 03/61] Added EntityOrderFilter to sort entities by different fields Signed-off-by: Mahendra Patel --- .changeset/sharp-numbers-doubt.md | 8 +++++++- .../UserListPicker/UserListPicker.test.tsx | 20 ------------------- .../useAllEntitiesCount.test.tsx | 6 ------ .../UserListPicker/useAllEntitiesCount.ts | 2 +- .../useOwnedEntitiesCount.test.tsx | 12 ----------- .../UserListPicker/useOwnedEntitiesCount.ts | 2 +- .../useStarredEntitiesCount.test.tsx | 6 ------ .../UserListPicker/useStarredEntitiesCount.ts | 2 +- plugins/catalog-react/src/filters.ts | 8 ++++---- 9 files changed, 14 insertions(+), 52 deletions(-) diff --git a/.changeset/sharp-numbers-doubt.md b/.changeset/sharp-numbers-doubt.md index 93f1b5f233..81e1313780 100644 --- a/.changeset/sharp-numbers-doubt.md +++ b/.changeset/sharp-numbers-doubt.md @@ -7,8 +7,14 @@ Added EntityOrderFilter to sort entities by different fields/columns. This new f Example usage: ```ts -import { EntityOrderFilter } from '@backstage/plugin-catalog-react'; +import { + EntityOrderFilter, + useEntityList, +} from '@backstage/plugin-catalog-react'; +// ... +const { updateFilters } = useEntityList(); +// ... updateFilters({ order: new EntityOrderFilter([ { diff --git a/plugins/catalog-react/src/components/UserListPicker/UserListPicker.test.tsx b/plugins/catalog-react/src/components/UserListPicker/UserListPicker.test.tsx index 0952822f95..2471ce5277 100644 --- a/plugins/catalog-react/src/components/UserListPicker/UserListPicker.test.tsx +++ b/plugins/catalog-react/src/components/UserListPicker/UserListPicker.test.tsx @@ -60,12 +60,6 @@ const mockUser: UserEntity = { }; const ownershipEntityRefs = ['user:default/testuser']; -const orderFields = [ - { - field: 'metadata.name', - order: 'asc', - }, -]; const mockConfigApi = mockApis.config({ data: { organization: { name: 'Test Company' } }, @@ -196,7 +190,6 @@ describe('', () => { 'metadata.namespace': ['default'], }, limit: 0, - orderFields, }); expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { @@ -204,7 +197,6 @@ describe('', () => { 'relations.ownedBy': ['user:default/testuser'], }, limit: 0, - orderFields, }); expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { @@ -212,7 +204,6 @@ describe('', () => { 'metadata.name': ['e-1', 'e-2'], }, limit: 1000, - orderFields, }); }); @@ -238,12 +229,10 @@ describe('', () => { expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { 'metadata.tags': ['tag1'] }, limit: 0, - orderFields, }); expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { 'metadata.name': ['e-1', 'e-2'], 'metadata.tags': ['tag1'] }, limit: 1000, - orderFields, }); expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { @@ -251,7 +240,6 @@ describe('', () => { 'metadata.tags': ['tag1'], }, limit: 0, - orderFields, }); }); @@ -284,12 +272,10 @@ describe('', () => { expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { kind: 'component' }, limit: 0, - orderFields, }); expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { kind: 'component', 'metadata.name': ['e-1', 'e-2'] }, limit: 1000, - orderFields, }); expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { @@ -297,7 +283,6 @@ describe('', () => { 'relations.ownedBy': ['user:default/testuser'], }, limit: 0, - orderFields, }); }); @@ -323,12 +308,10 @@ describe('', () => { expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { kind: 'component', 'metadata.name': ['e-1', 'e-2'] }, limit: 1000, - orderFields, }); expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { kind: 'component' }, limit: 0, - orderFields, }); expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { @@ -336,7 +319,6 @@ describe('', () => { 'relations.ownedBy': ['user:default/testuser'], }, limit: 0, - orderFields, }); }); @@ -469,7 +451,6 @@ describe('', () => { expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { 'metadata.name': ['e-1', 'e-2'] }, limit: 1000, - orderFields, }); }); expect(updateFilters).not.toHaveBeenCalledWith({ @@ -643,7 +624,6 @@ describe('', () => { expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ filter: { 'metadata.name': ['e-1', 'e-2'] }, limit: 1000, - orderFields, }); }); expect(updateFilters).not.toHaveBeenCalledWith({ diff --git a/plugins/catalog-react/src/components/UserListPicker/useAllEntitiesCount.test.tsx b/plugins/catalog-react/src/components/UserListPicker/useAllEntitiesCount.test.tsx index 718f7499a9..2449d47a1c 100644 --- a/plugins/catalog-react/src/components/UserListPicker/useAllEntitiesCount.test.tsx +++ b/plugins/catalog-react/src/components/UserListPicker/useAllEntitiesCount.test.tsx @@ -74,12 +74,6 @@ describe('useAllEntitiesCount', () => { 'relations.ownedBy': ['user:default/owner'], }, limit: 0, - orderFields: [ - { - field: 'metadata.name', - order: 'asc', - }, - ], }), ); expect(result.current).toEqual({ count: 10, loading: false }); diff --git a/plugins/catalog-react/src/components/UserListPicker/useAllEntitiesCount.ts b/plugins/catalog-react/src/components/UserListPicker/useAllEntitiesCount.ts index fa564382d8..c4bea1fa05 100644 --- a/plugins/catalog-react/src/components/UserListPicker/useAllEntitiesCount.ts +++ b/plugins/catalog-react/src/components/UserListPicker/useAllEntitiesCount.ts @@ -30,7 +30,7 @@ export function useAllEntitiesCount() { const request = useMemo(() => { const { user, ...allFilters } = filters; const compacted = compact(Object.values(allFilters)); - const catalogFilters = reduceCatalogFilters(compacted); + const { orderFields, ...catalogFilters } = reduceCatalogFilters(compacted); const newRequest: QueryEntitiesInitialRequest = { ...catalogFilters, limit: 0, diff --git a/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.test.tsx b/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.test.tsx index 7b4f89d70a..8ea9f63472 100644 --- a/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.test.tsx +++ b/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.test.tsx @@ -115,12 +115,6 @@ describe('useOwnedEntitiesCount', () => { 'relations.ownedBy': ['user:default/spiderman', 'user:group/a-group'], }, limit: 0, - orderFields: [ - { - field: 'metadata.name', - order: 'asc', - }, - ], }), ); @@ -196,12 +190,6 @@ describe('useOwnedEntitiesCount', () => { 'relations.ownedBy': ['user:group/a-group'], }, limit: 0, - orderFields: [ - { - field: 'metadata.name', - order: 'asc', - }, - ], }), ); diff --git a/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.ts b/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.ts index dbdc040165..489ae24d4e 100644 --- a/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.ts +++ b/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.ts @@ -38,7 +38,7 @@ export function useOwnedEntitiesCount() { ); const { user, owners, ...allFilters } = filters; - const catalogFilters = reduceCatalogFilters( + const { orderFields, ...catalogFilters } = reduceCatalogFilters( compact(Object.values(allFilters)), ); diff --git a/plugins/catalog-react/src/components/UserListPicker/useStarredEntitiesCount.test.tsx b/plugins/catalog-react/src/components/UserListPicker/useStarredEntitiesCount.test.tsx index 8808d4a3b6..096ad01ddd 100644 --- a/plugins/catalog-react/src/components/UserListPicker/useStarredEntitiesCount.test.tsx +++ b/plugins/catalog-react/src/components/UserListPicker/useStarredEntitiesCount.test.tsx @@ -87,12 +87,6 @@ describe('useStarredEntitiesCount', () => { 'metadata.name': ['favourite1', 'favourite2'], }, limit: 1000, - orderFields: [ - { - field: 'metadata.name', - order: 'asc', - }, - ], }); expect(result.current).toEqual({ count: 2, diff --git a/plugins/catalog-react/src/components/UserListPicker/useStarredEntitiesCount.ts b/plugins/catalog-react/src/components/UserListPicker/useStarredEntitiesCount.ts index 70dde024f8..f1fcea4572 100644 --- a/plugins/catalog-react/src/components/UserListPicker/useStarredEntitiesCount.ts +++ b/plugins/catalog-react/src/components/UserListPicker/useStarredEntitiesCount.ts @@ -34,7 +34,7 @@ export function useStarredEntitiesCount() { const request = useMemo(() => { const { user, ...allFilters } = filters; const compacted = compact(Object.values(allFilters)); - const catalogFilters = reduceCatalogFilters(compacted); + const { orderFields, ...catalogFilters } = reduceCatalogFilters(compacted); const facet = 'metadata.name'; diff --git a/plugins/catalog-react/src/filters.ts b/plugins/catalog-react/src/filters.ts index 3bbae986fa..8a6e664585 100644 --- a/plugins/catalog-react/src/filters.ts +++ b/plugins/catalog-react/src/filters.ts @@ -338,13 +338,13 @@ export class EntityErrorFilter implements EntityFilter { * @public */ export class EntityOrderFilter implements EntityFilter { - constructor(readonly value: EntityOrderQuery) {} + constructor(readonly values: [string, 'asc' | 'desc'][]) {} getOrderFilters(): EntityOrderQuery { - return this.value; + return this.values.map(([field, order]) => ({ field, order })); } - filterEntity(_: Entity): boolean { - return true; + toQueryValue(): string[] { + return this.values.flat(); } } From 466ab5bd9ef92d072a6704785b53d261ced3014b Mon Sep 17 00:00:00 2001 From: Mahendra Patel Date: Fri, 21 Mar 2025 19:22:15 +0530 Subject: [PATCH 04/61] Added EntityOrderFilter to sort entities by different fields Signed-off-by: Mahendra Patel --- plugins/catalog-react/report.api.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/catalog-react/report.api.md b/plugins/catalog-react/report.api.md index a25da938a9..f6ad4020c2 100644 --- a/plugins/catalog-react/report.api.md +++ b/plugins/catalog-react/report.api.md @@ -411,13 +411,13 @@ export interface EntityNamespacePickerProps { // @public export class EntityOrderFilter implements EntityFilter { - constructor(value: EntityOrderQuery); - // (undocumented) - filterEntity(_: Entity): boolean; + constructor(values: [string, 'asc' | 'desc'][]); // (undocumented) getOrderFilters(): EntityOrderQuery; // (undocumented) - readonly value: EntityOrderQuery; + toQueryValue(): string[]; + // (undocumented) + readonly values: [string, 'asc' | 'desc'][]; } // @public From b60f5e32107dbc0be37f248f2a9cc32e1f122882 Mon Sep 17 00:00:00 2001 From: msimoes Date: Fri, 28 Mar 2025 16:13:17 +0000 Subject: [PATCH 05/61] Added support to the 'object_kind' field as the definition of the Gitlab webhook trigger Signed-off-by: msimoes Signed-off-by: msimoes --- .../src/router/GitlabEventRouter.test.ts | 41 +++++++++++++++++-- .../src/router/GitlabEventRouter.ts | 12 ++++-- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/plugins/events-backend-module-gitlab/src/router/GitlabEventRouter.test.ts b/plugins/events-backend-module-gitlab/src/router/GitlabEventRouter.test.ts index bc9da24cbe..cd7a9a656a 100644 --- a/plugins/events-backend-module-gitlab/src/router/GitlabEventRouter.test.ts +++ b/plugins/events-backend-module-gitlab/src/router/GitlabEventRouter.test.ts @@ -21,7 +21,6 @@ describe('GitlabEventRouter', () => { const events = new TestEventsService(); const eventRouter = new GitlabEventRouter({ events: events }); const topic = 'gitlab'; - const eventPayload = { event_name: 'test_type', test: 'payload' }; const metadata = {}; beforeEach(() => { @@ -36,7 +35,7 @@ describe('GitlabEventRouter', () => { expect(events.subscribed[0].topics).toEqual([topic]); }); - it('no $.event_name', () => { + it('no $.event_name and no $.object_kind', () => { eventRouter.onEvent({ topic, eventPayload: { invalid: 'payload' }, @@ -46,11 +45,45 @@ describe('GitlabEventRouter', () => { expect(events.published).toEqual([]); }); - it('with $.event_name', () => { + it('with $.event_name and no $.object_kind', () => { + const eventPayload = { + event_name: 'type_from_event_name', + test: 'payload', + }; + eventRouter.onEvent({ topic, eventPayload, metadata }); expect(events.published.length).toBe(1); - expect(events.published[0].topic).toEqual('gitlab.test_type'); + expect(events.published[0].topic).toEqual('gitlab.type_from_event_name'); + expect(events.published[0].eventPayload).toEqual(eventPayload); + expect(events.published[0].metadata).toEqual(metadata); + }); + + it('with $.object_kind and no $.event_name', () => { + const eventPayload = { + object_kind: 'type_from_object_kind', + test: 'payload', + }; + + eventRouter.onEvent({ topic, eventPayload, metadata }); + + expect(events.published.length).toBe(1); + expect(events.published[0].topic).toEqual('gitlab.type_from_object_kind'); + expect(events.published[0].eventPayload).toEqual(eventPayload); + expect(events.published[0].metadata).toEqual(metadata); + }); + + it('with $.event_name and $.object_kind', () => { + const eventPayload = { + event_name: 'type_from_event_name', + object_kind: 'type_from_object_kind', + test: 'payload', + }; + + eventRouter.onEvent({ topic, eventPayload, metadata }); + + expect(events.published.length).toBe(1); + expect(events.published[0].topic).toEqual('gitlab.type_from_object_kind'); expect(events.published[0].eventPayload).toEqual(eventPayload); expect(events.published[0].metadata).toEqual(metadata); }); diff --git a/plugins/events-backend-module-gitlab/src/router/GitlabEventRouter.ts b/plugins/events-backend-module-gitlab/src/router/GitlabEventRouter.ts index 23b0389b55..52ea80424f 100644 --- a/plugins/events-backend-module-gitlab/src/router/GitlabEventRouter.ts +++ b/plugins/events-backend-module-gitlab/src/router/GitlabEventRouter.ts @@ -40,9 +40,15 @@ export class GitlabEventRouter extends SubTopicEventRouter { } protected determineSubTopic(params: EventParams): string | undefined { - if ('event_name' in (params.eventPayload as object)) { - const payload = params.eventPayload as { event_name: string }; - return payload.event_name; + if ( + 'object_kind' in (params.eventPayload as object) || + 'event_name' in (params.eventPayload as object) + ) { + const payload = params.eventPayload as { + event_name?: string; + object_kind?: string; + }; + return payload.object_kind || payload.event_name; } return undefined; From a820df1cddfc9791e2c8e1c586b1fa988683ffda Mon Sep 17 00:00:00 2001 From: msimoes Date: Fri, 28 Mar 2025 16:19:25 +0000 Subject: [PATCH 06/61] Added missing changeset required the the Pull Request Signed-off-by: msimoes Signed-off-by: msimoes --- .changeset/huge-olives-do.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/huge-olives-do.md diff --git a/.changeset/huge-olives-do.md b/.changeset/huge-olives-do.md new file mode 100644 index 0000000000..61eb37559f --- /dev/null +++ b/.changeset/huge-olives-do.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-events-backend-module-gitlab': patch +--- + +Adds support for `object_kind` field with priority over `event_name` on Gitlab webhook event types From e8d9c49159d35a32d9a0fbb51aafd1524db5685d Mon Sep 17 00:00:00 2001 From: Peter Macdonald Date: Sat, 12 Apr 2025 15:28:28 +0200 Subject: [PATCH 07/61] docs: add a small section to the CONTRIBUTING guide on how to contribute docs, acts as a small intro which can be built on if need be Signed-off-by: Peter Macdonald --- CONTRIBUTING.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bc67fba8c6..105d64e418 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,6 +17,7 @@ If you need help, just jump into our [Discord chatroom](https://discord.gg/backs - [Accessibility](#accessibility) - [Get Started!](#get-started) - [Coding Guidelines](#coding-guidelines) +- [Contributing Docs](#contributing-docs) - [Package Scripts](#package-scripts) - [Local configuration](#local-configuration) - [Creating Changesets](#creating-changesets) @@ -117,6 +118,20 @@ If there are any updates in `markdown` file please make sure to run `yarn run li The Backstage development environment does not require any specific editor, but it is intended to be used with one that has built-in linting and type-checking. The development server does not include any checks by default, but they can be enabled using the `--check` flag. Note that using the flag may consume more system resources and slow things down. +## Contributing Docs + +Contributing to the docs is one of the best ways to start getting involved with Backstage. The documentation site is often the first stop for anyone using or exploring Backstage, so even small improvements can have a big impact! + +To help your changes get reviewed and merged smoothly, please keep the following in mind: + +- Try to group related updates into a single pull request. For example, if you notice missing admonitions or outdated information in a section, feel free to update all of it together. This makes it easier for maintainers to review your contribution in context. + +- We really appreciate contributions that improve clarity or fix outdated information. That said, we generally don’t accept changes that are purely stylistic (e.g., rewording a sentence just to tweak the tone or phrasing). If something is **unclear**, **confusing**, or **factually inaccurate**, those are great opportunities to help! + +Ready to get started? You can find all the documentation files in the [docs](docs) directory! If you have any questions or need help, feel free to reach out in the [Backstage Discord Docs Channel](https://discord.com/channels/687207715902193673/687994765559463940) + +Thank you in advance for your contributions! We really appreciate it. 🙏 + ## Package Scripts There are many commands to be found in the root [package.json](https://github.com/backstage/backstage/blob/master/package.json), here are some useful ones: From 43f061eb734f8be27cf83fdf9fa9956b4840379e Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Sun, 13 Apr 2025 18:13:10 -0400 Subject: [PATCH 08/61] fix: clear all generated files during docsite generation Signed-off-by: aramissennyeydd --- .github/workflows/deploy_microsite.yml | 7 ++----- .github/workflows/verify_microsite.yml | 7 ++----- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/.github/workflows/deploy_microsite.yml b/.github/workflows/deploy_microsite.yml index 28444cecfc..72b133cb26 100644 --- a/.github/workflows/deploy_microsite.yml +++ b/.github/workflows/deploy_microsite.yml @@ -231,11 +231,8 @@ jobs: run: yarn docusaurus docs:version stable working-directory: microsite - - name: clear API reference - run: rm -r docs/reference - - - name: clear OpenAPI reference - run: find ./docs -name '*.api.mdx' -type f -delete + - name: clear generated docs + run: git clean -fd docs/ # Next docs - name: checkout master diff --git a/.github/workflows/verify_microsite.yml b/.github/workflows/verify_microsite.yml index 88c1bbc299..c590d53caf 100644 --- a/.github/workflows/verify_microsite.yml +++ b/.github/workflows/verify_microsite.yml @@ -242,11 +242,8 @@ jobs: run: yarn docusaurus docs:version stable working-directory: microsite - - name: clear API reference - run: rm -r docs/reference - - - name: clear OpenAPI reference - run: find ./docs -name '*.api.mdx' -type f -delete + - name: clear generated docs + run: git clean -fd docs/ - name: build API reference run: yarn build:api-docs From 1fde5767c2653e169e8a85537cc933835b91c81f Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Sun, 13 Apr 2025 18:15:01 -0400 Subject: [PATCH 09/61] verify empty Signed-off-by: aramissennyeydd --- .github/workflows/verify_microsite.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/verify_microsite.yml b/.github/workflows/verify_microsite.yml index c590d53caf..8ce0a5d9e9 100644 --- a/.github/workflows/verify_microsite.yml +++ b/.github/workflows/verify_microsite.yml @@ -245,6 +245,9 @@ jobs: - name: clear generated docs run: git clean -fd docs/ + - name: print directry contents + run: ls docs/reference + - name: build API reference run: yarn build:api-docs From dd6b147454a6b4b6fbe42845a876504291b11d88 Mon Sep 17 00:00:00 2001 From: Peter Macdonald Date: Mon, 14 Apr 2025 13:31:46 +0200 Subject: [PATCH 10/61] fix: update the headings, add small reference from the contrib section of the docs back to the section in CONTRIBUTING.md Signed-off-by: Peter Macdonald --- CONTRIBUTING.md | 4 ++-- docs/contribute/getting-involved.md | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 105d64e418..6a91fc4196 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,7 +17,7 @@ If you need help, just jump into our [Discord chatroom](https://discord.gg/backs - [Accessibility](#accessibility) - [Get Started!](#get-started) - [Coding Guidelines](#coding-guidelines) -- [Contributing Docs](#contributing-docs) +- [Documentation Guidelines](#documentation-guidelines) - [Package Scripts](#package-scripts) - [Local configuration](#local-configuration) - [Creating Changesets](#creating-changesets) @@ -118,7 +118,7 @@ If there are any updates in `markdown` file please make sure to run `yarn run li The Backstage development environment does not require any specific editor, but it is intended to be used with one that has built-in linting and type-checking. The development server does not include any checks by default, but they can be enabled using the `--check` flag. Note that using the flag may consume more system resources and slow things down. -## Contributing Docs +## Documentation Guidelines Contributing to the docs is one of the best ways to start getting involved with Backstage. The documentation site is often the first stop for anyone using or exploring Backstage, so even small improvements can have a big impact! diff --git a/docs/contribute/getting-involved.md b/docs/contribute/getting-involved.md index c11e870752..4b8c4dfc6f 100644 --- a/docs/contribute/getting-involved.md +++ b/docs/contribute/getting-involved.md @@ -43,6 +43,8 @@ submitting them. You'll find the website sources under [/microsite](https://gith with instructions for building and locally serving the website in the [README](/microsite#readme). +For additional information and helpful guidelines on how to contribute to the documentation, check out these [Documentation Guidelines](https://github.com/backstage/backstage/blob/master/CONTRIBUTING.md#documentation-guidelines)! + ### Contribute to Storybook We think the best way to ensure different plugins provide a consistent experience is through a solid set of reusable UI/UX components. Backstage uses [Storybook](http://backstage.io/storybook). From ee3823d22b99abae395420e4a3c040d06f54e560 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Mon, 14 Apr 2025 09:18:50 -0400 Subject: [PATCH 11/61] remove build output Signed-off-by: aramissennyeydd --- .github/workflows/deploy_microsite.yml | 2 +- .github/workflows/verify_microsite.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy_microsite.yml b/.github/workflows/deploy_microsite.yml index 72b133cb26..ff49b94e56 100644 --- a/.github/workflows/deploy_microsite.yml +++ b/.github/workflows/deploy_microsite.yml @@ -232,7 +232,7 @@ jobs: working-directory: microsite - name: clear generated docs - run: git clean -fd docs/ + run: git clean -fdx docs/ # Next docs - name: checkout master diff --git a/.github/workflows/verify_microsite.yml b/.github/workflows/verify_microsite.yml index 8ce0a5d9e9..068cdbd46d 100644 --- a/.github/workflows/verify_microsite.yml +++ b/.github/workflows/verify_microsite.yml @@ -243,7 +243,7 @@ jobs: working-directory: microsite - name: clear generated docs - run: git clean -fd docs/ + run: git clean -fdx docs/ - name: print directry contents run: ls docs/reference From bc17a29cd82d94784bd7fb5812348e04a6351070 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 08:16:55 +0000 Subject: [PATCH 12/61] fix(deps): update dependency http-proxy-middleware to v2.0.9 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 6d3a9921ec..2ecd7fcf72 100644 --- a/yarn.lock +++ b/yarn.lock @@ -32136,8 +32136,8 @@ __metadata: linkType: hard "http-proxy-middleware@npm:^2.0.0, http-proxy-middleware@npm:^2.0.6, http-proxy-middleware@npm:^2.0.7": - version: 2.0.7 - resolution: "http-proxy-middleware@npm:2.0.7" + version: 2.0.9 + resolution: "http-proxy-middleware@npm:2.0.9" dependencies: "@types/http-proxy": "npm:^1.17.8" http-proxy: "npm:^1.18.1" @@ -32149,7 +32149,7 @@ __metadata: peerDependenciesMeta: "@types/express": optional: true - checksum: 10/4a51bf612b752ad945701995c1c029e9501c97e7224c0cf3f8bf6d48d172d6a8f2b57c20fec469534fdcac3aa8a6f332224a33c6b0d7f387aa2cfff9b67216fd + checksum: 10/4ece416a91d52e96f8136c5f4abfbf7ac2f39becbad21fa8b158a12d7e7d8f808287ff1ae342b903fd1f15f2249dee87fabc09e1f0e73106b83331c496d67660 languageName: node linkType: hard From 962272b2d7a256ecf3a9d48d2df24fe78b864e63 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 09:05:48 +0000 Subject: [PATCH 13/61] fix(deps): update dependency pg to v8.14.1 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 adf18bef85..f73c2e330d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -39949,8 +39949,8 @@ __metadata: linkType: hard "pg@npm:^8.11.3, pg@npm:^8.9.0": - version: 8.14.0 - resolution: "pg@npm:8.14.0" + version: 8.14.1 + resolution: "pg@npm:8.14.1" dependencies: pg-cloudflare: "npm:^1.1.1" pg-connection-string: "npm:^2.7.0" @@ -39966,7 +39966,7 @@ __metadata: peerDependenciesMeta: pg-native: optional: true - checksum: 10/3d2d962a117195963d3b1564ed5a4963a7bb427e1d98c805ffcc3eb0142769ec69c5d91d19dab995d34b8b0aebce8079da55309c39298b531c42128ba6aac4d9 + checksum: 10/45f2d5719fd74a6a4784c5115c0ff482af92d1e5b101bf423160b6a983e37cc2fad4a7eea2a06f27e6f8bdb8abce23486d2d522c8c52c90f68a2bc897f0553c4 languageName: node linkType: hard From 68d7aad8c26e5b05c75e2f78bd2e3a0255cc8bb5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 09:06:17 +0000 Subject: [PATCH 14/61] fix(deps): update dependency pirates to v4.0.7 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 adf18bef85..9b3ecaed6b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -40108,9 +40108,9 @@ __metadata: linkType: hard "pirates@npm:^4.0.1, pirates@npm:^4.0.4, pirates@npm:^4.0.6": - version: 4.0.6 - resolution: "pirates@npm:4.0.6" - checksum: 10/d02dda76f4fec1cbdf395c36c11cf26f76a644f9f9a1bfa84d3167d0d3154d5289aacc72677aa20d599bb4a6937a471de1b65c995e2aea2d8687cbcd7e43ea5f + version: 4.0.7 + resolution: "pirates@npm:4.0.7" + checksum: 10/2427f371366081ae42feb58214f04805d6b41d6b84d74480ebcc9e0ddbd7105a139f7c653daeaf83ad8a1a77214cf07f64178e76de048128fec501eab3305a96 languageName: node linkType: hard From 7ee394f2d1fd0bf5ac86aed7ba29691b4155cb96 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 10:14:16 +0000 Subject: [PATCH 15/61] chore(deps): update dependency @rspack/core to v1.3.5 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 88 +++++++++++++++++++++++++++---------------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/yarn.lock b/yarn.lock index adf18bef85..e2735b617b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16376,82 +16376,82 @@ __metadata: languageName: node linkType: hard -"@rspack/binding-darwin-arm64@npm:1.3.4": - version: 1.3.4 - resolution: "@rspack/binding-darwin-arm64@npm:1.3.4" +"@rspack/binding-darwin-arm64@npm:1.3.5": + version: 1.3.5 + resolution: "@rspack/binding-darwin-arm64@npm:1.3.5" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rspack/binding-darwin-x64@npm:1.3.4": - version: 1.3.4 - resolution: "@rspack/binding-darwin-x64@npm:1.3.4" +"@rspack/binding-darwin-x64@npm:1.3.5": + version: 1.3.5 + resolution: "@rspack/binding-darwin-x64@npm:1.3.5" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rspack/binding-linux-arm64-gnu@npm:1.3.4": - version: 1.3.4 - resolution: "@rspack/binding-linux-arm64-gnu@npm:1.3.4" +"@rspack/binding-linux-arm64-gnu@npm:1.3.5": + version: 1.3.5 + resolution: "@rspack/binding-linux-arm64-gnu@npm:1.3.5" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rspack/binding-linux-arm64-musl@npm:1.3.4": - version: 1.3.4 - resolution: "@rspack/binding-linux-arm64-musl@npm:1.3.4" +"@rspack/binding-linux-arm64-musl@npm:1.3.5": + version: 1.3.5 + resolution: "@rspack/binding-linux-arm64-musl@npm:1.3.5" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rspack/binding-linux-x64-gnu@npm:1.3.4": - version: 1.3.4 - resolution: "@rspack/binding-linux-x64-gnu@npm:1.3.4" +"@rspack/binding-linux-x64-gnu@npm:1.3.5": + version: 1.3.5 + resolution: "@rspack/binding-linux-x64-gnu@npm:1.3.5" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rspack/binding-linux-x64-musl@npm:1.3.4": - version: 1.3.4 - resolution: "@rspack/binding-linux-x64-musl@npm:1.3.4" +"@rspack/binding-linux-x64-musl@npm:1.3.5": + version: 1.3.5 + resolution: "@rspack/binding-linux-x64-musl@npm:1.3.5" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rspack/binding-win32-arm64-msvc@npm:1.3.4": - version: 1.3.4 - resolution: "@rspack/binding-win32-arm64-msvc@npm:1.3.4" +"@rspack/binding-win32-arm64-msvc@npm:1.3.5": + version: 1.3.5 + resolution: "@rspack/binding-win32-arm64-msvc@npm:1.3.5" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rspack/binding-win32-ia32-msvc@npm:1.3.4": - version: 1.3.4 - resolution: "@rspack/binding-win32-ia32-msvc@npm:1.3.4" +"@rspack/binding-win32-ia32-msvc@npm:1.3.5": + version: 1.3.5 + resolution: "@rspack/binding-win32-ia32-msvc@npm:1.3.5" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rspack/binding-win32-x64-msvc@npm:1.3.4": - version: 1.3.4 - resolution: "@rspack/binding-win32-x64-msvc@npm:1.3.4" +"@rspack/binding-win32-x64-msvc@npm:1.3.5": + version: 1.3.5 + resolution: "@rspack/binding-win32-x64-msvc@npm:1.3.5" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@rspack/binding@npm:1.3.4": - version: 1.3.4 - resolution: "@rspack/binding@npm:1.3.4" +"@rspack/binding@npm:1.3.5": + version: 1.3.5 + resolution: "@rspack/binding@npm:1.3.5" dependencies: - "@rspack/binding-darwin-arm64": "npm:1.3.4" - "@rspack/binding-darwin-x64": "npm:1.3.4" - "@rspack/binding-linux-arm64-gnu": "npm:1.3.4" - "@rspack/binding-linux-arm64-musl": "npm:1.3.4" - "@rspack/binding-linux-x64-gnu": "npm:1.3.4" - "@rspack/binding-linux-x64-musl": "npm:1.3.4" - "@rspack/binding-win32-arm64-msvc": "npm:1.3.4" - "@rspack/binding-win32-ia32-msvc": "npm:1.3.4" - "@rspack/binding-win32-x64-msvc": "npm:1.3.4" + "@rspack/binding-darwin-arm64": "npm:1.3.5" + "@rspack/binding-darwin-x64": "npm:1.3.5" + "@rspack/binding-linux-arm64-gnu": "npm:1.3.5" + "@rspack/binding-linux-arm64-musl": "npm:1.3.5" + "@rspack/binding-linux-x64-gnu": "npm:1.3.5" + "@rspack/binding-linux-x64-musl": "npm:1.3.5" + "@rspack/binding-win32-arm64-msvc": "npm:1.3.5" + "@rspack/binding-win32-ia32-msvc": "npm:1.3.5" + "@rspack/binding-win32-x64-msvc": "npm:1.3.5" dependenciesMeta: "@rspack/binding-darwin-arm64": optional: true @@ -16471,16 +16471,16 @@ __metadata: optional: true "@rspack/binding-win32-x64-msvc": optional: true - checksum: 10/deceedf77d63a568c06ec3c4021a2c113013f7cab97662c1bc276938361262432df3e506735c9a88392e2e4faf1eecdb188a24aa6d1171de53b30d6efa280de4 + checksum: 10/b942a4994326423f305dfed09284387d6d293392025e7afd695a571c54eaac9baeadbe020748df9446505b32d0c572de93a15420a723ca5974e47ac4fbb2f124 languageName: node linkType: hard "@rspack/core@npm:^1.0.10": - version: 1.3.4 - resolution: "@rspack/core@npm:1.3.4" + version: 1.3.5 + resolution: "@rspack/core@npm:1.3.5" dependencies: "@module-federation/runtime-tools": "npm:0.11.2" - "@rspack/binding": "npm:1.3.4" + "@rspack/binding": "npm:1.3.5" "@rspack/lite-tapable": "npm:1.0.1" caniuse-lite: "npm:^1.0.30001707" peerDependencies: @@ -16491,7 +16491,7 @@ __metadata: optional: true "@swc/helpers": optional: true - checksum: 10/8f6f2b5e5c94026dd6d80b30844d9156cc9f1b0672251e65c30e00482a4e2d94fbc331cc5ca880a50157268eb869c53149ad5e042fd1d1d5a7bac5ae4b6e4cc2 + checksum: 10/6019c88db1aa0e53f80a36c24c20c73ebe0604bc90055f0e1bf2b3d57cd0c3f0f830395673f18783961cd33fff2a55489ac8196dbeb216b867e9a346e56b97a8 languageName: node linkType: hard From 3bca0541e0b1aea6b4b41e3a663f0663a2a48803 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 10:15:22 +0000 Subject: [PATCH 16/61] fix(deps): update dependency portfinder to v1.0.36 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 adf18bef85..fcdf9e0a17 100644 --- a/yarn.lock +++ b/yarn.lock @@ -40242,12 +40242,12 @@ __metadata: linkType: hard "portfinder@npm:^1.0.28, portfinder@npm:^1.0.32": - version: 1.0.35 - resolution: "portfinder@npm:1.0.35" + version: 1.0.36 + resolution: "portfinder@npm:1.0.36" dependencies: async: "npm:^3.2.6" debug: "npm:^4.3.6" - checksum: 10/16457d54f66e6794807cf10821e440d33cb3d688ed0de7f5d365cd5b7c6902fe91f42f530c2899b1c7660346cd16e636df3240d7737510fd0a9a6e1deb70b38d + checksum: 10/2f70c1090dd8fa1c5db36add08d416f56455ec57600c245ca5f19cf034a10357c603f89db63a34d52f07fcedc7d8b2c7d12a4bb04458b1c57850e50f557aadcb languageName: node linkType: hard From dbb6f5add4b98cd80f788119512f3f3df90c6476 Mon Sep 17 00:00:00 2001 From: Charles de Dreuille Date: Tue, 15 Apr 2025 12:15:59 +0200 Subject: [PATCH 17/61] Add release notes for Canon 0.3.0 Signed-off-by: Charles de Dreuille --- canon-docs/src/app/(docs)/releases/page.mdx | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/canon-docs/src/app/(docs)/releases/page.mdx b/canon-docs/src/app/(docs)/releases/page.mdx index 5fc22cd6b4..d3a916586b 100644 --- a/canon-docs/src/app/(docs)/releases/page.mdx +++ b/canon-docs/src/app/(docs)/releases/page.mdx @@ -1,5 +1,32 @@ # Releases +## Version 0.3.0 + +### Main updates + +- Add `DataTable` component - ([#29484](https://github.com/backstage/backstage/pull/29484), [#29603](https://github.com/backstage/backstage/pull/29603)) +- Add `Select` component - ([#29440](https://github.com/backstage/backstage/pull/29440)) +- Add `Avatar` component - ([#29594](https://github.com/backstage/backstage/pull/29594)) +- Add `TextField` component instead of `Field` + `Input` - ([#29364](https://github.com/backstage/backstage/pull/29364)) +- Add `TableCellProfile` - ([#29600](https://github.com/backstage/backstage/pull/29600)) +- Add breakpoint hooks - `up()` and `down()` - ([#29564](https://github.com/backstage/backstage/pull/29564)) +- Add gray scale css tokens - ([#29543](https://github.com/backstage/backstage/pull/29543)) +- Update CSS styling API using `[data-___]` instead of class names for props - ([#29560](https://github.com/backstage/backstage/pull/29560)) +- Update `Checkbox` dark mode - ([#29544](https://github.com/backstage/backstage/pull/29544)) +- Update `Container` styles - ([#29475](https://github.com/backstage/backstage/pull/29475)) +- Update `Menu` styles - ([#29351](https://github.com/backstage/backstage/pull/29351)) +- Fix `Select` styles on small sizes + with long option names - ([#29545](https://github.com/backstage/backstage/pull/29545)) +- Fix render prop on `Link` - ([#29247](https://github.com/backstage/backstage/pull/29247)) +- Remove `Field` from `TextField` + `Select` - ([#29482](https://github.com/backstage/backstage/pull/29482)) +- Update `textDecoration` to `none` on `Text` / `Heading` - ([#29357](https://github.com/backstage/backstage/pull/29357)) + +### Notable fixes + +- Docs - Use stories from Storybook for all examples in Nextjs - ([#29306](https://github.com/backstage/backstage/pull/29306)) +- Docs - Add release page (this one 🤗) - ([#29461](https://github.com/backstage/backstage/pull/29461)) +- Docs - Add docs for Menu, Link - ([#29576](https://github.com/backstage/backstage/pull/29576)) +- Fix CSS watch mode - ([#29352](https://github.com/backstage/backstage/pull/29352)) + ## Version 0.2.0 ### Main updates From 409fb0834e4ccdc418b7d14886fe9d44e18e1e2b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 12:47:37 +0000 Subject: [PATCH 18/61] fix(deps): update dependency react-virtualized-auto-sizer to v1.0.26 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 51ea601bbf..0c5f47c0f5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -42223,12 +42223,12 @@ __metadata: linkType: hard "react-virtualized-auto-sizer@npm:^1.0.11": - version: 1.0.25 - resolution: "react-virtualized-auto-sizer@npm:1.0.25" + version: 1.0.26 + resolution: "react-virtualized-auto-sizer@npm:1.0.26" peerDependencies: react: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0 - checksum: 10/43678a904019f0413a3c649b5b64ea51263283120c991b285077b5075cf2ea564571f6d48b3a396b588d500d45820d1c98989cb7091e2a009e73e4faa7da9d20 + checksum: 10/8f8127369fb3ae1a49987a1e7d2d136f379b71d1b031a4c169389274946eca0248e3fb9130aa8a7ebe82f4ca8aaab58c37252398f8f6220a6eafaa78b8464b6b languageName: node linkType: hard From 57221d9148a1351a63c0858b5f9cf69c7494b1d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 15 Apr 2025 21:24:10 +0200 Subject: [PATCH 19/61] initial removal of all exports MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/new-hands-scream.md | 7 + packages/backend-legacy/package.json | 1 - packages/backend-legacy/src/index.ts | 3 - packages/backend-legacy/src/plugins/auth.ts | 146 ----- plugins/auth-backend/report.api.md | 666 -------------------- plugins/auth-backend/src/index.ts | 14 - yarn.lock | 1 - 7 files changed, 7 insertions(+), 831 deletions(-) create mode 100644 .changeset/new-hands-scream.md delete mode 100644 packages/backend-legacy/src/plugins/auth.ts diff --git a/.changeset/new-hands-scream.md b/.changeset/new-hands-scream.md new file mode 100644 index 0000000000..c5874787e4 --- /dev/null +++ b/.changeset/new-hands-scream.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-auth-backend': major +--- + +**BREAKING**: Removed support for the old backend system, and removed all deprecated exports. + +If you were using one of the deprecated imports from this package, you will have to follow the instructions in their respective deprecation notices before upgrading. Most of the general utilities are available from `@backstage/plugin-auth-node`, and the specific auth providers are available from dedicated packages such as for example `@backstage/plugin-auth-backend-module-github-provider`. See [the auth docs](https://backstage.io/docs/auth/) for specific instructions. diff --git a/packages/backend-legacy/package.json b/packages/backend-legacy/package.json index b39c1192b7..a5a05f05ac 100644 --- a/packages/backend-legacy/package.json +++ b/packages/backend-legacy/package.json @@ -35,7 +35,6 @@ "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/integration": "workspace:^", - "@backstage/plugin-auth-backend": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^", diff --git a/packages/backend-legacy/src/index.ts b/packages/backend-legacy/src/index.ts index 0ff6c08f84..1f66616520 100644 --- a/packages/backend-legacy/src/index.ts +++ b/packages/backend-legacy/src/index.ts @@ -38,7 +38,6 @@ import { import { Config } from '@backstage/config'; import healthcheck from './plugins/healthcheck'; import { metricsHandler, metricsInit } from './metrics'; -import authPlugin from './plugins/auth'; import catalog from './plugins/catalog'; import events from './plugins/events'; import kubernetes from './plugins/kubernetes'; @@ -125,7 +124,6 @@ async function main() { const healthcheckEnv = useHotMemoize(module, () => createEnv('healthcheck')); const catalogEnv = useHotMemoize(module, () => createEnv('catalog')); const scaffolderEnv = useHotMemoize(module, () => createEnv('scaffolder')); - const authEnv = useHotMemoize(module, () => createEnv('auth')); const kubernetesEnv = useHotMemoize(module, () => createEnv('kubernetes')); const permissionEnv = useHotMemoize(module, () => createEnv('permission')); const eventsEnv = useHotMemoize(module, () => createEnv('events')); @@ -134,7 +132,6 @@ async function main() { apiRouter.use('/catalog', await catalog(catalogEnv)); apiRouter.use('/events', await events(eventsEnv)); apiRouter.use('/scaffolder', await scaffolder(scaffolderEnv)); - apiRouter.use('/auth', await authPlugin(authEnv)); apiRouter.use('/kubernetes', await kubernetes(kubernetesEnv)); apiRouter.use('/permission', await permission(permissionEnv)); apiRouter.use(notFoundHandler()); diff --git a/packages/backend-legacy/src/plugins/auth.ts b/packages/backend-legacy/src/plugins/auth.ts deleted file mode 100644 index 0d92315f92..0000000000 --- a/packages/backend-legacy/src/plugins/auth.ts +++ /dev/null @@ -1,146 +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 { - DEFAULT_NAMESPACE, - stringifyEntityRef, -} from '@backstage/catalog-model'; -import { - createRouter, - providers, - defaultAuthProviderFactories, -} from '@backstage/plugin-auth-backend'; -import { Router } from 'express'; -import { PluginEnvironment } from '../types'; - -export default async function createPlugin( - env: PluginEnvironment, -): Promise { - return await createRouter({ - logger: env.logger, - config: env.config, - database: env.database, - discovery: env.discovery, - tokenManager: env.tokenManager, - providerFactories: { - ...defaultAuthProviderFactories, - - // NOTE: DO NOT add this many resolvers in your own instance! - // It is important that each real user always gets resolved to - // the same sign-in identity. The code below will not do that. - // It is here for demo purposes only. - github: providers.github.create({ - signIn: { - async resolver({ result: { fullProfile } }, ctx) { - const userId = fullProfile.username; - if (!userId) { - throw new Error( - `GitHub user profile does not contain a username`, - ); - } - - const userEntityRef = stringifyEntityRef({ - kind: 'User', - name: userId, - namespace: DEFAULT_NAMESPACE, - }); - - return ctx.issueToken({ - claims: { - sub: userEntityRef, - ent: [userEntityRef], - }, - }); - }, - }, - }), - gitlab: providers.gitlab.create({ - signIn: { - async resolver({ result: { fullProfile } }, ctx) { - return ctx.signInWithCatalogUser({ - entityRef: { - name: fullProfile.id, - }, - }); - }, - }, - }), - microsoft: providers.microsoft.create({ - signIn: { - resolver: - providers.microsoft.resolvers.emailMatchingUserEntityAnnotation(), - }, - }), - google: providers.google.create({ - signIn: { - resolver: - providers.google.resolvers.emailLocalPartMatchingUserEntityName(), - }, - }), - okta: providers.okta.create({ - signIn: { - resolver: - providers.okta.resolvers.emailMatchingUserEntityAnnotation(), - }, - }), - bitbucket: providers.bitbucket.create({ - signIn: { - resolver: - providers.bitbucket.resolvers.usernameMatchingUserEntityAnnotation(), - }, - }), - onelogin: providers.onelogin.create({ - signIn: { - async resolver({ result: { fullProfile } }, ctx) { - return ctx.signInWithCatalogUser({ - entityRef: { - name: fullProfile.id, - }, - }); - }, - }, - }), - - bitbucketServer: providers.bitbucketServer.create({ - signIn: { - resolver: - providers.bitbucketServer.resolvers.emailMatchingUserEntityProfileEmail(), - }, - }), - - // This is an example of how to configure the OAuth2Proxy provider as well - // as how to sign a user in without a matching user entity in the catalog. - // You can try it out using `` - myproxy: providers.oauth2Proxy.create({ - signIn: { - async resolver({ result }, ctx) { - const entityRef = stringifyEntityRef({ - kind: 'user', - namespace: DEFAULT_NAMESPACE, - name: result.getHeader('x-forwarded-user')!, - }); - return ctx.issueToken({ - claims: { - sub: entityRef, - ent: [entityRef], - }, - }); - }, - }, - }), - }, - }); -} diff --git a/plugins/auth-backend/report.api.md b/plugins/auth-backend/report.api.md index fb35ea2905..127961d664 100644 --- a/plugins/auth-backend/report.api.md +++ b/plugins/auth-backend/report.api.md @@ -3,675 +3,9 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { AuthOwnershipResolver } from '@backstage/plugin-auth-node'; -import { AuthProviderConfig as AuthProviderConfig_2 } from '@backstage/plugin-auth-node'; -import { AuthProviderFactory as AuthProviderFactory_2 } from '@backstage/plugin-auth-node'; -import { AuthProviderRouteHandlers as AuthProviderRouteHandlers_2 } from '@backstage/plugin-auth-node'; -import { AuthResolverCatalogUserQuery as AuthResolverCatalogUserQuery_2 } from '@backstage/plugin-auth-node'; -import { AuthResolverContext as AuthResolverContext_2 } from '@backstage/plugin-auth-node'; -import { AuthService } from '@backstage/backend-plugin-api'; -import { AwsAlbResult as AwsAlbResult_2 } from '@backstage/plugin-auth-backend-module-aws-alb-provider'; -import { AzureEasyAuthResult } from '@backstage/plugin-auth-backend-module-azure-easyauth-provider'; import { BackendFeature } from '@backstage/backend-plugin-api'; -import { BackstageSignInResult } from '@backstage/plugin-auth-node'; -import { CacheService } from '@backstage/backend-plugin-api'; -import { CatalogApi } from '@backstage/catalog-client'; -import { ClientAuthResponse } from '@backstage/plugin-auth-node'; -import { cloudflareAccessSignInResolvers } from '@backstage/plugin-auth-backend-module-cloudflare-access-provider'; -import { Config } from '@backstage/config'; -import { CookieConfigurer as CookieConfigurer_2 } from '@backstage/plugin-auth-node'; -import { DatabaseService } from '@backstage/backend-plugin-api'; -import { decodeOAuthState } from '@backstage/plugin-auth-node'; -import { DiscoveryService } from '@backstage/backend-plugin-api'; -import { encodeOAuthState } from '@backstage/plugin-auth-node'; -import { Entity } from '@backstage/catalog-model'; -import express from 'express'; -import { GcpIapResult as GcpIapResult_2 } from '@backstage/plugin-auth-backend-module-gcp-iap-provider'; -import { GcpIapTokenInfo as GcpIapTokenInfo_2 } from '@backstage/plugin-auth-backend-module-gcp-iap-provider'; -import { HttpAuthService } from '@backstage/backend-plugin-api'; -import { LoggerService } from '@backstage/backend-plugin-api'; -import { OAuth2ProxyResult as OAuth2ProxyResult_2 } from '@backstage/plugin-auth-backend-module-oauth2-proxy-provider'; -import { OAuthEnvironmentHandler as OAuthEnvironmentHandler_2 } from '@backstage/plugin-auth-node'; -import { OAuthState as OAuthState_2 } from '@backstage/plugin-auth-node'; -import { OidcAuthResult as OidcAuthResult_2 } from '@backstage/plugin-auth-backend-module-oidc-provider'; -import { prepareBackstageIdentityResponse as prepareBackstageIdentityResponse_2 } from '@backstage/plugin-auth-node'; -import { Profile } from 'passport'; -import { ProfileInfo as ProfileInfo_2 } from '@backstage/plugin-auth-node'; -import { RootConfigService } from '@backstage/backend-plugin-api'; -import { SignInInfo as SignInInfo_2 } from '@backstage/plugin-auth-node'; -import { SignInResolver as SignInResolver_2 } from '@backstage/plugin-auth-node'; -import { TokenManager } from '@backstage/backend-common'; -import { TokenParams as TokenParams_2 } from '@backstage/plugin-auth-node'; -import { UserEntity } from '@backstage/catalog-model'; -import { WebMessageResponse as WebMessageResponse_2 } from '@backstage/plugin-auth-node'; - -// @public @deprecated -export type AuthHandler = ( - input: TAuthResult, - context: AuthResolverContext_2, -) => Promise; - -// @public @deprecated -export type AuthHandlerResult = { - profile: ProfileInfo_2; -}; // @public const authPlugin: BackendFeature; export default authPlugin; - -// @public @deprecated (undocumented) -export type AuthProviderConfig = AuthProviderConfig_2; - -// @public @deprecated (undocumented) -export type AuthProviderFactory = AuthProviderFactory_2; - -// @public @deprecated (undocumented) -export type AuthProviderRouteHandlers = AuthProviderRouteHandlers_2; - -// @public @deprecated (undocumented) -export type AuthResolverCatalogUserQuery = AuthResolverCatalogUserQuery_2; - -// @public @deprecated (undocumented) -export type AuthResolverContext = AuthResolverContext_2; - -// @public @deprecated (undocumented) -export type AuthResponse = ClientAuthResponse; - -// @public @deprecated -export type AwsAlbResult = AwsAlbResult_2; - -// @public @deprecated (undocumented) -export type BitbucketOAuthResult = { - fullProfile: BitbucketPassportProfile; - params: { - id_token?: string; - scope: string; - expires_in: number; - }; - accessToken: string; - refreshToken?: string; -}; - -// @public @deprecated (undocumented) -export type BitbucketPassportProfile = Profile & { - id?: string; - displayName?: string; - username?: string; - avatarUrl?: string; - _json?: { - links?: { - avatar?: { - href?: string; - }; - }; - }; -}; - -// @public @deprecated (undocumented) -export type BitbucketServerOAuthResult = { - fullProfile: Profile; - params: { - scope: string; - access_token?: string; - token_type?: string; - expires_in?: number; - }; - accessToken: string; - refreshToken?: string; -}; - -// @public @deprecated -export class CatalogIdentityClient { - constructor(options: { - catalogApi: CatalogApi; - tokenManager?: TokenManager; - discovery: DiscoveryService; - auth?: AuthService; - httpAuth?: HttpAuthService; - }); - findUser(query: { annotations: Record }): Promise; - resolveCatalogMembership(query: { - entityRefs: string[]; - logger?: LoggerService; - }): Promise; -} - -// @public @deprecated -export type CloudflareAccessClaims = { - aud: string[]; - email: string; - exp: number; - iat: number; - nonce: string; - identity_nonce: string; - sub: string; - iss: string; - custom: string; -}; - -// @public @deprecated -export type CloudflareAccessGroup = { - id: string; - name: string; - email: string; -}; - -// @public @deprecated -export type CloudflareAccessIdentityProfile = { - id: string; - name: string; - email: string; - groups: CloudflareAccessGroup[]; -}; - -// @public @deprecated (undocumented) -export type CloudflareAccessResult = { - claims: CloudflareAccessClaims; - cfIdentity: CloudflareAccessIdentityProfile; - expiresInSeconds?: number; - token: string; -}; - -// @public @deprecated (undocumented) -export type CookieConfigurer = CookieConfigurer_2; - -// @public @deprecated -export function createAuthProviderIntegration< - TCreateOptions extends unknown[], - TResolvers extends { - [name in string]: (...args: any[]) => SignInResolver_2; - }, ->(config: { - create: (...args: TCreateOptions) => AuthProviderFactory_2; - resolvers?: TResolvers; -}): Readonly<{ - create: (...args: TCreateOptions) => AuthProviderFactory_2; - resolvers: Readonly; -}>; - -// @public @deprecated (undocumented) -export function createOriginFilter(config: Config): (origin: string) => boolean; - -// @public @deprecated (undocumented) -export function createRouter(options: RouterOptions): Promise; - -// @public @deprecated -export const defaultAuthProviderFactories: { - [providerId: string]: AuthProviderFactory_2; -}; - -// @public @deprecated (undocumented) -export type EasyAuthResult = AzureEasyAuthResult; - -// @public @deprecated (undocumented) -export const encodeState: typeof encodeOAuthState; - -// @public @deprecated (undocumented) -export const ensuresXRequestedWith: (req: express.Request) => boolean; - -// @public @deprecated -export type GcpIapResult = GcpIapResult_2; - -// @public @deprecated -export type GcpIapTokenInfo = GcpIapTokenInfo_2; - -// @public @deprecated -export function getDefaultOwnershipEntityRefs(entity: Entity): string[]; - -// @public @deprecated (undocumented) -export type GithubOAuthResult = { - fullProfile: Profile; - params: { - scope: string; - expires_in?: string; - refresh_token_expires_in?: string; - }; - accessToken: string; - refreshToken?: string; -}; - -// @public @deprecated (undocumented) -export type OAuth2ProxyResult = OAuth2ProxyResult_2; - -// @public @deprecated (undocumented) -export class OAuthAdapter implements AuthProviderRouteHandlers_2 { - constructor(handlers: OAuthHandlers, options: OAuthAdapterOptions); - // (undocumented) - frameHandler(req: express.Request, res: express.Response): Promise; - // (undocumented) - static fromConfig( - config: AuthProviderConfig_2, - handlers: OAuthHandlers, - options: Pick< - OAuthAdapterOptions, - 'providerId' | 'persistScopes' | 'callbackUrl' - >, - ): OAuthAdapter; - // (undocumented) - logout(req: express.Request, res: express.Response): Promise; - // (undocumented) - refresh(req: express.Request, res: express.Response): Promise; - // (undocumented) - start(req: express.Request, res: express.Response): Promise; -} - -// @public @deprecated (undocumented) -export type OAuthAdapterOptions = { - providerId: string; - persistScopes?: boolean; - appOrigin: string; - baseUrl: string; - cookieConfigurer: CookieConfigurer_2; - isOriginAllowed: (origin: string) => boolean; - callbackUrl: string; -}; - -// @public @deprecated (undocumented) -export const OAuthEnvironmentHandler: typeof OAuthEnvironmentHandler_2; - -// @public @deprecated (undocumented) -export interface OAuthHandlers { - handler(req: express.Request): Promise<{ - response: OAuthResponse; - refreshToken?: string; - }>; - logout?(req: OAuthLogoutRequest): Promise; - refresh?(req: OAuthRefreshRequest): Promise<{ - response: OAuthResponse; - refreshToken?: string; - }>; - start(req: OAuthStartRequest): Promise; -} - -// @public @deprecated (undocumented) -export type OAuthLogoutRequest = express.Request<{}> & { - refreshToken: string; -}; - -// @public @deprecated (undocumented) -export type OAuthProviderInfo = { - accessToken: string; - idToken?: string; - expiresInSeconds?: number; - scope: string; -}; - -// @public @deprecated -export type OAuthProviderOptions = { - clientId: string; - clientSecret: string; - callbackUrl: string; -}; - -// @public @deprecated (undocumented) -export type OAuthRefreshRequest = express.Request<{}> & { - scope: string; - refreshToken: string; -}; - -// @public @deprecated (undocumented) -export type OAuthResponse = { - profile: ProfileInfo_2; - providerInfo: OAuthProviderInfo; - backstageIdentity?: BackstageSignInResult; -}; - -// @public @deprecated (undocumented) -export type OAuthResult = { - fullProfile: Profile; - params: { - id_token?: string; - scope: string; - token_type?: string; - expires_in: number; - }; - accessToken: string; - refreshToken?: string; -}; - -// @public @deprecated (undocumented) -export type OAuthStartRequest = express.Request<{}> & { - scope: string; - state: OAuthState; -}; - -// @public @deprecated (undocumented) -export type OAuthStartResponse = { - url: string; - status?: number; -}; - -// @public @deprecated (undocumented) -export type OAuthState = OAuthState_2; - -// @public @deprecated (undocumented) -export type OidcAuthResult = OidcAuthResult_2; - -// @public @deprecated (undocumented) -export const postMessageResponse: ( - res: express.Response, - appOrigin: string, - response: WebMessageResponse, -) => void; - -// @public @deprecated (undocumented) -export const prepareBackstageIdentityResponse: typeof prepareBackstageIdentityResponse_2; - -// @public @deprecated (undocumented) -export type ProfileInfo = ProfileInfo_2; - -// @public @deprecated (undocumented) -export type ProviderFactories = { - [s: string]: AuthProviderFactory_2; -}; - -// @public @deprecated -export const providers: Readonly<{ - atlassian: Readonly<{ - create: ( - options?: - | { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver_2; - }; - } - | undefined, - ) => AuthProviderFactory_2; - resolvers: never; - }>; - auth0: Readonly<{ - create: ( - options?: - | { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver_2; - }; - } - | undefined, - ) => AuthProviderFactory_2; - resolvers: never; - }>; - awsAlb: Readonly<{ - create: ( - options?: - | { - authHandler?: AuthHandler; - signIn: { - resolver: SignInResolver_2; - }; - } - | undefined, - ) => AuthProviderFactory_2; - resolvers: never; - }>; - bitbucket: Readonly<{ - create: ( - options?: - | { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver_2; - }; - } - | undefined, - ) => AuthProviderFactory_2; - resolvers: Readonly<{ - userIdMatchingUserEntityAnnotation: () => SignInResolver_2; - usernameMatchingUserEntityAnnotation: () => SignInResolver_2; - }>; - }>; - bitbucketServer: Readonly<{ - create: ( - options?: - | { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver_2; - }; - } - | undefined, - ) => AuthProviderFactory_2; - resolvers: Readonly<{ - emailMatchingUserEntityProfileEmail: () => SignInResolver_2; - }>; - }>; - cfAccess: Readonly<{ - create: (options: { - authHandler?: AuthHandler; - signIn: { - resolver: SignInResolver_2; - }; - cache?: CacheService; - }) => AuthProviderFactory_2; - resolvers: Readonly; - }>; - gcpIap: Readonly<{ - create: (options: { - authHandler?: AuthHandler; - signIn: { - resolver: SignInResolver_2; - }; - }) => AuthProviderFactory_2; - resolvers: never; - }>; - github: Readonly<{ - create: ( - options?: - | { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver_2; - }; - stateEncoder?: StateEncoder; - } - | undefined, - ) => AuthProviderFactory_2; - resolvers: Readonly<{ - usernameMatchingUserEntityName: () => SignInResolver_2; - }>; - }>; - gitlab: Readonly<{ - create: ( - options?: - | { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver_2; - }; - } - | undefined, - ) => AuthProviderFactory_2; - resolvers: never; - }>; - google: Readonly<{ - create: ( - options?: - | { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver_2; - }; - } - | undefined, - ) => AuthProviderFactory_2; - resolvers: Readonly<{ - emailMatchingUserEntityProfileEmail: () => SignInResolver_2; - emailLocalPartMatchingUserEntityName: () => SignInResolver_2; - emailMatchingUserEntityAnnotation: () => SignInResolver_2; - }>; - }>; - microsoft: Readonly<{ - create: ( - options?: - | { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver_2; - }; - } - | undefined, - ) => AuthProviderFactory_2; - resolvers: Readonly<{ - emailMatchingUserEntityProfileEmail: () => SignInResolver_2; - emailLocalPartMatchingUserEntityName: () => SignInResolver_2; - userIdMatchingUserEntityAnnotation: () => SignInResolver_2; - emailMatchingUserEntityAnnotation: () => SignInResolver_2; - }>; - }>; - oauth2: Readonly<{ - create: ( - options?: - | { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver_2; - }; - } - | undefined, - ) => AuthProviderFactory_2; - resolvers: never; - }>; - oauth2Proxy: Readonly<{ - create: (options: { - authHandler?: AuthHandler; - signIn: { - resolver: SignInResolver_2; - }; - }) => AuthProviderFactory_2; - resolvers: never; - }>; - oidc: Readonly<{ - create: ( - options?: - | { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver_2; - }; - } - | undefined, - ) => AuthProviderFactory_2; - resolvers: Readonly<{ - emailLocalPartMatchingUserEntityName: () => SignInResolver_2; - emailMatchingUserEntityProfileEmail: () => SignInResolver_2; - }>; - }>; - okta: Readonly<{ - create: ( - options?: - | { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver_2; - }; - } - | undefined, - ) => AuthProviderFactory_2; - resolvers: Readonly<{ - emailLocalPartMatchingUserEntityName: () => SignInResolver_2; - emailMatchingUserEntityProfileEmail: () => SignInResolver_2; - emailMatchingUserEntityAnnotation(): SignInResolver_2; - }>; - }>; - onelogin: Readonly<{ - create: ( - options?: - | { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver_2; - }; - } - | undefined, - ) => AuthProviderFactory_2; - resolvers: never; - }>; - saml: Readonly<{ - create: ( - options?: - | { - authHandler?: AuthHandler; - signIn?: { - resolver: SignInResolver_2; - }; - } - | undefined, - ) => AuthProviderFactory_2; - resolvers: Readonly<{ - nameIdMatchingUserEntityName(): SignInResolver_2; - }>; - }>; - easyAuth: Readonly<{ - create: ( - options?: - | { - authHandler?: AuthHandler; - signIn: { - resolver: SignInResolver_2; - }; - } - | undefined, - ) => AuthProviderFactory_2; - resolvers: never; - }>; -}>; - -// @public @deprecated (undocumented) -export const readState: typeof decodeOAuthState; - -// @public @deprecated (undocumented) -export interface RouterOptions { - // (undocumented) - auth?: AuthService; - // (undocumented) - catalogApi?: CatalogApi; - // (undocumented) - config: RootConfigService; - // (undocumented) - database: DatabaseService; - // (undocumented) - disableDefaultProviderFactories?: boolean; - // (undocumented) - discovery: DiscoveryService; - // (undocumented) - httpAuth?: HttpAuthService; - // (undocumented) - logger: LoggerService; - // (undocumented) - ownershipResolver?: AuthOwnershipResolver; - // (undocumented) - providerFactories?: ProviderFactories; - // (undocumented) - tokenFactoryAlgorithm?: string; - // (undocumented) - tokenManager?: TokenManager; -} - -// @public @deprecated (undocumented) -export type SamlAuthResult = { - fullProfile: any; -}; - -// @public @deprecated (undocumented) -export type SignInInfo = SignInInfo_2; - -// @public @deprecated (undocumented) -export type SignInResolver = SignInResolver_2; - -// @public @deprecated (undocumented) -export type StateEncoder = (req: OAuthStartRequest) => Promise<{ - encodedState: string; -}>; - -// @public @deprecated (undocumented) -export type TokenParams = TokenParams_2; - -// @public @deprecated (undocumented) -export const verifyNonce: (req: express.Request, providerId: string) => void; - -// @public @deprecated (undocumented) -export type WebMessageResponse = WebMessageResponse_2; ``` diff --git a/plugins/auth-backend/src/index.ts b/plugins/auth-backend/src/index.ts index 6c3f866031..1d453bde45 100644 --- a/plugins/auth-backend/src/index.ts +++ b/plugins/auth-backend/src/index.ts @@ -21,17 +21,3 @@ */ export { authPlugin as default } from './authPlugin'; -export * from './service'; -export type { TokenParams } from './identity'; -export * from './providers'; - -// flow package provides 2 functions -// ensuresXRequestedWith and postMessageResponse to safely handle CORS requests for login. The WebMessageResponse type in flow is used to type the response from the login-popup -export * from './lib/flow'; - -// OAuth wrapper over a passport or a custom `strategy`. -export * from './lib/oauth'; - -export * from './lib/catalog'; - -export { getDefaultOwnershipEntityRefs } from './lib/resolvers'; diff --git a/yarn.lock b/yarn.lock index 01cdf6283d..c6ba66b2f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29083,7 +29083,6 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/integration": "workspace:^" - "@backstage/plugin-auth-backend": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^" From d72da5ec194cfccd9ca263a9b0ad7b119c13ec1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 15 Apr 2025 21:42:24 +0200 Subject: [PATCH 20/61] removed all project references MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- plugins/auth-backend/config.d.ts | 58 -- plugins/auth-backend/package.json | 17 - plugins/auth-backend/src/authPlugin.ts | 1 - .../src/lib/oauth/OAuthAdapter.test.ts | 549 ------------------ .../src/lib/oauth/OAuthAdapter.ts | 357 ------------ plugins/auth-backend/src/lib/oauth/index.ts | 2 - .../src/providers/atlassian/index.ts | 17 - .../src/providers/atlassian/provider.ts | 57 -- .../src/providers/atlassian/strategy.ts | 113 ---- .../auth-backend/src/providers/auth0/index.ts | 17 - .../src/providers/auth0/provider.ts | 76 --- .../src/providers/auth0/strategy.ts | 42 -- .../src/providers/aws-alb/index.ts | 18 - .../src/providers/aws-alb/provider.ts | 59 -- .../src/providers/aws-alb/types.ts | 26 - .../src/providers/azure-easyauth/index.ts | 24 - .../src/providers/azure-easyauth/provider.ts | 58 -- .../src/providers/bitbucket/index.ts | 21 - .../src/providers/bitbucket/provider.ts | 101 ---- .../src/providers/bitbucketServer/index.ts | 18 - .../src/providers/bitbucketServer/provider.ts | 116 ---- .../src/providers/cloudflare-access/index.ts | 23 - .../providers/cloudflare-access/provider.ts | 164 ------ .../createAuthProviderIntegration.ts | 50 -- .../src/providers/gcp-iap/index.ts | 18 - .../src/providers/gcp-iap/provider.ts | 58 -- .../src/providers/gcp-iap/types.ts | 37 -- .../src/providers/github/index.ts | 18 - .../src/providers/github/provider.ts | 152 ----- .../src/providers/gitlab/index.ts | 17 - .../src/providers/gitlab/provider.ts | 57 -- .../src/providers/google/index.ts | 17 - .../src/providers/google/provider.test.ts | 70 --- .../src/providers/google/provider.ts | 73 --- plugins/auth-backend/src/providers/index.ts | 24 - .../src/providers/microsoft/index.ts | 17 - .../src/providers/microsoft/provider.ts | 72 --- .../src/providers/oauth2-proxy/index.ts | 24 - .../src/providers/oauth2-proxy/provider.ts | 61 -- .../src/providers/oauth2/index.ts | 17 - .../src/providers/oauth2/provider.ts | 50 -- .../auth-backend/src/providers/oidc/index.ts | 25 - .../src/providers/oidc/provider.test.ts | 172 ------ .../src/providers/oidc/provider.ts | 93 --- .../auth-backend/src/providers/okta/index.ts | 17 - .../src/providers/okta/provider.ts | 89 --- .../src/providers/onelogin/index.ts | 17 - .../src/providers/onelogin/provider.ts | 60 -- .../prepareBackstageIdentityResponse.ts | 24 - .../auth-backend/src/providers/providers.ts | 88 --- .../auth-backend/src/providers/saml/index.ts | 18 - .../src/providers/saml/provider.ts | 217 ------- plugins/auth-backend/src/service/router.ts | 19 +- yarn.lock | 49 +- 54 files changed, 17 insertions(+), 3637 deletions(-) delete mode 100644 plugins/auth-backend/src/lib/oauth/OAuthAdapter.test.ts delete mode 100644 plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts delete mode 100644 plugins/auth-backend/src/providers/atlassian/index.ts delete mode 100644 plugins/auth-backend/src/providers/atlassian/provider.ts delete mode 100644 plugins/auth-backend/src/providers/atlassian/strategy.ts delete mode 100644 plugins/auth-backend/src/providers/auth0/index.ts delete mode 100644 plugins/auth-backend/src/providers/auth0/provider.ts delete mode 100644 plugins/auth-backend/src/providers/auth0/strategy.ts delete mode 100644 plugins/auth-backend/src/providers/aws-alb/index.ts delete mode 100644 plugins/auth-backend/src/providers/aws-alb/provider.ts delete mode 100644 plugins/auth-backend/src/providers/aws-alb/types.ts delete mode 100644 plugins/auth-backend/src/providers/azure-easyauth/index.ts delete mode 100644 plugins/auth-backend/src/providers/azure-easyauth/provider.ts delete mode 100644 plugins/auth-backend/src/providers/bitbucket/index.ts delete mode 100644 plugins/auth-backend/src/providers/bitbucket/provider.ts delete mode 100644 plugins/auth-backend/src/providers/bitbucketServer/index.ts delete mode 100644 plugins/auth-backend/src/providers/bitbucketServer/provider.ts delete mode 100644 plugins/auth-backend/src/providers/cloudflare-access/index.ts delete mode 100644 plugins/auth-backend/src/providers/cloudflare-access/provider.ts delete mode 100644 plugins/auth-backend/src/providers/createAuthProviderIntegration.ts delete mode 100644 plugins/auth-backend/src/providers/gcp-iap/index.ts delete mode 100644 plugins/auth-backend/src/providers/gcp-iap/provider.ts delete mode 100644 plugins/auth-backend/src/providers/gcp-iap/types.ts delete mode 100644 plugins/auth-backend/src/providers/github/index.ts delete mode 100644 plugins/auth-backend/src/providers/github/provider.ts delete mode 100644 plugins/auth-backend/src/providers/gitlab/index.ts delete mode 100644 plugins/auth-backend/src/providers/gitlab/provider.ts delete mode 100644 plugins/auth-backend/src/providers/google/index.ts delete mode 100644 plugins/auth-backend/src/providers/google/provider.test.ts delete mode 100644 plugins/auth-backend/src/providers/google/provider.ts delete mode 100644 plugins/auth-backend/src/providers/microsoft/index.ts delete mode 100644 plugins/auth-backend/src/providers/microsoft/provider.ts delete mode 100644 plugins/auth-backend/src/providers/oauth2-proxy/index.ts delete mode 100644 plugins/auth-backend/src/providers/oauth2-proxy/provider.ts delete mode 100644 plugins/auth-backend/src/providers/oauth2/index.ts delete mode 100644 plugins/auth-backend/src/providers/oauth2/provider.ts delete mode 100644 plugins/auth-backend/src/providers/oidc/index.ts delete mode 100644 plugins/auth-backend/src/providers/oidc/provider.test.ts delete mode 100644 plugins/auth-backend/src/providers/oidc/provider.ts delete mode 100644 plugins/auth-backend/src/providers/okta/index.ts delete mode 100644 plugins/auth-backend/src/providers/okta/provider.ts delete mode 100644 plugins/auth-backend/src/providers/onelogin/index.ts delete mode 100644 plugins/auth-backend/src/providers/onelogin/provider.ts delete mode 100644 plugins/auth-backend/src/providers/prepareBackstageIdentityResponse.ts delete mode 100644 plugins/auth-backend/src/providers/providers.ts delete mode 100644 plugins/auth-backend/src/providers/saml/index.ts delete mode 100644 plugins/auth-backend/src/providers/saml/provider.ts diff --git a/plugins/auth-backend/config.d.ts b/plugins/auth-backend/config.d.ts index 0e01bf038c..bf91780c34 100644 --- a/plugins/auth-backend/config.d.ts +++ b/plugins/auth-backend/config.d.ts @@ -84,64 +84,6 @@ export interface Config { }; }; - /** - * The available auth-provider options and attributes - * @additionalProperties true - */ - providers?: { - /** @visibility frontend */ - saml?: { - entryPoint: string; - logoutUrl?: string; - issuer: string; - /** - * @visibility secret - */ - cert: string; - audience?: string; - /** - * @visibility secret - */ - privateKey?: string; - authnContext?: string[]; - identifierFormat?: string; - /** - * @visibility secret - */ - decryptionPvk?: string; - signatureAlgorithm?: 'sha256' | 'sha512'; - digestAlgorithm?: string; - acceptedClockSkewMs?: number; - }; - /** @visibility frontend */ - auth0?: { - [authEnv: string]: { - clientId: string; - /** - * @visibility secret - */ - clientSecret: string; - domain: string; - callbackUrl?: string; - audience?: string; - connection?: string; - connectionScope?: string; - }; - }; - /** @visibility frontend */ - onelogin?: { - [authEnv: string]: { - clientId: string; - /** - * @visibility secret - */ - clientSecret: string; - issuer: string; - callbackUrl?: string; - }; - }; - }; - /** * The backstage token expiration. */ diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 84441992e3..3040d03516 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -49,23 +49,6 @@ "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", - "@backstage/plugin-auth-backend-module-atlassian-provider": "workspace:^", - "@backstage/plugin-auth-backend-module-auth0-provider": "workspace:^", - "@backstage/plugin-auth-backend-module-aws-alb-provider": "workspace:^", - "@backstage/plugin-auth-backend-module-azure-easyauth-provider": "workspace:^", - "@backstage/plugin-auth-backend-module-bitbucket-provider": "workspace:^", - "@backstage/plugin-auth-backend-module-bitbucket-server-provider": "workspace:^", - "@backstage/plugin-auth-backend-module-cloudflare-access-provider": "workspace:^", - "@backstage/plugin-auth-backend-module-gcp-iap-provider": "workspace:^", - "@backstage/plugin-auth-backend-module-github-provider": "workspace:^", - "@backstage/plugin-auth-backend-module-gitlab-provider": "workspace:^", - "@backstage/plugin-auth-backend-module-google-provider": "workspace:^", - "@backstage/plugin-auth-backend-module-microsoft-provider": "workspace:^", - "@backstage/plugin-auth-backend-module-oauth2-provider": "workspace:^", - "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "workspace:^", - "@backstage/plugin-auth-backend-module-oidc-provider": "workspace:^", - "@backstage/plugin-auth-backend-module-okta-provider": "workspace:^", - "@backstage/plugin-auth-backend-module-onelogin-provider": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", diff --git a/plugins/auth-backend/src/authPlugin.ts b/plugins/auth-backend/src/authPlugin.ts index 89b7e9a780..bc02243446 100644 --- a/plugins/auth-backend/src/authPlugin.ts +++ b/plugins/auth-backend/src/authPlugin.ts @@ -88,7 +88,6 @@ export const authPlugin = createBackendPlugin({ httpAuth, catalogApi, providerFactories: Object.fromEntries(providers), - disableDefaultProviderFactories: true, ownershipResolver, }); httpRouter.addAuthPolicy({ diff --git a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.test.ts b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.test.ts deleted file mode 100644 index 48163e6e82..0000000000 --- a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.test.ts +++ /dev/null @@ -1,549 +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 express from 'express'; -import { THOUSAND_DAYS_MS, TEN_MINUTES_MS, OAuthAdapter } from './OAuthAdapter'; -import { encodeState } from './helpers'; -import { OAuthHandlers, OAuthLogoutRequest } from './types'; -import { CookieConfigurer, OAuthState } from '@backstage/plugin-auth-node'; - -const mockResponseData = { - providerInfo: { - accessToken: 'ACCESS_TOKEN', - token: 'ID_TOKEN', - expiresInSeconds: 10, - scope: 'email', - }, - profile: { - email: 'foo@bar.com', - }, - backstageIdentity: { - token: - 'eyblob.eyJzdWIiOiJ1c2VyOmRlZmF1bHQvamltbXltYXJrdW0iLCJlbnQiOlsidXNlcjpkZWZhdWx0L2ppbW15bWFya3VtIl19.eyblob', - }, -}; - -describe('OAuthAdapter', () => { - beforeEach(() => { - jest.clearAllMocks(); - }); - - class MyAuthProvider implements OAuthHandlers { - async start() { - return { - url: '/url', - status: 301, - }; - } - async handler() { - return { - response: mockResponseData, - refreshToken: 'token', - }; - } - async refresh() { - return { - response: mockResponseData, - refreshToken: 'token', - }; - } - async logout(_: OAuthLogoutRequest) {} - } - const providerInstance = new MyAuthProvider(); - const mockCookieConfig: ReturnType = { - domain: 'domain.org', - path: '/auth/test-provider', - secure: false, - }; - const mockCookieConfigurer = jest.fn().mockReturnValue(mockCookieConfig); - - const oAuthProviderOptions = { - providerId: 'test-provider', - appOrigin: 'http://localhost:3000', - baseUrl: 'http://domain.org/auth', - cookieConfigurer: mockCookieConfigurer, - tokenIssuer: { - issueToken: async () => 'my-id-token', - listPublicKeys: async () => ({ keys: [] }), - }, - isOriginAllowed: () => false, - callbackUrl: 'http://domain.org/auth/test-provider/handler/frame', - }; - - const defaultState = { nonce: 'nonce', env: 'development' }; - - const createEncodedQueryMockRequest = (state: any) => { - return { - cookies: { - 'test-provider-nonce': 'nonce', - }, - query: { - state: encodeState(state), - }, - } as unknown as express.Request; - }; - - const mockResponse = { - cookie: jest.fn().mockReturnThis(), - end: jest.fn().mockReturnThis(), - setHeader: jest.fn().mockReturnThis(), - statusCode: jest.fn().mockReturnThis(), - redirect: jest.fn().mockReturnThis(), - status: jest.fn().mockReturnThis(), - json: jest.fn().mockReturnThis(), - } as unknown as express.Response; - - const mockStartRequest = { - query: { - scope: 'user', - env: 'development', - }, - } as unknown as express.Request; - - const expectedStartAuthCookieData = { - httpOnly: true, - path: '/auth/test-provider/handler', - maxAge: TEN_MINUTES_MS, - domain: 'domain.org', - sameSite: 'lax', - secure: false, - }; - - it('sets the correct headers in start', async () => { - const oauthProvider = new OAuthAdapter( - providerInstance, - oAuthProviderOptions, - ); - - await oauthProvider.start(mockStartRequest, mockResponse); - // nonce cookie checks - expect(mockResponse.cookie).toHaveBeenCalledTimes(1); - expect(mockResponse.cookie).toHaveBeenCalledWith( - `${oAuthProviderOptions.providerId}-nonce`, - expect.any(String), - expect.objectContaining(expectedStartAuthCookieData), - ); - expect(mockResponse.setHeader).toHaveBeenCalledTimes(2); - expect(mockResponse.setHeader).toHaveBeenCalledWith('Location', '/url'); - expect(mockResponse.setHeader).toHaveBeenCalledWith('Content-Length', '0'); - expect(mockResponse.statusCode).toEqual(301); - expect(mockResponse.end).toHaveBeenCalledTimes(1); - expect(mockResponse.redirect).not.toHaveBeenCalled(); - }); - - const refreshCookieData = { - ...expectedStartAuthCookieData, - path: '/auth/test-provider', - maxAge: THOUSAND_DAYS_MS, - }; - - it('sets the refresh cookie if refresh is enabled', async () => { - const oauthProvider = new OAuthAdapter(providerInstance, { - ...oAuthProviderOptions, - isOriginAllowed: () => false, - }); - - const mockRequest = createEncodedQueryMockRequest(defaultState); - - await oauthProvider.frameHandler(mockRequest, mockResponse); - expect(mockCookieConfigurer).toHaveBeenCalledTimes(1); - expect(mockResponse.cookie).toHaveBeenCalledTimes(1); - expect(mockResponse.cookie).toHaveBeenCalledWith( - expect.stringContaining('test-provider-refresh-token'), - expect.stringContaining('token'), - expect.objectContaining(refreshCookieData), - ); - expect(mockResponse.redirect).not.toHaveBeenCalled(); - }); - - it('sets the refresh cookie if refresh is enabled with redirect', async () => { - const oauthProvider = new OAuthAdapter(providerInstance, { - ...oAuthProviderOptions, - isOriginAllowed: () => false, - }); - - const state = { - ...defaultState, - redirectUrl: 'http://localhost:3000', - flow: 'redirect', - }; - const mockRequest = createEncodedQueryMockRequest(state); - - await oauthProvider.frameHandler(mockRequest, mockResponse); - expect(mockResponse.redirect).toHaveBeenCalledTimes(1); - }); - - it('persists scope through cookie if enabled', async () => { - const handlers = { - start: jest.fn(async (_req: { state: OAuthState }) => ({ - url: '/url', - status: 301, - })), - handler: jest.fn(async () => ({ response: mockResponseData })), - refresh: jest.fn(async () => ({ response: mockResponseData })), - }; - const oauthProvider = new OAuthAdapter(handlers, { - ...oAuthProviderOptions, - persistScopes: true, - }); - - // First we test the /start request, making sure state is set - await oauthProvider.start(mockStartRequest, mockResponse); - - expect(handlers.start).toHaveBeenCalledTimes(1); - expect(handlers.start).toHaveBeenCalledWith({ - ...mockStartRequest, - scope: 'user', - state: { - nonce: expect.any(String), - env: 'development', - scope: 'user', - }, - }); - - // Then test the /handler, making sure the granted scope cookie is set - const providedState = handlers.start.mock.calls[0][0].state; - const mockHandleReq = { - cookies: { - 'test-provider-nonce': providedState.nonce, - }, - query: { - state: encodeState(providedState), - }, - } as unknown as express.Request; - const mockHandleRes = { - cookie: jest.fn().mockReturnThis(), - setHeader: jest.fn().mockReturnThis(), - end: jest.fn().mockReturnThis(), - redirect: jest.fn().mockReturnThis(), - } as unknown as express.Response; - - await oauthProvider.frameHandler(mockHandleReq, mockHandleRes); - expect(mockHandleRes.cookie).toHaveBeenCalledTimes(1); - expect(mockHandleRes.cookie).toHaveBeenCalledWith( - 'test-provider-granted-scope', - 'user', - expect.objectContaining(refreshCookieData), - ); - expect(mockResponse.redirect).not.toHaveBeenCalled(); - - // Then make sure scopes are forwarded correctly during refresh - const mockRefreshReq = { - query: { scope: 'ignore-me' }, - cookies: { - 'test-provider-granted-scope': 'user', - 'test-provider-refresh-token': 'refresh-token', - }, - header: jest.fn().mockReturnValue('XMLHttpRequest'), - } as unknown as express.Request; - const mockRefreshRes = { - status: jest.fn().mockReturnThis(), - json: jest.fn().mockReturnThis(), - redirect: jest.fn().mockReturnThis(), - } as unknown as express.Response; - await oauthProvider.refresh(mockRefreshReq, mockRefreshRes); - expect(handlers.refresh).toHaveBeenCalledTimes(1); - expect(handlers.refresh).toHaveBeenCalledWith( - expect.objectContaining({ - scope: 'user', - refreshToken: 'refresh-token', - }), - ); - expect(mockRefreshRes.redirect).not.toHaveBeenCalled(); - }); - - const mockRequestWithHeader = { - header: () => 'XMLHttpRequest', - cookies: { - 'test-provider-refresh-token': 'token', - }, - query: {}, - get: jest.fn(), - } as unknown as express.Request; - - it('removes refresh cookie and calls logout handler when logging out', async () => { - const logoutSpy = jest.spyOn(providerInstance, 'logout'); - const oauthProvider = new OAuthAdapter(providerInstance, { - ...oAuthProviderOptions, - isOriginAllowed: () => false, - }); - - await oauthProvider.logout(mockRequestWithHeader, mockResponse); - expect(mockRequestWithHeader.get).toHaveBeenCalledTimes(1); - expect(logoutSpy).toHaveBeenCalledTimes(1); - expect(mockResponse.cookie).toHaveBeenCalledTimes(1); - expect(mockResponse.cookie).toHaveBeenCalledWith( - expect.stringContaining('test-provider-refresh-token'), - '', - expect.objectContaining({ path: '/auth/test-provider' }), - ); - expect(mockResponse.end).toHaveBeenCalledTimes(1); - expect(mockResponse.redirect).not.toHaveBeenCalled(); - }); - - it('gets new access-token when refreshing', async () => { - const oauthProvider = new OAuthAdapter(providerInstance, { - ...oAuthProviderOptions, - isOriginAllowed: () => false, - }); - - await oauthProvider.refresh(mockRequestWithHeader, mockResponse); - expect(mockResponse.json).toHaveBeenCalledTimes(1); - expect(mockResponse.json).toHaveBeenCalledWith({ - ...mockResponseData, - backstageIdentity: { - token: mockResponseData.backstageIdentity.token, - identity: { - type: 'user', - userEntityRef: 'user:default/jimmymarkum', - ownershipEntityRefs: ['user:default/jimmymarkum'], - }, - }, - }); - expect(mockResponse.redirect).not.toHaveBeenCalled(); - }); - - it('sets new access-token when old cookie exists', async () => { - const oauthProvider = new OAuthAdapter(providerInstance, { - ...oAuthProviderOptions, - isOriginAllowed: () => false, - }); - - const mockRequest = { - ...mockRequestWithHeader, - cookies: { - 'test-provider-refresh-token': 'old-token', - }, - } as unknown as express.Request; - - await oauthProvider.refresh(mockRequest, mockResponse); - expect(mockRequest.get).toHaveBeenCalledTimes(1); - expect(mockCookieConfigurer).toHaveBeenCalledTimes(1); - expect(mockResponse.cookie).toHaveBeenCalledTimes(1); - expect(mockResponse.cookie).toHaveBeenCalledWith( - 'test-provider-refresh-token', - 'token', - expect.objectContaining(refreshCookieData), - ); - expect(mockResponse.redirect).not.toHaveBeenCalled(); - }); - - it('sets the correct nonce cookie configuration', async () => { - const config = { - baseUrl: 'http://domain.org/auth', - appUrl: 'http://domain.org', - isOriginAllowed: () => false, - }; - - const oauthProvider = OAuthAdapter.fromConfig(config, providerInstance, { - ...oAuthProviderOptions, - }); - - await oauthProvider.start(mockStartRequest, mockResponse); - expect(mockCookieConfigurer).not.toHaveBeenCalled(); - expect(mockResponse.cookie).toHaveBeenCalledTimes(1); - expect(mockResponse.cookie).toHaveBeenCalledWith( - `${oAuthProviderOptions.providerId}-nonce`, - expect.any(String), - expect.objectContaining(expectedStartAuthCookieData), - ); - expect(mockResponse.redirect).not.toHaveBeenCalled(); - }); - - const config = { - baseUrl: 'http://domain.org/auth', - appUrl: 'http://domain.org', - isOriginAllowed: () => false, - }; - - const mockStartRequestWithOrigin = { - query: { - scope: 'user', - env: 'development', - origin: 'http://other.domain', - }, - } as unknown as express.Request; - - it('sets the correct nonce cookie configuration using origin from request', async () => { - const oauthProvider = OAuthAdapter.fromConfig(config, providerInstance, { - ...oAuthProviderOptions, - callbackUrl: 'https://domain.org/auth/test-provider/handler/frame', - }); - - await oauthProvider.start(mockStartRequestWithOrigin, mockResponse); - expect(mockCookieConfigurer).not.toHaveBeenCalled(); - expect(mockResponse.cookie).toHaveBeenCalledTimes(1); - expect(mockResponse.cookie).toHaveBeenCalledWith( - `${oAuthProviderOptions.providerId}-nonce`, - expect.any(String), - expect.objectContaining({ - ...expectedStartAuthCookieData, - secure: true, - sameSite: 'none', - }), - ); - expect(mockResponse.redirect).not.toHaveBeenCalled(); - }); - - const secureCookieData = { - ...refreshCookieData, - secure: true, - sameSite: 'lax', - maxAge: THOUSAND_DAYS_MS, - }; - - it('sets the correct cookie configuration using an secure callbackUrl', async () => { - const oauthProvider = OAuthAdapter.fromConfig(config, providerInstance, { - ...oAuthProviderOptions, - callbackUrl: 'https://domain.org/auth/test-provider/handler/frame', - }); - - const mockRequest = createEncodedQueryMockRequest(defaultState); - await oauthProvider.frameHandler(mockRequest, mockResponse); - expect(mockCookieConfigurer).not.toHaveBeenCalled(); - expect(mockResponse.cookie).toHaveBeenCalledTimes(1); - expect(mockResponse.cookie).toHaveBeenCalledWith( - expect.stringContaining('test-provider-refresh-token'), - expect.stringContaining('token'), - expect.objectContaining(secureCookieData), - ); - expect(mockResponse.redirect).not.toHaveBeenCalled(); - }); - - const secureSameSiteNoneCookieData = { - ...secureCookieData, - sameSite: 'none', - }; - - it('sets the correct cookie configuration when on different domains and secure', async () => { - const oauthProvider = OAuthAdapter.fromConfig(config, providerInstance, { - ...oAuthProviderOptions, - callbackUrl: 'https://authdomain.org/auth/test-provider/handler/frame', - }); - - const mockRequest = createEncodedQueryMockRequest(defaultState); - await oauthProvider.frameHandler(mockRequest, mockResponse); - expect(mockCookieConfigurer).not.toHaveBeenCalled(); - expect(mockResponse.cookie).toHaveBeenCalledTimes(1); - expect(mockResponse.cookie).toHaveBeenCalledWith( - expect.stringContaining('test-provider-refresh-token'), - expect.stringContaining('token'), - expect.objectContaining({ - ...secureSameSiteNoneCookieData, - domain: 'authdomain.org', - }), - ); - expect(mockResponse.redirect).not.toHaveBeenCalled(); - }); - - const configOriginAllowed = { - ...config, - isOriginAllowed: () => true, - }; - - it('sets the correct cookie configuration using origin from state', async () => { - const oauthProvider = OAuthAdapter.fromConfig( - configOriginAllowed, - providerInstance, - { - ...oAuthProviderOptions, - callbackUrl: 'https://domain.org/auth/test-provider/handler/frame', - }, - ); - - const mockRequest = createEncodedQueryMockRequest({ - ...defaultState, - origin: 'http://other.domain', - }); - await oauthProvider.frameHandler(mockRequest, mockResponse); - expect(mockCookieConfigurer).not.toHaveBeenCalled(); - expect(mockResponse.cookie).toHaveBeenCalledTimes(1); - expect(mockResponse.cookie).toHaveBeenCalledWith( - expect.stringContaining('test-provider-refresh-token'), - expect.stringContaining('token'), - expect.objectContaining(secureSameSiteNoneCookieData), - ); - expect(mockResponse.redirect).not.toHaveBeenCalled(); - }); - - const mockRequestWithGetMockReturn = { - header: () => 'XMLHttpRequest', - cookies: { - 'test-provider-refresh-token': 'old-token', - }, - query: {}, - get: jest.fn().mockReturnValue('http://other.domain'), - } as unknown as express.Request; - - it('sets the correct cookie configuration using origin from header', async () => { - const oauthProvider = OAuthAdapter.fromConfig(config, providerInstance, { - ...oAuthProviderOptions, - callbackUrl: 'https://domain.org/auth/test-provider/handler/frame', - }); - - await oauthProvider.refresh(mockRequestWithGetMockReturn, mockResponse); - expect(mockRequestWithGetMockReturn.get).toHaveBeenCalledTimes(1); - expect(mockCookieConfigurer).not.toHaveBeenCalled(); - expect(mockResponse.cookie).toHaveBeenCalledTimes(1); - expect(mockResponse.cookie).toHaveBeenCalledWith( - 'test-provider-refresh-token', - 'token', - expect.objectContaining(secureSameSiteNoneCookieData), - ); - expect(mockResponse.redirect).not.toHaveBeenCalled(); - }); - - it('executed a response redirect when flow query string is set to "redirect"', async () => { - const handlers = { - start: jest.fn(async (_req: { state: OAuthState }) => ({ - url: '/url', - status: 301, - })), - handler: jest.fn(async () => ({ response: mockResponseData })), - refresh: jest.fn(async () => ({ response: mockResponseData })), - }; - const configWithNoPopupEnabled = { - ...configOriginAllowed, - }; - const oauthProvider = OAuthAdapter.fromConfig( - configWithNoPopupEnabled, - handlers, - { - ...oAuthProviderOptions, - callbackUrl: 'https://domain.org/auth/test-provider/handler/frame', - }, - ); - - const state = { - ...defaultState, - origin: 'http://other.domain', - redirectUrl: 'http://domain.org', - flow: 'redirect', - }; - - const mockRequest = { - ...createEncodedQueryMockRequest(state), - get: jest.fn().mockReturnValue('http://other.domain'), - } as unknown as express.Request; - - await oauthProvider.frameHandler(mockRequest, mockResponse); - expect(mockRequest.get).not.toHaveBeenCalled(); - expect(mockCookieConfigurer).not.toHaveBeenCalled(); - expect(mockResponse.cookie).not.toHaveBeenCalled(); - expect(mockResponse.redirect).toHaveBeenCalledTimes(1); - expect(mockResponse.redirect).toHaveBeenCalledWith('http://domain.org'); - }); -}); diff --git a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts b/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts deleted file mode 100644 index b5c3642024..0000000000 --- a/plugins/auth-backend/src/lib/oauth/OAuthAdapter.ts +++ /dev/null @@ -1,357 +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 express, { CookieOptions } from 'express'; -import crypto from 'crypto'; -import { URL } from 'url'; -import { - AuthProviderConfig, - AuthProviderRouteHandlers, - BackstageIdentityResponse, - BackstageSignInResult, - CookieConfigurer, - OAuthState, -} from '@backstage/plugin-auth-node'; -import { - AuthenticationError, - InputError, - isError, - NotAllowedError, -} from '@backstage/errors'; -import { defaultCookieConfigurer, readState, verifyNonce } from './helpers'; -import { - postMessageResponse, - ensuresXRequestedWith, - WebMessageResponse, -} from '../flow'; -import { - OAuthHandlers, - OAuthStartRequest, - OAuthRefreshRequest, - OAuthLogoutRequest, -} from './types'; -import { prepareBackstageIdentityResponse } from '../../providers/prepareBackstageIdentityResponse'; - -export const THOUSAND_DAYS_MS = 1000 * 24 * 60 * 60 * 1000; -export const TEN_MINUTES_MS = 600 * 1000; - -/** - * @public - * @deprecated Use `createOAuthRouteHandlers` from `@backstage/plugin-auth-node` instead - */ -export type OAuthAdapterOptions = { - providerId: string; - persistScopes?: boolean; - appOrigin: string; - baseUrl: string; - cookieConfigurer: CookieConfigurer; - isOriginAllowed: (origin: string) => boolean; - callbackUrl: string; -}; - -/** - * @public - * @deprecated Use `createOAuthRouteHandlers` from `@backstage/plugin-auth-node` instead - */ -export class OAuthAdapter implements AuthProviderRouteHandlers { - static fromConfig( - config: AuthProviderConfig, - handlers: OAuthHandlers, - options: Pick< - OAuthAdapterOptions, - 'providerId' | 'persistScopes' | 'callbackUrl' - >, - ): OAuthAdapter { - const { appUrl, baseUrl, isOriginAllowed } = config; - const { origin: appOrigin } = new URL(appUrl); - - const cookieConfigurer = config.cookieConfigurer ?? defaultCookieConfigurer; - - return new OAuthAdapter(handlers, { - ...options, - appOrigin, - baseUrl, - cookieConfigurer, - isOriginAllowed, - }); - } - - private readonly baseCookieOptions: CookieOptions; - - constructor( - private readonly handlers: OAuthHandlers, - private readonly options: OAuthAdapterOptions, - ) { - this.baseCookieOptions = { - httpOnly: true, - sameSite: 'lax', - }; - } - - async start(req: express.Request, res: express.Response): Promise { - // retrieve scopes from request - const scope = req.query.scope?.toString() ?? ''; - const env = req.query.env?.toString(); - const origin = req.query.origin?.toString(); - const redirectUrl = req.query.redirectUrl?.toString(); - const flow = req.query.flow?.toString(); - - if (!env) { - throw new InputError('No env provided in request query parameters'); - } - - const cookieConfig = this.getCookieConfig(origin); - - const nonce = crypto.randomBytes(16).toString('base64'); - // set a nonce cookie before redirecting to oauth provider - this.setNonceCookie(res, nonce, cookieConfig); - - const state: OAuthState = { nonce, env, origin, redirectUrl, flow }; - - // If scopes are persisted then we pass them through the state so that we - // can set the cookie on successful auth - if (this.options.persistScopes) { - state.scope = scope; - } - const forwardReq = Object.assign(req, { scope, state }); - - const { url, status } = await this.handlers.start( - forwardReq as OAuthStartRequest, - ); - - res.statusCode = status || 302; - res.setHeader('Location', url); - res.setHeader('Content-Length', '0'); - res.end(); - } - - async frameHandler( - req: express.Request, - res: express.Response, - ): Promise { - let appOrigin = this.options.appOrigin; - - try { - const state: OAuthState = readState(req.query.state?.toString() ?? ''); - - if (state.origin) { - try { - appOrigin = new URL(state.origin).origin; - } catch { - throw new NotAllowedError('App origin is invalid, failed to parse'); - } - if (!this.options.isOriginAllowed(appOrigin)) { - throw new NotAllowedError(`Origin '${appOrigin}' is not allowed`); - } - } - - // verify nonce cookie and state cookie on callback - verifyNonce(req, this.options.providerId); - - const { response, refreshToken } = await this.handlers.handler(req); - - const cookieConfig = this.getCookieConfig(appOrigin); - - // Store the scope that we have been granted for this session. This is useful if - // the provider does not return granted scopes on refresh or if they are normalized. - if (this.options.persistScopes && state.scope) { - this.setGrantedScopeCookie(res, state.scope, cookieConfig); - response.providerInfo.scope = state.scope; - } - - if (refreshToken) { - // set new refresh token - this.setRefreshTokenCookie(res, refreshToken, cookieConfig); - } - - const identity = await this.populateIdentity(response.backstageIdentity); - - const responseObj: WebMessageResponse = { - type: 'authorization_response', - response: { ...response, backstageIdentity: identity }, - }; - - if (state.flow === 'redirect') { - if (!state.redirectUrl) { - throw new InputError( - 'No redirectUrl provided in request query parameters', - ); - } - res.redirect(state.redirectUrl); - return undefined; - } - // post message back to popup if successful - return postMessageResponse(res, appOrigin, responseObj); - } catch (error) { - const { name, message } = isError(error) - ? error - : new Error('Encountered invalid error'); // Being a bit safe and not forwarding the bad value - // post error message back to popup if failure - return postMessageResponse(res, appOrigin, { - type: 'authorization_response', - error: { name, message }, - }); - } - } - - async logout(req: express.Request, res: express.Response): Promise { - if (!ensuresXRequestedWith(req)) { - throw new AuthenticationError('Invalid X-Requested-With header'); - } - - if (this.handlers.logout) { - const refreshToken = this.getRefreshTokenFromCookie(req); - const revokeRequest: OAuthLogoutRequest = Object.assign(req, { - refreshToken, - }); - await this.handlers.logout(revokeRequest); - } - - // remove refresh token cookie if it is set - const origin = req.get('origin'); - const cookieConfig = this.getCookieConfig(origin); - this.removeRefreshTokenCookie(res, cookieConfig); - - res.status(200).end(); - } - - async refresh(req: express.Request, res: express.Response): Promise { - if (!ensuresXRequestedWith(req)) { - throw new AuthenticationError('Invalid X-Requested-With header'); - } - - if (!this.handlers.refresh) { - throw new InputError( - `Refresh token is not supported for provider ${this.options.providerId}`, - ); - } - - try { - const refreshToken = this.getRefreshTokenFromCookie(req); - - // throw error if refresh token is missing in the request - if (!refreshToken) { - throw new InputError('Missing session cookie'); - } - - let scope = req.query.scope?.toString() ?? ''; - if (this.options.persistScopes) { - scope = this.getGrantedScopeFromCookie(req); - } - const forwardReq = Object.assign(req, { scope, refreshToken }); - - // get new access_token - const { response, refreshToken: newRefreshToken } = - await this.handlers.refresh(forwardReq as OAuthRefreshRequest); - - const backstageIdentity = await this.populateIdentity( - response.backstageIdentity, - ); - - if (newRefreshToken && newRefreshToken !== refreshToken) { - const origin = req.get('origin'); - const cookieConfig = this.getCookieConfig(origin); - this.setRefreshTokenCookie(res, newRefreshToken, cookieConfig); - } - - res.status(200).json({ ...response, backstageIdentity }); - } catch (error) { - throw new AuthenticationError('Refresh failed', error); - } - } - - /** - * If the response from the OAuth provider includes a Backstage identity, we - * make sure it's populated with all the information we can derive from the user ID. - */ - private async populateIdentity( - identity?: BackstageSignInResult, - ): Promise { - if (!identity) { - return undefined; - } - if (!identity.token) { - throw new InputError(`Identity response must return a token`); - } - - return prepareBackstageIdentityResponse(identity); - } - - private setNonceCookie = ( - res: express.Response, - nonce: string, - cookieConfig: ReturnType, - ) => { - res.cookie(`${this.options.providerId}-nonce`, nonce, { - maxAge: TEN_MINUTES_MS, - ...this.baseCookieOptions, - ...cookieConfig, - path: `${cookieConfig.path}/handler`, - }); - }; - - private setGrantedScopeCookie = ( - res: express.Response, - scope: string, - cookieConfig: ReturnType, - ) => { - res.cookie(`${this.options.providerId}-granted-scope`, scope, { - maxAge: THOUSAND_DAYS_MS, - ...this.baseCookieOptions, - ...cookieConfig, - }); - }; - - private getRefreshTokenFromCookie = (req: express.Request) => { - return req.cookies[`${this.options.providerId}-refresh-token`]; - }; - - private getGrantedScopeFromCookie = (req: express.Request) => { - return req.cookies[`${this.options.providerId}-granted-scope`]; - }; - - private setRefreshTokenCookie = ( - res: express.Response, - refreshToken: string, - cookieConfig: ReturnType, - ) => { - res.cookie(`${this.options.providerId}-refresh-token`, refreshToken, { - maxAge: THOUSAND_DAYS_MS, - ...this.baseCookieOptions, - ...cookieConfig, - }); - }; - - private removeRefreshTokenCookie = ( - res: express.Response, - cookieConfig: ReturnType, - ) => { - res.cookie(`${this.options.providerId}-refresh-token`, '', { - maxAge: 0, - ...this.baseCookieOptions, - ...cookieConfig, - }); - }; - - private getCookieConfig = (origin?: string) => { - return this.options.cookieConfigurer({ - providerId: this.options.providerId, - baseUrl: this.options.baseUrl, - callbackUrl: this.options.callbackUrl, - appOrigin: origin ?? this.options.appOrigin, - }); - }; -} diff --git a/plugins/auth-backend/src/lib/oauth/index.ts b/plugins/auth-backend/src/lib/oauth/index.ts index 3643898bed..f3416b6236 100644 --- a/plugins/auth-backend/src/lib/oauth/index.ts +++ b/plugins/auth-backend/src/lib/oauth/index.ts @@ -15,8 +15,6 @@ */ export { OAuthEnvironmentHandler } from './OAuthEnvironmentHandler'; -export type { OAuthAdapterOptions } from './OAuthAdapter'; -export { OAuthAdapter } from './OAuthAdapter'; export { encodeState, verifyNonce, readState } from './helpers'; export type { OAuthHandlers, diff --git a/plugins/auth-backend/src/providers/atlassian/index.ts b/plugins/auth-backend/src/providers/atlassian/index.ts deleted file mode 100644 index f001463694..0000000000 --- a/plugins/auth-backend/src/providers/atlassian/index.ts +++ /dev/null @@ -1,17 +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. - */ - -export { atlassian } from './provider'; diff --git a/plugins/auth-backend/src/providers/atlassian/provider.ts b/plugins/auth-backend/src/providers/atlassian/provider.ts deleted file mode 100644 index 539f055f75..0000000000 --- a/plugins/auth-backend/src/providers/atlassian/provider.ts +++ /dev/null @@ -1,57 +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 { atlassianAuthenticator } from '@backstage/plugin-auth-backend-module-atlassian-provider'; -import { - SignInResolver, - createOAuthProviderFactory, -} from '@backstage/plugin-auth-node'; -import { - adaptLegacyOAuthHandler, - adaptLegacyOAuthSignInResolver, -} from '../../lib/legacy'; -import { OAuthResult } from '../../lib/oauth'; -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { AuthHandler } from '../types'; - -/** - * Auth provider integration for Atlassian auth - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export const atlassian = createAuthProviderIntegration({ - create(options?: { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - resolver: SignInResolver; - }; - }) { - return createOAuthProviderFactory({ - authenticator: atlassianAuthenticator, - profileTransform: adaptLegacyOAuthHandler(options?.authHandler), - signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), - }); - }, -}); diff --git a/plugins/auth-backend/src/providers/atlassian/strategy.ts b/plugins/auth-backend/src/providers/atlassian/strategy.ts deleted file mode 100644 index d07b09c5f8..0000000000 --- a/plugins/auth-backend/src/providers/atlassian/strategy.ts +++ /dev/null @@ -1,113 +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 OAuth2Strategy, { InternalOAuthError } from 'passport-oauth2'; -import { Profile } from 'passport'; - -interface ProfileResponse { - account_id: string; - email: string; - name: string; - picture: string; - nickname: string; -} - -interface AtlassianStrategyOptions { - clientID: string; - clientSecret: string; - callbackURL: string; - scope: string; -} - -const defaultScopes = ['offline_access', 'read:me']; - -export default class AtlassianStrategy extends OAuth2Strategy { - private readonly profileURL: string; - - constructor( - options: AtlassianStrategyOptions, - verify: OAuth2Strategy.VerifyFunction, - ) { - if (!options.scope) { - throw new TypeError('Atlassian requires a scope option'); - } - - const scopes = options.scope.split(' '); - - const optionsWithURLs = { - ...options, - authorizationURL: `https://auth.atlassian.com/authorize`, - tokenURL: `https://auth.atlassian.com/oauth/token`, - scope: Array.from(new Set([...defaultScopes, ...scopes])), - }; - - super(optionsWithURLs, verify); - this.profileURL = 'https://api.atlassian.com/me'; - this.name = 'atlassian'; - - this._oauth2.useAuthorizationHeaderforGET(true); - } - - authorizationParams() { - return { - audience: 'api.atlassian.com', - prompt: 'consent', - }; - } - - userProfile( - accessToken: string, - done: (err?: Error | null, profile?: any) => void, - ): void { - this._oauth2.get(this.profileURL, accessToken, (err, body) => { - if (err) { - return done( - new InternalOAuthError( - 'Failed to fetch user profile', - err.statusCode, - ), - ); - } - - if (!body) { - return done( - new Error('Failed to fetch user profile, body cannot be empty'), - ); - } - - try { - const json = typeof body !== 'string' ? body.toString() : body; - const profile = AtlassianStrategy.parse(json); - return done(null, profile); - } catch (e) { - return done(new Error('Failed to parse user profile')); - } - }); - } - - static parse(json: string): Profile { - const resp = JSON.parse(json) as ProfileResponse; - - return { - id: resp.account_id, - provider: 'atlassian', - username: resp.nickname, - displayName: resp.name, - emails: [{ value: resp.email }], - photos: [{ value: resp.picture }], - }; - } -} diff --git a/plugins/auth-backend/src/providers/auth0/index.ts b/plugins/auth-backend/src/providers/auth0/index.ts deleted file mode 100644 index 94a08a5809..0000000000 --- a/plugins/auth-backend/src/providers/auth0/index.ts +++ /dev/null @@ -1,17 +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. - */ - -export { auth0 } from './provider'; diff --git a/plugins/auth-backend/src/providers/auth0/provider.ts b/plugins/auth-backend/src/providers/auth0/provider.ts deleted file mode 100644 index 9ae31b305d..0000000000 --- a/plugins/auth-backend/src/providers/auth0/provider.ts +++ /dev/null @@ -1,76 +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 { OAuthProviderOptions, OAuthResult } from '../../lib/oauth'; - -import { AuthHandler } from '../types'; -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { - AuthResolverContext, - createOAuthProviderFactory, - SignInResolver, -} from '@backstage/plugin-auth-node'; -import { - adaptLegacyOAuthHandler, - adaptLegacyOAuthSignInResolver, -} from '../../lib/legacy'; -import { auth0Authenticator } from '@backstage/plugin-auth-backend-module-auth0-provider'; - -/** - * @public - * @deprecated The Auth0 auth provider was extracted to `@backstage/plugin-auth-backend-module-auth0-provider`. - */ -export type Auth0AuthProviderOptions = OAuthProviderOptions & { - domain: string; - signInResolver?: SignInResolver; - authHandler: AuthHandler; - resolverContext: AuthResolverContext; - audience?: string; - connection?: string; - connectionScope?: string; -}; - -/** - * Auth provider integration for auth0 auth - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export const auth0 = createAuthProviderIntegration({ - create(options?: { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; - }) { - return createOAuthProviderFactory({ - authenticator: auth0Authenticator, - profileTransform: adaptLegacyOAuthHandler(options?.authHandler), - signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), - }); - }, -}); diff --git a/plugins/auth-backend/src/providers/auth0/strategy.ts b/plugins/auth-backend/src/providers/auth0/strategy.ts deleted file mode 100644 index cf5b522ec5..0000000000 --- a/plugins/auth-backend/src/providers/auth0/strategy.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import Auth0InternalStrategy from 'passport-auth0'; -import { StateStore } from 'passport-oauth2'; - -export interface Auth0StrategyOptionsWithRequest { - clientID: string; - clientSecret: string; - callbackURL: string; - domain: string; - passReqToCallback: true; - store: StateStore; -} - -export default class Auth0Strategy extends Auth0InternalStrategy { - constructor( - options: Auth0StrategyOptionsWithRequest, - verify: Auth0InternalStrategy.VerifyFunction, - ) { - const optionsWithURLs = { - ...options, - authorizationURL: `https://${options.domain}/authorize`, - tokenURL: `https://${options.domain}/oauth/token`, - userInfoURL: `https://${options.domain}/userinfo`, - apiUrl: `https://${options.domain}/api`, - }; - super(optionsWithURLs, verify); - } -} diff --git a/plugins/auth-backend/src/providers/aws-alb/index.ts b/plugins/auth-backend/src/providers/aws-alb/index.ts deleted file mode 100644 index 6784888b1f..0000000000 --- a/plugins/auth-backend/src/providers/aws-alb/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * 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 { awsAlb } from './provider'; -export type { AwsAlbResult } from './types'; diff --git a/plugins/auth-backend/src/providers/aws-alb/provider.ts b/plugins/auth-backend/src/providers/aws-alb/provider.ts deleted file mode 100644 index 18d4f42f32..0000000000 --- a/plugins/auth-backend/src/providers/aws-alb/provider.ts +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 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 { - AwsAlbResult, - awsAlbAuthenticator, -} from '@backstage/plugin-auth-backend-module-aws-alb-provider'; -import { - SignInResolver, - createProxyAuthProviderFactory, -} from '@backstage/plugin-auth-node'; -import { AuthHandler } from '../types'; -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; - -/** - * Auth provider integration for AWS ALB auth - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export const awsAlb = createAuthProviderIntegration({ - create(options?: { - /** - * The profile transformation function used to verify and convert the auth - * response into the profile that will be presented to the user. The default - * implementation just provides the authenticated email that the IAP - * presented. - */ - authHandler?: AuthHandler; - /** - * Configures sign-in for this provider. - */ - signIn: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; - }) { - return createProxyAuthProviderFactory({ - authenticator: awsAlbAuthenticator, - profileTransform: options?.authHandler, - signInResolver: options?.signIn?.resolver, - }); - }, -}); diff --git a/plugins/auth-backend/src/providers/aws-alb/types.ts b/plugins/auth-backend/src/providers/aws-alb/types.ts deleted file mode 100644 index 2640a4a7be..0000000000 --- a/plugins/auth-backend/src/providers/aws-alb/types.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - * 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 { AwsAlbResult as _AwsAlbResult } from '@backstage/plugin-auth-backend-module-aws-alb-provider'; - -/** - * The result of the initial auth challenge. This is the input to the auth - * callbacks. - * - * @public - * @deprecated import from `@backstage/plugin-auth-backend-module-aws-alb-provider` instead - */ -export type AwsAlbResult = _AwsAlbResult; diff --git a/plugins/auth-backend/src/providers/azure-easyauth/index.ts b/plugins/auth-backend/src/providers/azure-easyauth/index.ts deleted file mode 100644 index de50e32745..0000000000 --- a/plugins/auth-backend/src/providers/azure-easyauth/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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 { easyAuth } from './provider'; -import { AzureEasyAuthResult } from '@backstage/plugin-auth-backend-module-azure-easyauth-provider'; - -/** - * @public - * @deprecated import AzureEasyAuthResult from `@backstage/plugin-auth-backend-module-azure-easyauth-provider` instead - */ -export type EasyAuthResult = AzureEasyAuthResult; diff --git a/plugins/auth-backend/src/providers/azure-easyauth/provider.ts b/plugins/auth-backend/src/providers/azure-easyauth/provider.ts deleted file mode 100644 index 202f99a7e1..0000000000 --- a/plugins/auth-backend/src/providers/azure-easyauth/provider.ts +++ /dev/null @@ -1,58 +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 { - SignInResolver, - createProxyAuthProviderFactory, -} from '@backstage/plugin-auth-node'; -import { AuthHandler } from '../types'; -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { - AzureEasyAuthResult, - azureEasyAuthAuthenticator, -} from '@backstage/plugin-auth-backend-module-azure-easyauth-provider'; - -/** - * Auth provider integration for Azure EasyAuth - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export const easyAuth = createAuthProviderIntegration({ - create(options?: { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; - }) { - return createProxyAuthProviderFactory({ - authenticator: azureEasyAuthAuthenticator, - profileTransform: options?.authHandler, - signInResolver: options?.signIn?.resolver, - }); - }, -}); diff --git a/plugins/auth-backend/src/providers/bitbucket/index.ts b/plugins/auth-backend/src/providers/bitbucket/index.ts deleted file mode 100644 index 9d82c1066c..0000000000 --- a/plugins/auth-backend/src/providers/bitbucket/index.ts +++ /dev/null @@ -1,21 +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. - */ - -export { bitbucket } from './provider'; -export type { - BitbucketPassportProfile, - BitbucketOAuthResult, -} from './provider'; diff --git a/plugins/auth-backend/src/providers/bitbucket/provider.ts b/plugins/auth-backend/src/providers/bitbucket/provider.ts deleted file mode 100644 index 69ac2cf23b..0000000000 --- a/plugins/auth-backend/src/providers/bitbucket/provider.ts +++ /dev/null @@ -1,101 +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 { - bitbucketAuthenticator, - bitbucketSignInResolvers, -} from '@backstage/plugin-auth-backend-module-bitbucket-provider'; -import { - SignInResolver, - createOAuthProviderFactory, -} from '@backstage/plugin-auth-node'; -import { Profile as PassportProfile } from 'passport'; -import { - adaptLegacyOAuthHandler, - adaptLegacyOAuthSignInResolver, - adaptOAuthSignInResolverToLegacy, -} from '../../lib/legacy'; -import { OAuthResult } from '../../lib/oauth'; -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { AuthHandler } from '../types'; - -/** - * @public - * @deprecated The Bitbucket auth provider was extracted to `@backstage/plugin-auth-backend-module-bitbucket-provider`. - */ -export type BitbucketOAuthResult = { - fullProfile: BitbucketPassportProfile; - params: { - id_token?: string; - scope: string; - expires_in: number; - }; - accessToken: string; - refreshToken?: string; -}; - -/** - * @public - * @deprecated The Bitbucket auth provider was extracted to `@backstage/plugin-auth-backend-module-bitbucket-provider`. - */ -export type BitbucketPassportProfile = PassportProfile & { - id?: string; - displayName?: string; - username?: string; - avatarUrl?: string; - _json?: { - links?: { - avatar?: { - href?: string; - }; - }; - }; -}; - -/** - * Auth provider integration for Bitbucket auth - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export const bitbucket = createAuthProviderIntegration({ - create(options?: { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - resolver: SignInResolver; - }; - }) { - return createOAuthProviderFactory({ - authenticator: bitbucketAuthenticator, - profileTransform: adaptLegacyOAuthHandler(options?.authHandler), - signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), - }); - }, - resolvers: adaptOAuthSignInResolverToLegacy({ - userIdMatchingUserEntityAnnotation: - bitbucketSignInResolvers.userIdMatchingUserEntityAnnotation(), - usernameMatchingUserEntityAnnotation: - bitbucketSignInResolvers.usernameMatchingUserEntityAnnotation(), - }), -}); diff --git a/plugins/auth-backend/src/providers/bitbucketServer/index.ts b/plugins/auth-backend/src/providers/bitbucketServer/index.ts deleted file mode 100644 index cef12cd50d..0000000000 --- a/plugins/auth-backend/src/providers/bitbucketServer/index.ts +++ /dev/null @@ -1,18 +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. - */ - -export { bitbucketServer } from './provider'; -export type { BitbucketServerOAuthResult } from './provider'; diff --git a/plugins/auth-backend/src/providers/bitbucketServer/provider.ts b/plugins/auth-backend/src/providers/bitbucketServer/provider.ts deleted file mode 100644 index c49cf5b7b1..0000000000 --- a/plugins/auth-backend/src/providers/bitbucketServer/provider.ts +++ /dev/null @@ -1,116 +0,0 @@ -/* - * 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 { Profile as PassportProfile } from 'passport'; -import { - AuthResolverContext, - createOAuthProviderFactory, - SignInResolver, -} from '@backstage/plugin-auth-node'; -import { - bitbucketServerAuthenticator, - bitbucketServerSignInResolvers, -} from '@backstage/plugin-auth-backend-module-bitbucket-server-provider'; -import { OAuthProviderOptions } from '../../lib/oauth'; -import { - adaptLegacyOAuthHandler, - adaptLegacyOAuthSignInResolver, -} from '../../lib/legacy'; -import { AuthHandler } from '../types'; -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; - -/** - * @public - * @deprecated The Bitbucket Server auth provider was extracted to `@backstage/plugin-auth-backend-module-bitbucket-server-provider`. - */ -export type BitbucketServerOAuthResult = { - fullProfile: PassportProfile; - params: { - scope: string; - access_token?: string; - token_type?: string; - expires_in?: number; - }; - accessToken: string; - refreshToken?: string; -}; - -/** - * @public - * @deprecated The Bitbucket Server auth provider was extracted to `@backstage/plugin-auth-backend-module-bitbucket-server-provider`. - */ -export type BitbucketServerAuthProviderOptions = OAuthProviderOptions & { - host: string; - authorizationUrl: string; - tokenUrl: string; - authHandler: AuthHandler; - signInResolver?: SignInResolver; - resolverContext: AuthResolverContext; -}; - -export const bitbucketServer = createAuthProviderIntegration({ - create(options?: { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; - }) { - return createOAuthProviderFactory({ - authenticator: bitbucketServerAuthenticator, - profileTransform: adaptLegacyOAuthHandler(options?.authHandler), - signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), - }); - }, - resolvers: { - /** - * Looks up the user by matching their email to the entity email. - */ - emailMatchingUserEntityProfileEmail: - (): SignInResolver => { - const resolver = - bitbucketServerSignInResolvers.emailMatchingUserEntityProfileEmail(); - return async (info, ctx) => { - return resolver( - { - profile: info.profile, - result: { - fullProfile: info.result.fullProfile, - session: { - accessToken: info.result.accessToken, - tokenType: info.result.params.token_type ?? 'bearer', - scope: info.result.params.scope, - expiresInSeconds: info.result.params.expires_in, - refreshToken: info.result.refreshToken, - }, - }, - }, - ctx, - ); - }; - }, - }, -}); diff --git a/plugins/auth-backend/src/providers/cloudflare-access/index.ts b/plugins/auth-backend/src/providers/cloudflare-access/index.ts deleted file mode 100644 index 19b56bd825..0000000000 --- a/plugins/auth-backend/src/providers/cloudflare-access/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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. - */ - -export { cfAccess } from './provider'; -export type { - CloudflareAccessClaims, - CloudflareAccessGroup, - CloudflareAccessResult, - CloudflareAccessIdentityProfile, -} from './provider'; diff --git a/plugins/auth-backend/src/providers/cloudflare-access/provider.ts b/plugins/auth-backend/src/providers/cloudflare-access/provider.ts deleted file mode 100644 index 4710d60d47..0000000000 --- a/plugins/auth-backend/src/providers/cloudflare-access/provider.ts +++ /dev/null @@ -1,164 +0,0 @@ -/* - * 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 { - cloudflareAccessSignInResolvers, - createCloudflareAccessAuthenticator, -} from '@backstage/plugin-auth-backend-module-cloudflare-access-provider'; -import { - SignInResolver, - createProxyAuthProviderFactory, -} from '@backstage/plugin-auth-node'; -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { AuthHandler } from '../types'; -import { CacheService } from '@backstage/backend-plugin-api'; - -/** - * CloudflareAccessClaims - * - * Can be used in externally provided auth handler or sign in resolver to - * enrich user profile for sign-in user entity - * - * @public - * @deprecated import from `@backstage/plugin-auth-backend-module-cloudflare-access-provider` instead - */ -export type CloudflareAccessClaims = { - /** - * `aud` identifies the application to which the JWT is issued. - */ - aud: string[]; - /** - * `email` contains the email address of the authenticated user. - */ - email: string; - /** - * iat and exp are the issuance and expiration timestamps. - */ - exp: number; - iat: number; - /** - * `nonce` is the session identifier. - */ - nonce: string; - /** - * `identity_nonce` is available in the Application Token and can be used to - * query all group membership for a given user. - */ - identity_nonce: string; - /** - * `sub` contains the identifier of the authenticated user. - */ - sub: string; - /** - * `iss` the issuer is the application’s Cloudflare Access Domain URL. - */ - iss: string; - /** - * `custom` contains SAML attributes in the Application Token specified by an - * administrator in the identity provider configuration. - */ - custom: string; -}; - -/** - * CloudflareAccessGroup - * - * @public - * @deprecated import from `@backstage/plugin-auth-backend-module-cloudflare-access-provider` instead - */ -export type CloudflareAccessGroup = { - /** - * Group id - */ - id: string; - /** - * Name of group as defined in Cloudflare zero trust dashboard - */ - name: string; - /** - * Access group email address - */ - email: string; -}; - -/** - * CloudflareAccessIdentityProfile - * - * Can be used in externally provided auth handler or sign in resolver to - * enrich user profile for sign-in user entity - * - * @public - * @deprecated import from `@backstage/plugin-auth-backend-module-cloudflare-access-provider` instead - */ -export type CloudflareAccessIdentityProfile = { - id: string; - name: string; - email: string; - groups: CloudflareAccessGroup[]; -}; - -/** - * @public - * @deprecated import from `@backstage/plugin-auth-backend-module-cloudflare-access-provider` instead - */ -export type CloudflareAccessResult = { - claims: CloudflareAccessClaims; - cfIdentity: CloudflareAccessIdentityProfile; - expiresInSeconds?: number; - token: string; -}; - -/** - * Auth provider integration for Cloudflare Access auth - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export const cfAccess = createAuthProviderIntegration({ - create(options: { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; - - /** - * Cache service object that was configured for the Backstage backend, - * should be provided via the backend auth plugin. - */ - cache?: CacheService; - }) { - return createProxyAuthProviderFactory({ - authenticator: createCloudflareAccessAuthenticator({ - cache: options.cache, - }), - profileTransform: options?.authHandler, - signInResolver: options?.signIn?.resolver, - signInResolverFactories: cloudflareAccessSignInResolvers, - }); - }, - resolvers: cloudflareAccessSignInResolvers, -}); diff --git a/plugins/auth-backend/src/providers/createAuthProviderIntegration.ts b/plugins/auth-backend/src/providers/createAuthProviderIntegration.ts deleted file mode 100644 index 2f7bb4a4ec..0000000000 --- a/plugins/auth-backend/src/providers/createAuthProviderIntegration.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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 { - AuthProviderFactory, - SignInResolver, -} from '@backstage/plugin-auth-node'; - -/** - * Creates a standardized representation of an integration with a third-party - * auth provider. - * - * The returned object facilitates the creation of provider instances, and - * supplies built-in sign-in resolvers for the specific provider. - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export function createAuthProviderIntegration< - TCreateOptions extends unknown[], - TResolvers extends - | { - [name in string]: (...args: any[]) => SignInResolver; - }, ->(config: { - create: (...args: TCreateOptions) => AuthProviderFactory; - resolvers?: TResolvers; -}): Readonly<{ - create: (...args: TCreateOptions) => AuthProviderFactory; - // If no resolvers are defined, this receives the type `never` - resolvers: Readonly; -}> { - return Object.freeze({ - ...config, - resolvers: Object.freeze(config.resolvers ?? ({} as any)), - }); -} diff --git a/plugins/auth-backend/src/providers/gcp-iap/index.ts b/plugins/auth-backend/src/providers/gcp-iap/index.ts deleted file mode 100644 index 12f76ec142..0000000000 --- a/plugins/auth-backend/src/providers/gcp-iap/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * 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 { gcpIap } from './provider'; -export type { GcpIapResult, GcpIapTokenInfo } from './types'; diff --git a/plugins/auth-backend/src/providers/gcp-iap/provider.ts b/plugins/auth-backend/src/providers/gcp-iap/provider.ts deleted file mode 100644 index f40cb4ed25..0000000000 --- a/plugins/auth-backend/src/providers/gcp-iap/provider.ts +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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 { gcpIapAuthenticator } from '@backstage/plugin-auth-backend-module-gcp-iap-provider'; -import { - SignInResolver, - createProxyAuthProviderFactory, -} from '@backstage/plugin-auth-node'; -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { AuthHandler } from '../types'; -import { GcpIapResult } from './types'; - -/** - * Auth provider integration for Google Identity-Aware Proxy auth - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export const gcpIap = createAuthProviderIntegration({ - create(options: { - /** - * The profile transformation function used to verify and convert the auth - * response into the profile that will be presented to the user. The default - * implementation just provides the authenticated email that the IAP - * presented. - */ - authHandler?: AuthHandler; - - /** - * Configures sign-in for this provider. - */ - signIn: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; - }) { - return createProxyAuthProviderFactory({ - authenticator: gcpIapAuthenticator, - profileTransform: options?.authHandler, - signInResolver: options?.signIn?.resolver, - }); - }, -}); diff --git a/plugins/auth-backend/src/providers/gcp-iap/types.ts b/plugins/auth-backend/src/providers/gcp-iap/types.ts deleted file mode 100644 index b1f69318fc..0000000000 --- a/plugins/auth-backend/src/providers/gcp-iap/types.ts +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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 { - GcpIapTokenInfo as _GcpIapTokenInfo, - GcpIapResult as _GcpIapResult, -} from '@backstage/plugin-auth-backend-module-gcp-iap-provider'; - -/** - * The data extracted from an IAP token. - * - * @public - * @deprecated import from `@backstage/plugin-auth-backend-module-gcp-iap-provider` instead - */ -export type GcpIapTokenInfo = _GcpIapTokenInfo; - -/** - * The result of the initial auth challenge. This is the input to the auth - * callbacks. - * - * @public - * @deprecated import from `@backstage/plugin-auth-backend-module-gcp-iap-provider` instead - */ -export type GcpIapResult = _GcpIapResult; diff --git a/plugins/auth-backend/src/providers/github/index.ts b/plugins/auth-backend/src/providers/github/index.ts deleted file mode 100644 index 2f4bb1f6cd..0000000000 --- a/plugins/auth-backend/src/providers/github/index.ts +++ /dev/null @@ -1,18 +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. - */ - -export { github } from './provider'; -export type { GithubOAuthResult } from './provider'; diff --git a/plugins/auth-backend/src/providers/github/provider.ts b/plugins/auth-backend/src/providers/github/provider.ts deleted file mode 100644 index 6c6738ad57..0000000000 --- a/plugins/auth-backend/src/providers/github/provider.ts +++ /dev/null @@ -1,152 +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 { Profile as PassportProfile } from 'passport'; -import { AuthHandler, StateEncoder } from '../types'; -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { - createOAuthProviderFactory, - OAuthAuthenticatorResult, - ProfileTransform, - SignInResolver, -} from '@backstage/plugin-auth-node'; -import { githubAuthenticator } from '@backstage/plugin-auth-backend-module-github-provider'; - -/** - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export type GithubOAuthResult = { - fullProfile: PassportProfile; - params: { - scope: string; - expires_in?: string; - refresh_token_expires_in?: string; - }; - accessToken: string; - refreshToken?: string; -}; - -/** - * Auth provider integration for GitHub auth - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export const github = createAuthProviderIntegration({ - create(options?: { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; - - /** - * The state encoder used to encode the 'state' parameter on the OAuth request. - * - * It should return a string that takes the state params (from the request), url encodes the params - * and finally base64 encodes them. - * - * Providing your own stateEncoder will allow you to add addition parameters to the state field. - * - * It is typed as follows: - * `export type StateEncoder = (input: OAuthState) => Promise<{encodedState: string}>;` - * - * Note: the stateEncoder must encode a 'nonce' value and an 'env' value. Without this, the OAuth flow will fail - * (These two values will be set by the req.state by default) - * - * For more information, please see the helper module in ../../oauth/helpers #readState - */ - stateEncoder?: StateEncoder; - }) { - const authHandler = options?.authHandler; - const signInResolver = options?.signIn?.resolver; - return createOAuthProviderFactory({ - authenticator: githubAuthenticator, - profileTransform: - authHandler && - ((async (result, ctx) => - authHandler!( - { - fullProfile: result.fullProfile, - accessToken: result.session.accessToken, - params: { - scope: result.session.scope, - expires_in: result.session.expiresInSeconds - ? String(result.session.expiresInSeconds) - : '', - refresh_token_expires_in: result.session - .refreshTokenExpiresInSeconds - ? String(result.session.refreshTokenExpiresInSeconds) - : '', - }, - }, - ctx, - )) as ProfileTransform>), - signInResolver: - signInResolver && - ((async ({ profile, result }, ctx) => - signInResolver( - { - profile: profile, - result: { - fullProfile: result.fullProfile, - accessToken: result.session.accessToken, - refreshToken: result.session.refreshToken, - params: { - scope: result.session.scope, - expires_in: result.session.expiresInSeconds - ? String(result.session.expiresInSeconds) - : '', - refresh_token_expires_in: result.session - .refreshTokenExpiresInSeconds - ? String(result.session.refreshTokenExpiresInSeconds) - : '', - }, - }, - }, - ctx, - )) as SignInResolver>), - }); - }, - resolvers: { - /** - * Looks up the user by matching their GitHub username to the entity name. - */ - usernameMatchingUserEntityName: (): SignInResolver => { - return async (info, ctx) => { - const { fullProfile } = info.result; - - const userId = fullProfile.username; - if (!userId) { - throw new Error(`GitHub user profile does not contain a username`); - } - - return ctx.signInWithCatalogUser({ entityRef: { name: userId } }); - }; - }, - }, -}); diff --git a/plugins/auth-backend/src/providers/gitlab/index.ts b/plugins/auth-backend/src/providers/gitlab/index.ts deleted file mode 100644 index 9b60d1f18a..0000000000 --- a/plugins/auth-backend/src/providers/gitlab/index.ts +++ /dev/null @@ -1,17 +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. - */ - -export { gitlab } from './provider'; diff --git a/plugins/auth-backend/src/providers/gitlab/provider.ts b/plugins/auth-backend/src/providers/gitlab/provider.ts deleted file mode 100644 index 503145a805..0000000000 --- a/plugins/auth-backend/src/providers/gitlab/provider.ts +++ /dev/null @@ -1,57 +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 { AuthHandler } from '../types'; -import { OAuthResult } from '../../lib/oauth'; -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { - SignInResolver, - createOAuthProviderFactory, -} from '@backstage/plugin-auth-node'; -import { - adaptLegacyOAuthHandler, - adaptLegacyOAuthSignInResolver, -} from '../../lib/legacy'; -import { gitlabAuthenticator } from '@backstage/plugin-auth-backend-module-gitlab-provider'; - -/** - * Auth provider integration for GitLab auth - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export const gitlab = createAuthProviderIntegration({ - create(options?: { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - resolver: SignInResolver; - }; - }) { - return createOAuthProviderFactory({ - authenticator: gitlabAuthenticator, - profileTransform: adaptLegacyOAuthHandler(options?.authHandler), - signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), - }); - }, -}); diff --git a/plugins/auth-backend/src/providers/google/index.ts b/plugins/auth-backend/src/providers/google/index.ts deleted file mode 100644 index 5e8c3236e4..0000000000 --- a/plugins/auth-backend/src/providers/google/index.ts +++ /dev/null @@ -1,17 +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. - */ - -export { google } from './provider'; diff --git a/plugins/auth-backend/src/providers/google/provider.test.ts b/plugins/auth-backend/src/providers/google/provider.test.ts deleted file mode 100644 index abde2b66d1..0000000000 --- a/plugins/auth-backend/src/providers/google/provider.test.ts +++ /dev/null @@ -1,70 +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 { googleAuthenticator } from '@backstage/plugin-auth-backend-module-google-provider'; -import { createOAuthProviderFactory } from '@backstage/plugin-auth-node'; -import { google } from './provider'; - -jest.mock('@backstage/plugin-auth-node', () => ({ - ...jest.requireActual('@backstage/plugin-auth-node'), - createOAuthProviderFactory: jest.fn(() => 'provider-factory'), -})); - -describe('createGoogleProvider', () => { - afterEach(() => jest.clearAllMocks()); - - it('should be created', async () => { - expect(google.create()).toBe('provider-factory'); - - expect(createOAuthProviderFactory).toHaveBeenCalledWith({ - authenticator: googleAuthenticator, - }); - }); - - it('should be created with sign-in resolver', async () => { - expect(google.create({ signIn: { resolver: jest.fn() } })).toBe( - 'provider-factory', - ); - - expect(createOAuthProviderFactory).toHaveBeenCalledWith({ - authenticator: googleAuthenticator, - signInResolver: expect.any(Function), - }); - }); - - it('should be created with sign-in resolver and auth handler', async () => { - expect( - google.create({ - signIn: { resolver: jest.fn() }, - authHandler: jest.fn(), - }), - ).toBe('provider-factory'); - - expect(createOAuthProviderFactory).toHaveBeenCalledWith({ - authenticator: googleAuthenticator, - signInResolver: expect.any(Function), - profileTransform: expect.any(Function), - }); - }); - - it('should have resolvers', () => { - expect(google.resolvers).toEqual({ - emailLocalPartMatchingUserEntityName: expect.any(Function), - emailMatchingUserEntityAnnotation: expect.any(Function), - emailMatchingUserEntityProfileEmail: expect.any(Function), - }); - }); -}); diff --git a/plugins/auth-backend/src/providers/google/provider.ts b/plugins/auth-backend/src/providers/google/provider.ts deleted file mode 100644 index 99a9c40ecb..0000000000 --- a/plugins/auth-backend/src/providers/google/provider.ts +++ /dev/null @@ -1,73 +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 { - googleAuthenticator, - googleSignInResolvers, -} from '@backstage/plugin-auth-backend-module-google-provider'; -import { - SignInResolver, - commonSignInResolvers, - createOAuthProviderFactory, -} from '@backstage/plugin-auth-node'; -import { - adaptLegacyOAuthHandler, - adaptLegacyOAuthSignInResolver, - adaptOAuthSignInResolverToLegacy, -} from '../../lib/legacy'; -import { OAuthResult } from '../../lib/oauth'; -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { AuthHandler } from '../types'; - -/** - * Auth provider integration for Google auth - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export const google = createAuthProviderIntegration({ - create(options?: { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; - }) { - return createOAuthProviderFactory({ - authenticator: googleAuthenticator, - profileTransform: adaptLegacyOAuthHandler(options?.authHandler), - signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), - }); - }, - resolvers: adaptOAuthSignInResolverToLegacy({ - emailLocalPartMatchingUserEntityName: - commonSignInResolvers.emailLocalPartMatchingUserEntityName(), - emailMatchingUserEntityProfileEmail: - commonSignInResolvers.emailMatchingUserEntityProfileEmail(), - emailMatchingUserEntityAnnotation: - googleSignInResolvers.emailMatchingUserEntityAnnotation(), - }), -}); diff --git a/plugins/auth-backend/src/providers/index.ts b/plugins/auth-backend/src/providers/index.ts index b9543c275c..560ee25cc3 100644 --- a/plugins/auth-backend/src/providers/index.ts +++ b/plugins/auth-backend/src/providers/index.ts @@ -14,30 +14,8 @@ * limitations under the License. */ -export type { AwsAlbResult } from './aws-alb'; -export type { EasyAuthResult } from './azure-easyauth'; -export type { - BitbucketOAuthResult, - BitbucketPassportProfile, -} from './bitbucket'; -export type { BitbucketServerOAuthResult } from './bitbucketServer'; -export type { - CloudflareAccessClaims, - CloudflareAccessGroup, - CloudflareAccessResult, - CloudflareAccessIdentityProfile, -} from './cloudflare-access'; -export type { GithubOAuthResult } from './github'; -export type { OAuth2ProxyResult } from './oauth2-proxy'; -export type { OidcAuthResult } from './oidc'; -export type { SamlAuthResult } from './saml'; -export type { GcpIapResult, GcpIapTokenInfo } from './gcp-iap'; - -export { providers, defaultAuthProviderFactories } from './providers'; export { createOriginFilter, type ProviderFactories } from './router'; -export { createAuthProviderIntegration } from './createAuthProviderIntegration'; - export type { AuthProviderConfig, AuthProviderRouteHandlers, @@ -54,5 +32,3 @@ export type { ProfileInfo, OAuthStartResponse, } from './types'; - -export { prepareBackstageIdentityResponse } from './prepareBackstageIdentityResponse'; diff --git a/plugins/auth-backend/src/providers/microsoft/index.ts b/plugins/auth-backend/src/providers/microsoft/index.ts deleted file mode 100644 index 16dadc3bb0..0000000000 --- a/plugins/auth-backend/src/providers/microsoft/index.ts +++ /dev/null @@ -1,17 +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. - */ - -export { microsoft } from './provider'; diff --git a/plugins/auth-backend/src/providers/microsoft/provider.ts b/plugins/auth-backend/src/providers/microsoft/provider.ts deleted file mode 100644 index f461fe8341..0000000000 --- a/plugins/auth-backend/src/providers/microsoft/provider.ts +++ /dev/null @@ -1,72 +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 { AuthHandler } from '../types'; -import { OAuthResult } from '../../lib/oauth'; -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { - SignInResolver, - commonSignInResolvers, - createOAuthProviderFactory, -} from '@backstage/plugin-auth-node'; -import { - adaptLegacyOAuthHandler, - adaptLegacyOAuthSignInResolver, - adaptOAuthSignInResolverToLegacy, -} from '../../lib/legacy'; -import { - microsoftAuthenticator, - microsoftSignInResolvers, -} from '@backstage/plugin-auth-backend-module-microsoft-provider'; - -/** - * Auth provider integration for Microsoft auth - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export const microsoft = createAuthProviderIntegration({ - create(options?: { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - resolver: SignInResolver; - }; - }) { - return createOAuthProviderFactory({ - authenticator: microsoftAuthenticator, - profileTransform: adaptLegacyOAuthHandler(options?.authHandler), - signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), - }); - }, - resolvers: adaptOAuthSignInResolverToLegacy({ - emailLocalPartMatchingUserEntityName: - commonSignInResolvers.emailLocalPartMatchingUserEntityName(), - emailMatchingUserEntityProfileEmail: - commonSignInResolvers.emailMatchingUserEntityProfileEmail(), - emailMatchingUserEntityAnnotation: - microsoftSignInResolvers.emailMatchingUserEntityAnnotation(), - userIdMatchingUserEntityAnnotation: - microsoftSignInResolvers.userIdMatchingUserEntityAnnotation(), - }), -}); diff --git a/plugins/auth-backend/src/providers/oauth2-proxy/index.ts b/plugins/auth-backend/src/providers/oauth2-proxy/index.ts deleted file mode 100644 index 2e4e7d016f..0000000000 --- a/plugins/auth-backend/src/providers/oauth2-proxy/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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 { oauth2Proxy } from './provider'; -import { OAuth2ProxyResult as _OAuth2ProxyResult } from '@backstage/plugin-auth-backend-module-oauth2-proxy-provider'; - -/** - * @public - * @deprecated import from `@backstage/plugin-auth-backend-module-oauth2-proxy-provider` instead - */ -export type OAuth2ProxyResult = _OAuth2ProxyResult; diff --git a/plugins/auth-backend/src/providers/oauth2-proxy/provider.ts b/plugins/auth-backend/src/providers/oauth2-proxy/provider.ts deleted file mode 100644 index cbd02d18ea..0000000000 --- a/plugins/auth-backend/src/providers/oauth2-proxy/provider.ts +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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 { - SignInResolver, - createProxyAuthProviderFactory, -} from '@backstage/plugin-auth-node'; -import { AuthHandler } from '../types'; -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { - type OAuth2ProxyResult, - oauth2ProxyAuthenticator, -} from '@backstage/plugin-auth-backend-module-oauth2-proxy-provider'; - -/** - * Auth provider integration for oauth2-proxy auth - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export const oauth2Proxy = createAuthProviderIntegration({ - create(options: { - /** - * Configure an auth handler to generate a profile for the user. - * - * The default implementation uses the value of the `X-Forwarded-Preferred-Username` - * header as the display name, falling back to `X-Forwarded-User`, and the value of - * the `X-Forwarded-Email` header as the email address. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; - }) { - return createProxyAuthProviderFactory({ - authenticator: oauth2ProxyAuthenticator, - profileTransform: options?.authHandler, - signInResolver: options?.signIn?.resolver, - }); - }, -}); diff --git a/plugins/auth-backend/src/providers/oauth2/index.ts b/plugins/auth-backend/src/providers/oauth2/index.ts deleted file mode 100644 index 14485e04ff..0000000000 --- a/plugins/auth-backend/src/providers/oauth2/index.ts +++ /dev/null @@ -1,17 +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. - */ - -export { oauth2 } from './provider'; diff --git a/plugins/auth-backend/src/providers/oauth2/provider.ts b/plugins/auth-backend/src/providers/oauth2/provider.ts deleted file mode 100644 index b9ab928730..0000000000 --- a/plugins/auth-backend/src/providers/oauth2/provider.ts +++ /dev/null @@ -1,50 +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 { OAuthResult } from '../../lib/oauth'; -import { AuthHandler } from '../types'; -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { - adaptLegacyOAuthHandler, - adaptLegacyOAuthSignInResolver, -} from '../../lib/legacy'; -import { - SignInResolver, - createOAuthProviderFactory, -} from '@backstage/plugin-auth-node'; -import { oauth2Authenticator } from '@backstage/plugin-auth-backend-module-oauth2-provider'; - -/** - * Auth provider integration for generic OAuth2 auth - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export const oauth2 = createAuthProviderIntegration({ - create(options?: { - authHandler?: AuthHandler; - - signIn?: { - resolver: SignInResolver; - }; - }) { - return createOAuthProviderFactory({ - authenticator: oauth2Authenticator, - profileTransform: adaptLegacyOAuthHandler(options?.authHandler), - signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), - }); - }, -}); diff --git a/plugins/auth-backend/src/providers/oidc/index.ts b/plugins/auth-backend/src/providers/oidc/index.ts deleted file mode 100644 index 501f223fb3..0000000000 --- a/plugins/auth-backend/src/providers/oidc/index.ts +++ /dev/null @@ -1,25 +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. - */ - -export { oidc } from './provider'; - -import { OidcAuthResult as OidcAuthResult_ } from '@backstage/plugin-auth-backend-module-oidc-provider'; - -/** - * @public - * @deprecated Use OidcAuthResult from `@backstage/plugin-auth-backend-module-oidc-provider` instead - */ -export type OidcAuthResult = OidcAuthResult_; diff --git a/plugins/auth-backend/src/providers/oidc/provider.test.ts b/plugins/auth-backend/src/providers/oidc/provider.test.ts deleted file mode 100644 index 773c5c8bb9..0000000000 --- a/plugins/auth-backend/src/providers/oidc/provider.test.ts +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright 2024 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 { - mockServices, - registerMswTestHooks, -} from '@backstage/backend-test-utils'; -import { LoggerService } from '@backstage/backend-plugin-api'; -import { Config, ConfigReader } from '@backstage/config'; -import { - AuthProviderConfig, - AuthResolverContext, - CookieConfigurer, -} from '@backstage/plugin-auth-node'; -import express from 'express'; -import { JWK, SignJWT, exportJWK, generateKeyPair } from 'jose'; -import { rest } from 'msw'; -import { setupServer } from 'msw/node'; -import { oidc } from './provider'; - -describe('oidc.create', () => { - const userinfo = { - sub: 'test', - iss: 'https://oidc.test', - aud: 'clientId', - nonce: 'foo', - }; - const server = setupServer(); - registerMswTestHooks(server); - - let publicKey: JWK; - let tokenset: object; - let providerFactoryOptions: { - providerId: string; - globalConfig: AuthProviderConfig; - config: Config; - logger: LoggerService; - resolverContext: AuthResolverContext; - baseUrl: string; - appUrl: string; - isOriginAllowed: (origin: string) => boolean; - cookieConfigurer?: CookieConfigurer; - }; - - beforeAll(async () => { - const keyPair = await generateKeyPair('RS256'); - const privateKey = await exportJWK(keyPair.privateKey); - publicKey = await exportJWK(keyPair.publicKey); - publicKey.alg = privateKey.alg = 'RS256'; - - tokenset = { - id_token: await new SignJWT({ - iat: Date.now(), - exp: Date.now() + 10000, - ...userinfo, - }) - .setProtectedHeader({ alg: privateKey.alg, kid: privateKey.kid }) - .sign(keyPair.privateKey), - access_token: 'accessToken', - }; - }); - - beforeEach(() => { - server.use( - rest.get( - 'https://oidc.test/.well-known/openid-configuration', - (_req, res, ctx) => - res( - ctx.json({ - issuer: 'https://oidc.test', - token_endpoint: 'https://oidc.test/oauth2/token', - userinfo_endpoint: 'https://oidc.test/idp/userinfo.openid', - jwks_uri: 'https://oidc.test/jwks.json', - }), - ), - ), - rest.post('https://oidc.test/oauth2/token', (_req, res, ctx) => - res(ctx.json(tokenset)), - ), - rest.get('https://oidc.test/jwks.json', async (_req, res, ctx) => - res(ctx.json({ keys: [{ ...publicKey }] })), - ), - rest.get( - 'https://oidc.test/idp/userinfo.openid', - async (_req, res, ctx) => res(ctx.json(userinfo)), - ), - ); - providerFactoryOptions = { - providerId: 'myoidc', - baseUrl: 'http://backstage.test/api/auth', - appUrl: 'http://backstage.test', - isOriginAllowed: _ => true, - globalConfig: { - baseUrl: 'http://backstage.test/api/auth', - appUrl: 'http://backstage.test', - isOriginAllowed: _ => true, - }, - config: new ConfigReader({ - development: { - metadataUrl: 'https://oidc.test/.well-known/openid-configuration', - clientId: 'clientId', - clientSecret: 'clientSecret', - }, - }), - logger: mockServices.logger.mock(), - resolverContext: { - issueToken: jest.fn(), - findCatalogUser: jest.fn(), - signInWithCatalogUser: jest.fn(), - resolveOwnershipEntityRefs: jest.fn(), - }, - }; - }); - - it('invokes authHandler with tokenset and userinfo response', async () => { - const authHandler = jest.fn(); - const provider = oidc.create({ authHandler })(providerFactoryOptions); - const state = Buffer.from('nonce=foo&env=development').toString('hex'); - - await provider.frameHandler( - { - method: 'GET', - url: `http://backstage.test/api/auth/myoidc/handler/frame?code=blahblah&state=${state}`, - query: { state }, - cookies: { 'myoidc-nonce': 'foo' }, - session: { 'oidc:oidc.test': { state, nonce: 'foo' } }, - } as unknown as express.Request, - { setHeader: jest.fn(), end: jest.fn() } as unknown as express.Response, - ); - - expect(authHandler).toHaveBeenCalledWith( - { tokenset, userinfo }, - providerFactoryOptions.resolverContext, - ); - }); - - it('invokes sign-in resolver with tokenset and userinfo response', async () => { - const resolver = jest.fn(); - const provider = oidc.create({ signIn: { resolver } })( - providerFactoryOptions, - ); - const state = Buffer.from('nonce=foo&env=development').toString('hex'); - - await provider.frameHandler( - { - method: 'GET', - url: `http://backstage.test/api/auth/myoidc/handler/frame?code=blahblah&state=${state}`, - query: { state }, - cookies: { 'myoidc-nonce': 'foo' }, - session: { 'oidc:oidc.test': { state, nonce: 'foo' } }, - } as unknown as express.Request, - { setHeader: jest.fn(), end: jest.fn() } as unknown as express.Response, - ); - - expect(resolver).toHaveBeenCalledWith( - expect.objectContaining({ result: { tokenset, userinfo } }), - providerFactoryOptions.resolverContext, - ); - }); -}); diff --git a/plugins/auth-backend/src/providers/oidc/provider.ts b/plugins/auth-backend/src/providers/oidc/provider.ts deleted file mode 100644 index 6caf97ef7c..0000000000 --- a/plugins/auth-backend/src/providers/oidc/provider.ts +++ /dev/null @@ -1,93 +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 { AuthHandler } from '../types'; -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { - createOAuthProviderFactory, - AuthResolverContext, - BackstageSignInResult, - OAuthAuthenticatorResult, - SignInInfo, - SignInResolver, -} from '@backstage/plugin-auth-node'; -import { - oidcAuthenticator, - OidcAuthResult, -} from '@backstage/plugin-auth-backend-module-oidc-provider'; -import { - commonByEmailLocalPartResolver, - commonByEmailResolver, -} from '../resolvers'; - -/** - * Auth provider integration for generic OpenID Connect auth - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export const oidc = createAuthProviderIntegration({ - create(options?: { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider; convert user profile respones into - * Backstage identities. - */ - signIn?: { - resolver: SignInResolver; - }; - }) { - const authHandler = options?.authHandler; - const signInResolver = options?.signIn?.resolver; - return createOAuthProviderFactory({ - authenticator: oidcAuthenticator, - profileTransform: - authHandler && - (( - result: OAuthAuthenticatorResult, - context: AuthResolverContext, - ) => authHandler(result.fullProfile, context)), - signInResolver: - signInResolver && - (( - info: SignInInfo>, - context: AuthResolverContext, - ): Promise => - signInResolver( - { - result: info.result.fullProfile, - profile: info.profile, - }, - context, - )), - }); - }, - resolvers: { - /** - * Looks up the user by matching their email local part to the entity name. - */ - emailLocalPartMatchingUserEntityName: () => commonByEmailLocalPartResolver, - /** - * Looks up the user by matching their email to the entity email. - */ - emailMatchingUserEntityProfileEmail: () => commonByEmailResolver, - }, -}); diff --git a/plugins/auth-backend/src/providers/okta/index.ts b/plugins/auth-backend/src/providers/okta/index.ts deleted file mode 100644 index 3387fa3668..0000000000 --- a/plugins/auth-backend/src/providers/okta/index.ts +++ /dev/null @@ -1,17 +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. - */ - -export { okta } from './provider'; diff --git a/plugins/auth-backend/src/providers/okta/provider.ts b/plugins/auth-backend/src/providers/okta/provider.ts deleted file mode 100644 index 5746e12710..0000000000 --- a/plugins/auth-backend/src/providers/okta/provider.ts +++ /dev/null @@ -1,89 +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 { AuthHandler } from '../types'; -import { OAuthResult } from '../../lib/oauth'; - -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { - SignInResolver, - createOAuthProviderFactory, -} from '@backstage/plugin-auth-node'; -import { - adaptLegacyOAuthHandler, - adaptLegacyOAuthSignInResolver, -} from '../../lib/legacy'; -import { oktaAuthenticator } from '@backstage/plugin-auth-backend-module-okta-provider'; -import { - commonByEmailLocalPartResolver, - commonByEmailResolver, -} from '../resolvers'; - -/** - * Auth provider integration for Okta auth - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export const okta = createAuthProviderIntegration({ - create(options?: { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - resolver: SignInResolver; - }; - }) { - return createOAuthProviderFactory({ - authenticator: oktaAuthenticator, - profileTransform: adaptLegacyOAuthHandler(options?.authHandler), - signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), - }); - }, - resolvers: { - /** - * Looks up the user by matching their email local part to the entity name. - */ - emailLocalPartMatchingUserEntityName: () => commonByEmailLocalPartResolver, - /** - * Looks up the user by matching their email to the entity email. - */ - emailMatchingUserEntityProfileEmail: () => commonByEmailResolver, - /** - * Looks up the user by matching their email to the `okta.com/email` annotation. - */ - emailMatchingUserEntityAnnotation(): SignInResolver { - return async (info, ctx) => { - const { profile } = info; - - if (!profile.email) { - throw new Error('Okta profile contained no email'); - } - - return ctx.signInWithCatalogUser({ - annotations: { - 'okta.com/email': profile.email, - }, - }); - }; - }, - }, -}); diff --git a/plugins/auth-backend/src/providers/onelogin/index.ts b/plugins/auth-backend/src/providers/onelogin/index.ts deleted file mode 100644 index 3f356029fb..0000000000 --- a/plugins/auth-backend/src/providers/onelogin/index.ts +++ /dev/null @@ -1,17 +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. - */ - -export { onelogin } from './provider'; diff --git a/plugins/auth-backend/src/providers/onelogin/provider.ts b/plugins/auth-backend/src/providers/onelogin/provider.ts deleted file mode 100644 index 808e6c15d3..0000000000 --- a/plugins/auth-backend/src/providers/onelogin/provider.ts +++ /dev/null @@ -1,60 +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 { oneLoginAuthenticator } from '@backstage/plugin-auth-backend-module-onelogin-provider'; -import { - SignInResolver, - createOAuthProviderFactory, -} from '@backstage/plugin-auth-node'; -import { - adaptLegacyOAuthHandler, - adaptLegacyOAuthSignInResolver, -} from '../../lib/legacy'; -import { OAuthResult } from '../../lib/oauth'; -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { AuthHandler } from '../types'; - -/** - * Auth provider integration for OneLogin auth - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export const onelogin = createAuthProviderIntegration({ - create(options?: { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; - }) { - return createOAuthProviderFactory({ - authenticator: oneLoginAuthenticator, - profileTransform: adaptLegacyOAuthHandler(options?.authHandler), - signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), - }); - }, -}); diff --git a/plugins/auth-backend/src/providers/prepareBackstageIdentityResponse.ts b/plugins/auth-backend/src/providers/prepareBackstageIdentityResponse.ts deleted file mode 100644 index 1fa8f4a2fa..0000000000 --- a/plugins/auth-backend/src/providers/prepareBackstageIdentityResponse.ts +++ /dev/null @@ -1,24 +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 { prepareBackstageIdentityResponse as _prepareBackstageIdentityResponse } from '@backstage/plugin-auth-node'; - -/** - * @public - * @deprecated import from `@backstage/plugin-auth-node` instead - */ -export const prepareBackstageIdentityResponse = - _prepareBackstageIdentityResponse; diff --git a/plugins/auth-backend/src/providers/providers.ts b/plugins/auth-backend/src/providers/providers.ts deleted file mode 100644 index ce513e6ac7..0000000000 --- a/plugins/auth-backend/src/providers/providers.ts +++ /dev/null @@ -1,88 +0,0 @@ -/* - * 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 { atlassian } from './atlassian'; -import { auth0 } from './auth0'; -import { awsAlb } from './aws-alb'; -import { bitbucket } from './bitbucket'; -import { cfAccess } from './cloudflare-access'; -import { gcpIap } from './gcp-iap'; -import { github } from './github'; -import { gitlab } from './gitlab'; -import { google } from './google'; -import { microsoft } from './microsoft'; -import { oauth2 } from './oauth2'; -import { oauth2Proxy } from './oauth2-proxy'; -import { oidc } from './oidc'; -import { okta } from './okta'; -import { onelogin } from './onelogin'; -import { saml } from './saml'; -import { bitbucketServer } from './bitbucketServer'; -import { easyAuth } from './azure-easyauth'; -import { AuthProviderFactory } from '@backstage/plugin-auth-node'; - -/** - * All built-in auth provider integrations. - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export const providers = Object.freeze({ - atlassian, - auth0, - awsAlb, - bitbucket, - bitbucketServer, - cfAccess, - gcpIap, - github, - gitlab, - google, - microsoft, - oauth2, - oauth2Proxy, - oidc, - okta, - onelogin, - saml, - easyAuth, -}); - -/** - * All auth provider factories that are installed by default. - * - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export const defaultAuthProviderFactories: { - [providerId: string]: AuthProviderFactory; -} = { - google: google.create(), - github: github.create(), - gitlab: gitlab.create(), - saml: saml.create(), - okta: okta.create(), - auth0: auth0.create(), - microsoft: microsoft.create(), - easyAuth: easyAuth.create(), - oauth2: oauth2.create(), - oidc: oidc.create(), - onelogin: onelogin.create(), - awsalb: awsAlb.create(), - bitbucket: bitbucket.create(), - bitbucketServer: bitbucketServer.create(), - atlassian: atlassian.create(), -}; diff --git a/plugins/auth-backend/src/providers/saml/index.ts b/plugins/auth-backend/src/providers/saml/index.ts deleted file mode 100644 index d59f7bf0a7..0000000000 --- a/plugins/auth-backend/src/providers/saml/index.ts +++ /dev/null @@ -1,18 +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. - */ - -export { saml } from './provider'; -export type { SamlAuthResult } from './provider'; diff --git a/plugins/auth-backend/src/providers/saml/provider.ts b/plugins/auth-backend/src/providers/saml/provider.ts deleted file mode 100644 index 7797de897b..0000000000 --- a/plugins/auth-backend/src/providers/saml/provider.ts +++ /dev/null @@ -1,217 +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 express from 'express'; -import { SamlConfig, VerifiedCallback } from '@node-saml/passport-saml'; -import { - Strategy as SamlStrategy, - Profile as SamlProfile, - VerifyWithoutRequest, -} from '@node-saml/passport-saml'; -import { - executeFrameHandlerStrategy, - executeRedirectStrategy, -} from '../../lib/passport'; -import { AuthHandler } from '../types'; -import { postMessageResponse } from '../../lib/flow'; -import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { AuthenticationError, isError } from '@backstage/errors'; -import { prepareBackstageIdentityResponse } from '../prepareBackstageIdentityResponse'; -import { - AuthProviderRouteHandlers, - AuthResolverContext, - ClientAuthResponse, - SignInResolver, -} from '@backstage/plugin-auth-node'; - -/** - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ -export type SamlAuthResult = { - fullProfile: any; -}; - -type Options = SamlConfig & { - signInResolver?: SignInResolver; - authHandler: AuthHandler; - resolverContext: AuthResolverContext; - appUrl: string; -}; - -export class SamlAuthProvider implements AuthProviderRouteHandlers { - private readonly strategy: SamlStrategy; - private readonly signInResolver?: SignInResolver; - private readonly authHandler: AuthHandler; - private readonly resolverContext: AuthResolverContext; - private readonly appUrl: string; - - constructor(options: Options) { - this.appUrl = options.appUrl; - this.signInResolver = options.signInResolver; - this.authHandler = options.authHandler; - this.resolverContext = options.resolverContext; - - const verifier: VerifyWithoutRequest = ( - profile: SamlProfile | null, - done: VerifiedCallback, - ) => { - // TODO: There's plenty more validation and profile handling to do here, - // this provider is currently only intended to validate the provider pattern - // for non-oauth auth flows. - // TODO: This flow doesn't issue an identity token that can be used to validate - // the identity of the user in other backends, which we need in some form. - done(null, { fullProfile: profile }); - }; - this.strategy = new SamlStrategy(options, verifier, verifier); - } - - async start(req: express.Request, res: express.Response): Promise { - const { url } = await executeRedirectStrategy(req, this.strategy, {}); - res.redirect(url); - } - - async frameHandler( - req: express.Request, - res: express.Response, - ): Promise { - try { - const { result } = await executeFrameHandlerStrategy( - req, - this.strategy, - ); - - const { profile } = await this.authHandler(result, this.resolverContext); - - const response: ClientAuthResponse<{}> = { - profile, - providerInfo: {}, - }; - - if (this.signInResolver) { - const signInResponse = await this.signInResolver( - { - result, - profile, - }, - this.resolverContext, - ); - - response.backstageIdentity = - prepareBackstageIdentityResponse(signInResponse); - } - - return postMessageResponse(res, this.appUrl, { - type: 'authorization_response', - response, - }); - } catch (error) { - const { name, message } = isError(error) - ? error - : new Error('Encountered invalid error'); // Being a bit safe and not forwarding the bad value - return postMessageResponse(res, this.appUrl, { - type: 'authorization_response', - error: { name, message }, - }); - } - } - - async logout(_req: express.Request, res: express.Response): Promise { - res.end(); - } -} - -type SignatureAlgorithm = 'sha1' | 'sha256' | 'sha512'; - -/** - * Auth provider integration for SAML auth - * - * @public - */ -export const saml = createAuthProviderIntegration({ - create(options?: { - /** - * The profile transformation function used to verify and convert the auth response - * into the profile that will be presented to the user. - */ - authHandler?: AuthHandler; - - /** - * Configure sign-in for this provider, without it the provider can not be used to sign users in. - */ - signIn?: { - /** - * Maps an auth result to a Backstage identity for the user. - */ - resolver: SignInResolver; - }; - }) { - return ({ providerId, globalConfig, config, resolverContext }) => { - const authHandler: AuthHandler = options?.authHandler - ? options.authHandler - : async ({ fullProfile }) => ({ - profile: { - email: fullProfile.email, - displayName: fullProfile.displayName, - }, - }); - - return new SamlAuthProvider({ - callbackUrl: `${globalConfig.baseUrl}/${providerId}/handler/frame`, - entryPoint: config.getString('entryPoint'), - logoutUrl: config.getOptionalString('logoutUrl'), - audience: config.getString('audience'), - issuer: config.getString('issuer'), - idpCert: config.getString('cert'), - privateKey: config.getOptionalString('privateKey'), - authnContext: config.getOptionalStringArray('authnContext'), - identifierFormat: config.getOptionalString('identifierFormat'), - decryptionPvk: config.getOptionalString('decryptionPvk'), - signatureAlgorithm: config.getOptionalString('signatureAlgorithm') as - | SignatureAlgorithm - | undefined, - digestAlgorithm: config.getOptionalString('digestAlgorithm'), - acceptedClockSkewMs: config.getOptionalNumber('acceptedClockSkewMs'), - wantAuthnResponseSigned: config.getOptionalBoolean( - 'wantAuthnResponseSigned', - ), - wantAssertionsSigned: config.getOptionalBoolean('wantAssertionsSigned'), - appUrl: globalConfig.appUrl, - authHandler, - signInResolver: options?.signIn?.resolver, - resolverContext, - }); - }; - }, - resolvers: { - /** - * Looks up the user by matching their nameID to the entity name. - */ - nameIdMatchingUserEntityName(): SignInResolver { - return async (info, ctx) => { - const id = info.result.fullProfile.nameID; - - if (!id) { - throw new AuthenticationError('No nameID found in SAML response'); - } - - return ctx.signInWithCatalogUser({ - entityRef: { name: id }, - }); - }; - }, - }, -}); diff --git a/plugins/auth-backend/src/service/router.ts b/plugins/auth-backend/src/service/router.ts index af34ffc310..070c9f905f 100644 --- a/plugins/auth-backend/src/service/router.ts +++ b/plugins/auth-backend/src/service/router.ts @@ -25,7 +25,6 @@ import { LoggerService, RootConfigService, } from '@backstage/backend-plugin-api'; -import { defaultAuthProviderFactories } from '../providers'; import { AuthOwnershipResolver } from '@backstage/plugin-auth-node'; import { TokenManager, @@ -49,10 +48,6 @@ import { StaticTokenIssuer } from '../identity/StaticTokenIssuer'; import { StaticKeyStore } from '../identity/StaticKeyStore'; import { bindProviderRouters, ProviderFactories } from '../providers/router'; -/** - * @public - * @deprecated Please migrate to the new backend system as this will be removed in the future. - */ export interface RouterOptions { logger: LoggerService; database: DatabaseService; @@ -63,15 +58,10 @@ export interface RouterOptions { httpAuth?: HttpAuthService; tokenFactoryAlgorithm?: string; providerFactories?: ProviderFactories; - disableDefaultProviderFactories?: boolean; catalogApi?: CatalogApi; ownershipResolver?: AuthOwnershipResolver; } -/** - * @public - * @deprecated Please migrate to the new backend system as this will be removed in the future. - */ export async function createRouter( options: RouterOptions, ): Promise { @@ -151,15 +141,8 @@ export async function createRouter( router.use(express.urlencoded({ extended: false })); router.use(express.json()); - const providers = options.disableDefaultProviderFactories - ? providerFactories - : { - ...defaultAuthProviderFactories, - ...providerFactories, - }; - bindProviderRouters(router, { - providers, + providers: providerFactories, appUrl, baseUrl: authUrl, tokenIssuer, diff --git a/yarn.lock b/yarn.lock index c6ba66b2f0..3337a6ee2f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4902,7 +4902,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-atlassian-provider@workspace:^, @backstage/plugin-auth-backend-module-atlassian-provider@workspace:plugins/auth-backend-module-atlassian-provider": +"@backstage/plugin-auth-backend-module-atlassian-provider@workspace:plugins/auth-backend-module-atlassian-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-atlassian-provider@workspace:plugins/auth-backend-module-atlassian-provider" dependencies: @@ -4920,7 +4920,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-auth0-provider@workspace:^, @backstage/plugin-auth-backend-module-auth0-provider@workspace:plugins/auth-backend-module-auth0-provider": +"@backstage/plugin-auth-backend-module-auth0-provider@workspace:plugins/auth-backend-module-auth0-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-auth0-provider@workspace:plugins/auth-backend-module-auth0-provider" dependencies: @@ -4940,7 +4940,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-aws-alb-provider@workspace:^, @backstage/plugin-auth-backend-module-aws-alb-provider@workspace:plugins/auth-backend-module-aws-alb-provider": +"@backstage/plugin-auth-backend-module-aws-alb-provider@workspace:plugins/auth-backend-module-aws-alb-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-aws-alb-provider@workspace:plugins/auth-backend-module-aws-alb-provider" dependencies: @@ -4959,7 +4959,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-azure-easyauth-provider@workspace:^, @backstage/plugin-auth-backend-module-azure-easyauth-provider@workspace:plugins/auth-backend-module-azure-easyauth-provider": +"@backstage/plugin-auth-backend-module-azure-easyauth-provider@workspace:plugins/auth-backend-module-azure-easyauth-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-azure-easyauth-provider@workspace:plugins/auth-backend-module-azure-easyauth-provider" dependencies: @@ -4977,7 +4977,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-bitbucket-provider@workspace:^, @backstage/plugin-auth-backend-module-bitbucket-provider@workspace:plugins/auth-backend-module-bitbucket-provider": +"@backstage/plugin-auth-backend-module-bitbucket-provider@workspace:plugins/auth-backend-module-bitbucket-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-bitbucket-provider@workspace:plugins/auth-backend-module-bitbucket-provider" dependencies: @@ -4995,7 +4995,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-bitbucket-server-provider@workspace:^, @backstage/plugin-auth-backend-module-bitbucket-server-provider@workspace:plugins/auth-backend-module-bitbucket-server-provider": +"@backstage/plugin-auth-backend-module-bitbucket-server-provider@workspace:plugins/auth-backend-module-bitbucket-server-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-bitbucket-server-provider@workspace:plugins/auth-backend-module-bitbucket-server-provider" dependencies: @@ -5013,7 +5013,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-cloudflare-access-provider@workspace:^, @backstage/plugin-auth-backend-module-cloudflare-access-provider@workspace:plugins/auth-backend-module-cloudflare-access-provider": +"@backstage/plugin-auth-backend-module-cloudflare-access-provider@workspace:plugins/auth-backend-module-cloudflare-access-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-cloudflare-access-provider@workspace:plugins/auth-backend-module-cloudflare-access-provider" dependencies: @@ -5034,7 +5034,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-gcp-iap-provider@workspace:^, @backstage/plugin-auth-backend-module-gcp-iap-provider@workspace:plugins/auth-backend-module-gcp-iap-provider": +"@backstage/plugin-auth-backend-module-gcp-iap-provider@workspace:plugins/auth-backend-module-gcp-iap-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-gcp-iap-provider@workspace:plugins/auth-backend-module-gcp-iap-provider" dependencies: @@ -5065,7 +5065,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-gitlab-provider@workspace:^, @backstage/plugin-auth-backend-module-gitlab-provider@workspace:plugins/auth-backend-module-gitlab-provider": +"@backstage/plugin-auth-backend-module-gitlab-provider@workspace:plugins/auth-backend-module-gitlab-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-gitlab-provider@workspace:plugins/auth-backend-module-gitlab-provider" dependencies: @@ -5083,7 +5083,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-google-provider@workspace:^, @backstage/plugin-auth-backend-module-google-provider@workspace:plugins/auth-backend-module-google-provider": +"@backstage/plugin-auth-backend-module-google-provider@workspace:plugins/auth-backend-module-google-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-google-provider@workspace:plugins/auth-backend-module-google-provider" dependencies: @@ -5116,7 +5116,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-microsoft-provider@workspace:^, @backstage/plugin-auth-backend-module-microsoft-provider@workspace:plugins/auth-backend-module-microsoft-provider": +"@backstage/plugin-auth-backend-module-microsoft-provider@workspace:plugins/auth-backend-module-microsoft-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-microsoft-provider@workspace:plugins/auth-backend-module-microsoft-provider" dependencies: @@ -5137,7 +5137,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-oauth2-provider@workspace:^, @backstage/plugin-auth-backend-module-oauth2-provider@workspace:plugins/auth-backend-module-oauth2-provider": +"@backstage/plugin-auth-backend-module-oauth2-provider@workspace:plugins/auth-backend-module-oauth2-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-oauth2-provider@workspace:plugins/auth-backend-module-oauth2-provider" dependencies: @@ -5154,7 +5154,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-oauth2-proxy-provider@workspace:^, @backstage/plugin-auth-backend-module-oauth2-proxy-provider@workspace:plugins/auth-backend-module-oauth2-proxy-provider": +"@backstage/plugin-auth-backend-module-oauth2-proxy-provider@workspace:plugins/auth-backend-module-oauth2-proxy-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-oauth2-proxy-provider@workspace:plugins/auth-backend-module-oauth2-proxy-provider" dependencies: @@ -5167,7 +5167,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-oidc-provider@workspace:^, @backstage/plugin-auth-backend-module-oidc-provider@workspace:plugins/auth-backend-module-oidc-provider": +"@backstage/plugin-auth-backend-module-oidc-provider@workspace:plugins/auth-backend-module-oidc-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-oidc-provider@workspace:plugins/auth-backend-module-oidc-provider" dependencies: @@ -5191,7 +5191,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-okta-provider@workspace:^, @backstage/plugin-auth-backend-module-okta-provider@workspace:plugins/auth-backend-module-okta-provider": +"@backstage/plugin-auth-backend-module-okta-provider@workspace:plugins/auth-backend-module-okta-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-okta-provider@workspace:plugins/auth-backend-module-okta-provider" dependencies: @@ -5209,7 +5209,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-onelogin-provider@workspace:^, @backstage/plugin-auth-backend-module-onelogin-provider@workspace:plugins/auth-backend-module-onelogin-provider": +"@backstage/plugin-auth-backend-module-onelogin-provider@workspace:plugins/auth-backend-module-onelogin-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-onelogin-provider@workspace:plugins/auth-backend-module-onelogin-provider" dependencies: @@ -5286,23 +5286,6 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" - "@backstage/plugin-auth-backend-module-atlassian-provider": "workspace:^" - "@backstage/plugin-auth-backend-module-auth0-provider": "workspace:^" - "@backstage/plugin-auth-backend-module-aws-alb-provider": "workspace:^" - "@backstage/plugin-auth-backend-module-azure-easyauth-provider": "workspace:^" - "@backstage/plugin-auth-backend-module-bitbucket-provider": "workspace:^" - "@backstage/plugin-auth-backend-module-bitbucket-server-provider": "workspace:^" - "@backstage/plugin-auth-backend-module-cloudflare-access-provider": "workspace:^" - "@backstage/plugin-auth-backend-module-gcp-iap-provider": "workspace:^" - "@backstage/plugin-auth-backend-module-github-provider": "workspace:^" - "@backstage/plugin-auth-backend-module-gitlab-provider": "workspace:^" - "@backstage/plugin-auth-backend-module-google-provider": "workspace:^" - "@backstage/plugin-auth-backend-module-microsoft-provider": "workspace:^" - "@backstage/plugin-auth-backend-module-oauth2-provider": "workspace:^" - "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "workspace:^" - "@backstage/plugin-auth-backend-module-oidc-provider": "workspace:^" - "@backstage/plugin-auth-backend-module-okta-provider": "workspace:^" - "@backstage/plugin-auth-backend-module-onelogin-provider": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" From 5205cc9c4e8f91cf9dbe105d242090c5b845333a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 15 Apr 2025 21:56:28 +0200 Subject: [PATCH 21/61] removed logacy, oauth, and some more provider code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .../legacy/adaptLegacyOAuthHandler.test.ts | 61 ----- .../src/lib/legacy/adaptLegacyOAuthHandler.ts | 46 ---- .../adaptLegacyOAuthSignInResolver.test.ts | 69 ------ .../legacy/adaptLegacyOAuthSignInResolver.ts | 49 ---- .../adaptOAuthSignInResolverToLegacy.test.ts | 85 ------- .../adaptOAuthSignInResolverToLegacy.ts | 55 ----- plugins/auth-backend/src/lib/legacy/index.ts | 19 -- .../src/lib/oauth/OAuthEnvironmentHandler.ts | 23 -- .../src/lib/oauth/helpers.test.ts | 213 ------------------ plugins/auth-backend/src/lib/oauth/helpers.ts | 82 ------- plugins/auth-backend/src/lib/oauth/index.ts | 29 --- plugins/auth-backend/src/lib/oauth/types.ts | 158 ------------- plugins/auth-backend/src/providers/index.ts | 11 - .../auth-backend/src/providers/resolvers.ts | 58 ----- plugins/auth-backend/src/providers/types.ts | 77 ------- 15 files changed, 1035 deletions(-) delete mode 100644 plugins/auth-backend/src/lib/legacy/adaptLegacyOAuthHandler.test.ts delete mode 100644 plugins/auth-backend/src/lib/legacy/adaptLegacyOAuthHandler.ts delete mode 100644 plugins/auth-backend/src/lib/legacy/adaptLegacyOAuthSignInResolver.test.ts delete mode 100644 plugins/auth-backend/src/lib/legacy/adaptLegacyOAuthSignInResolver.ts delete mode 100644 plugins/auth-backend/src/lib/legacy/adaptOAuthSignInResolverToLegacy.test.ts delete mode 100644 plugins/auth-backend/src/lib/legacy/adaptOAuthSignInResolverToLegacy.ts delete mode 100644 plugins/auth-backend/src/lib/legacy/index.ts delete mode 100644 plugins/auth-backend/src/lib/oauth/OAuthEnvironmentHandler.ts delete mode 100644 plugins/auth-backend/src/lib/oauth/helpers.test.ts delete mode 100644 plugins/auth-backend/src/lib/oauth/helpers.ts delete mode 100644 plugins/auth-backend/src/lib/oauth/index.ts delete mode 100644 plugins/auth-backend/src/lib/oauth/types.ts delete mode 100644 plugins/auth-backend/src/providers/resolvers.ts diff --git a/plugins/auth-backend/src/lib/legacy/adaptLegacyOAuthHandler.test.ts b/plugins/auth-backend/src/lib/legacy/adaptLegacyOAuthHandler.test.ts deleted file mode 100644 index 5c5de6a890..0000000000 --- a/plugins/auth-backend/src/lib/legacy/adaptLegacyOAuthHandler.test.ts +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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 { AuthResolverContext } from '@backstage/plugin-auth-node'; -import { AuthHandler } from '../../providers'; -import { OAuthResult } from '../oauth'; -import { PassportProfile } from '../passport/types'; -import { adaptLegacyOAuthHandler } from './adaptLegacyOAuthHandler'; - -describe('adaptLegacyOAuthHandler', () => { - it('should pass through undefined', () => { - expect(adaptLegacyOAuthHandler(undefined)).toBeUndefined(); - }); - - it('should convert an old auth handler to a new profile transform', () => { - const authHandler: AuthHandler = jest.fn(); - const profileTransform = adaptLegacyOAuthHandler(authHandler); - - profileTransform?.( - { - fullProfile: { id: 'id' } as PassportProfile, - session: { - accessToken: 'token', - expiresInSeconds: 3, - scope: 'sco pe', - tokenType: 'bear', - idToken: 'id-token', - refreshToken: 'refresh-token', - }, - }, - { ctx: 'ctx' } as unknown as AuthResolverContext, - ); - - expect(authHandler).toHaveBeenCalledWith( - { - fullProfile: { id: 'id' }, - accessToken: 'token', - params: { - scope: 'sco pe', - id_token: 'id-token', - expires_in: 3, - token_type: 'bear', - }, - }, - { ctx: 'ctx' }, - ); - }); -}); diff --git a/plugins/auth-backend/src/lib/legacy/adaptLegacyOAuthHandler.ts b/plugins/auth-backend/src/lib/legacy/adaptLegacyOAuthHandler.ts deleted file mode 100644 index 3b8eca0a95..0000000000 --- a/plugins/auth-backend/src/lib/legacy/adaptLegacyOAuthHandler.ts +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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 { - OAuthAuthenticatorResult, - ProfileTransform, -} from '@backstage/plugin-auth-node'; -import { AuthHandler } from '../../providers'; -import { OAuthResult } from '../oauth'; -import { PassportProfile } from '../passport/types'; - -/** @internal */ -export function adaptLegacyOAuthHandler( - authHandler?: AuthHandler, -): ProfileTransform> | undefined { - return ( - authHandler && - (async (result, ctx) => - authHandler( - { - fullProfile: result.fullProfile, - accessToken: result.session.accessToken, - params: { - scope: result.session.scope, - id_token: result.session.idToken, - token_type: result.session.tokenType, - expires_in: result.session.expiresInSeconds!, - }, - }, - ctx, - )) - ); -} diff --git a/plugins/auth-backend/src/lib/legacy/adaptLegacyOAuthSignInResolver.test.ts b/plugins/auth-backend/src/lib/legacy/adaptLegacyOAuthSignInResolver.test.ts deleted file mode 100644 index 749cf96cbb..0000000000 --- a/plugins/auth-backend/src/lib/legacy/adaptLegacyOAuthSignInResolver.test.ts +++ /dev/null @@ -1,69 +0,0 @@ -/* - * 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 { - AuthResolverContext, - PassportProfile, -} from '@backstage/plugin-auth-node'; -import { adaptLegacyOAuthSignInResolver } from './adaptLegacyOAuthSignInResolver'; - -describe('adaptLegacyOAuthSignInResolver', () => { - it('should pass through undefined', () => { - expect(adaptLegacyOAuthSignInResolver(undefined)).toBeUndefined(); - }); - - it('should convert a legacy resolver to a new one', () => { - const legacyResolver = jest.fn(); - - const newResolver = adaptLegacyOAuthSignInResolver(legacyResolver); - - newResolver?.( - { - profile: { email: 'em@i.l' }, - result: { - fullProfile: { id: 'id' } as PassportProfile, - session: { - accessToken: 'token', - expiresInSeconds: 3, - scope: 'sco pe', - tokenType: 'bear', - idToken: 'id-token', - refreshToken: 'refresh-token', - }, - }, - }, - { ctx: 'ctx' } as unknown as AuthResolverContext, - ); - - expect(legacyResolver).toHaveBeenCalledWith( - { - profile: { email: 'em@i.l' }, - result: { - fullProfile: { id: 'id' }, - accessToken: 'token', - refreshToken: 'refresh-token', - params: { - scope: 'sco pe', - id_token: 'id-token', - expires_in: 3, - token_type: 'bear', - }, - }, - }, - { ctx: 'ctx' }, - ); - }); -}); diff --git a/plugins/auth-backend/src/lib/legacy/adaptLegacyOAuthSignInResolver.ts b/plugins/auth-backend/src/lib/legacy/adaptLegacyOAuthSignInResolver.ts deleted file mode 100644 index e671a62d52..0000000000 --- a/plugins/auth-backend/src/lib/legacy/adaptLegacyOAuthSignInResolver.ts +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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 { - OAuthAuthenticatorResult, - PassportProfile, - SignInResolver, -} from '@backstage/plugin-auth-node'; -import { OAuthResult } from '../oauth'; - -/** @internal */ -export function adaptLegacyOAuthSignInResolver( - signInResolver?: SignInResolver, -): SignInResolver> | undefined { - return ( - signInResolver && - (async (input, ctx) => - signInResolver( - { - profile: input.profile, - result: { - fullProfile: input.result.fullProfile, - accessToken: input.result.session.accessToken, - refreshToken: input.result.session.refreshToken, - params: { - scope: input.result.session.scope, - id_token: input.result.session.idToken, - token_type: input.result.session.tokenType, - expires_in: input.result.session.expiresInSeconds!, - }, - }, - }, - ctx, - )) - ); -} diff --git a/plugins/auth-backend/src/lib/legacy/adaptOAuthSignInResolverToLegacy.test.ts b/plugins/auth-backend/src/lib/legacy/adaptOAuthSignInResolverToLegacy.test.ts deleted file mode 100644 index 521dcf6395..0000000000 --- a/plugins/auth-backend/src/lib/legacy/adaptOAuthSignInResolverToLegacy.test.ts +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 { - AuthResolverContext, - PassportProfile, -} from '@backstage/plugin-auth-node'; -import { adaptOAuthSignInResolverToLegacy } from './adaptOAuthSignInResolverToLegacy'; - -describe('adaptOAuthSignInResolverToLegacy', () => { - it('should pass through an empty object', () => { - const legacyResolvers = adaptOAuthSignInResolverToLegacy({}); - expect(legacyResolvers).toEqual({}); - - // @ts-expect-error - legacyResolvers.missing?.(); - }); - - it('should adapt a collection of sign-in resolvers', () => { - const resolverA = jest.fn(); - const resolverB = jest.fn(); - - const legacyResolvers = adaptOAuthSignInResolverToLegacy({ - resolverA, - resolverB, - }); - - const legacyResolverA = legacyResolvers.resolverA(); - legacyResolverA( - { - profile: { email: 'em@i.l' }, - result: { - fullProfile: { id: 'id' } as PassportProfile, - accessToken: 'token', - refreshToken: 'refresh-token', - params: { - scope: 'sco pe', - id_token: 'id-token', - expires_in: 3, - token_type: 'bear', - }, - }, - }, - { ctx: 'ctx' } as unknown as AuthResolverContext, - ); - - expect(resolverA).toHaveBeenCalledWith( - { - profile: { email: 'em@i.l' }, - result: { - fullProfile: { id: 'id' } as PassportProfile, - session: { - accessToken: 'token', - expiresInSeconds: 3, - scope: 'sco pe', - tokenType: 'bear', - idToken: 'id-token', - refreshToken: 'refresh-token', - }, - }, - }, - { ctx: 'ctx' }, - ); - - expect(resolverB).not.toHaveBeenCalled(); - legacyResolvers.resolverB()( - { profile: {}, result: { params: {} } } as any, - {} as any, - ); - expect(resolverB).toHaveBeenCalled(); - }); -}); diff --git a/plugins/auth-backend/src/lib/legacy/adaptOAuthSignInResolverToLegacy.ts b/plugins/auth-backend/src/lib/legacy/adaptOAuthSignInResolverToLegacy.ts deleted file mode 100644 index 8be6049348..0000000000 --- a/plugins/auth-backend/src/lib/legacy/adaptOAuthSignInResolverToLegacy.ts +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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 { - OAuthAuthenticatorResult, - PassportProfile, - SignInResolver, -} from '@backstage/plugin-auth-node'; -import { OAuthResult } from '../oauth'; - -/** @internal */ -export function adaptOAuthSignInResolverToLegacy< - TKeys extends string, ->(resolvers: { - [key in TKeys]: SignInResolver>; -}): { [key in TKeys]: () => SignInResolver } { - const legacyResolvers = {} as { - [key in TKeys]: () => SignInResolver; - }; - for (const name of Object.keys(resolvers) as TKeys[]) { - const resolver = resolvers[name]; - legacyResolvers[name] = () => async (input, ctx) => - resolver( - { - profile: input.profile, - result: { - fullProfile: input.result.fullProfile, - session: { - accessToken: input.result.accessToken, - expiresInSeconds: input.result.params.expires_in, - scope: input.result.params.scope, - idToken: input.result.params.id_token, - tokenType: input.result.params.token_type ?? 'bearer', - refreshToken: input.result.refreshToken, - }, - }, - }, - ctx, - ); - } - return legacyResolvers; -} diff --git a/plugins/auth-backend/src/lib/legacy/index.ts b/plugins/auth-backend/src/lib/legacy/index.ts deleted file mode 100644 index 8bd8b5c62e..0000000000 --- a/plugins/auth-backend/src/lib/legacy/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* - * 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. - */ - -export { adaptLegacyOAuthHandler } from './adaptLegacyOAuthHandler'; -export { adaptLegacyOAuthSignInResolver } from './adaptLegacyOAuthSignInResolver'; -export { adaptOAuthSignInResolverToLegacy } from './adaptOAuthSignInResolverToLegacy'; diff --git a/plugins/auth-backend/src/lib/oauth/OAuthEnvironmentHandler.ts b/plugins/auth-backend/src/lib/oauth/OAuthEnvironmentHandler.ts deleted file mode 100644 index c9244eb29e..0000000000 --- a/plugins/auth-backend/src/lib/oauth/OAuthEnvironmentHandler.ts +++ /dev/null @@ -1,23 +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 { OAuthEnvironmentHandler as _OAuthEnvironmentHandler } from '@backstage/plugin-auth-node'; - -/** - * @public - * @deprecated import from `@backstage/plugin-auth-node` instead - */ -export const OAuthEnvironmentHandler = _OAuthEnvironmentHandler; diff --git a/plugins/auth-backend/src/lib/oauth/helpers.test.ts b/plugins/auth-backend/src/lib/oauth/helpers.test.ts deleted file mode 100644 index c8db34e2cc..0000000000 --- a/plugins/auth-backend/src/lib/oauth/helpers.test.ts +++ /dev/null @@ -1,213 +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 express from 'express'; -import { - verifyNonce, - encodeState, - readState, - defaultCookieConfigurer, -} from './helpers'; - -describe('OAuthProvider Utils', () => { - describe('encodeState', () => { - it('should serialized values', () => { - const state = { - nonce: '123', - env: 'development', - origin: 'https://example.com', - }; - - const encoded = encodeState(state); - expect(encoded).toBe( - Buffer.from( - 'nonce=123&env=development&origin=https%3A%2F%2Fexample.com', - ).toString('hex'), - ); - - expect(readState(encoded)).toEqual(state); - }); - - it('should not include undefined values', () => { - const state = { nonce: '123', env: 'development', origin: undefined }; - - const encoded = encodeState(state); - expect(encoded).toBe( - Buffer.from('nonce=123&env=development').toString('hex'), - ); - - expect(readState(encoded)).toEqual(state); - }); - }); - - describe('verifyNonce', () => { - it('should throw error if cookie nonce missing', () => { - const state = { nonce: 'NONCE', env: 'development' }; - const mockRequest = { - cookies: {}, - query: { - state: encodeState(state), - }, - } as unknown as express.Request; - expect(() => { - verifyNonce(mockRequest, 'providera'); - }).toThrow('Auth response is missing cookie nonce'); - }); - - it('should throw error if state nonce missing', () => { - const mockRequest = { - cookies: { - 'providera-nonce': 'NONCE', - }, - query: {}, - } as unknown as express.Request; - expect(() => { - verifyNonce(mockRequest, 'providera'); - }).toThrow('OAuth state is invalid, missing env'); - }); - - it('should throw error if nonce mismatch', () => { - const state = { nonce: 'NONCEB', env: 'development' }; - const mockRequest = { - cookies: { - 'providera-nonce': 'NONCEA', - }, - query: { - state: encodeState(state), - }, - } as unknown as express.Request; - expect(() => { - verifyNonce(mockRequest, 'providera'); - }).toThrow('Invalid nonce'); - }); - - it('should not throw any error if nonce matches', () => { - const state = { nonce: 'NONCE', env: 'development' }; - const mockRequest = { - cookies: { - 'providera-nonce': 'NONCE', - }, - query: { - state: encodeState(state), - }, - } as unknown as express.Request; - expect(() => { - verifyNonce(mockRequest, 'providera'); - }).not.toThrow(); - }); - }); - - describe('defaultCookieConfigurer', () => { - it('should set the correct domain and path for a base url', () => { - expect( - defaultCookieConfigurer({ - baseUrl: '', - providerId: 'test-provider', - callbackUrl: 'http://domain.org/auth', - appOrigin: 'http://domain.org', - }), - ).toMatchObject({ - domain: 'domain.org', - path: '/auth/test-provider', - secure: false, - }); - }); - - it('should set the correct domain and path for a url containing a frame handler', () => { - expect( - defaultCookieConfigurer({ - baseUrl: '', - providerId: 'test-provider', - callbackUrl: 'http://domain.org/auth/test-provider/handler/frame', - appOrigin: 'http://domain.org', - }), - ).toMatchObject({ - domain: 'domain.org', - path: '/auth/test-provider', - secure: false, - }); - }); - - it('should set the secure flag if url is using https', () => { - expect( - defaultCookieConfigurer({ - baseUrl: '', - providerId: 'test-provider', - callbackUrl: 'https://domain.org/auth', - appOrigin: 'http://domain.org', - }), - ).toMatchObject({ - secure: true, - }); - }); - - it('should set sameSite to lax for https on the same domain', () => { - expect( - defaultCookieConfigurer({ - baseUrl: '', - providerId: 'test-provider', - callbackUrl: 'https://domain.org/auth', - appOrigin: 'http://domain.org', - }), - ).toMatchObject({ - sameSite: 'lax', - secure: true, - }); - }); - - it('should set sameSite to lax for http on the same domain', () => { - expect( - defaultCookieConfigurer({ - baseUrl: '', - providerId: 'test-provider', - callbackUrl: 'http://domain.org/auth', - appOrigin: 'http://domain.org', - }), - ).toMatchObject({ - sameSite: 'lax', - secure: false, - }); - }); - - it('should set sameSite to lax if not secure and on different domains', () => { - expect( - defaultCookieConfigurer({ - baseUrl: '', - providerId: 'test-provider', - callbackUrl: 'http://authdomain.org/auth', - appOrigin: 'http://domain.org', - }), - ).toMatchObject({ - sameSite: 'lax', - secure: false, - }); - }); - - it('should set sameSite to none if secure and on different domains', () => { - expect( - defaultCookieConfigurer({ - baseUrl: '', - providerId: 'test-provider', - callbackUrl: 'https://authdomain.org/auth', - appOrigin: 'http://domain.org', - }), - ).toMatchObject({ - sameSite: 'none', - secure: true, - }); - }); - }); -}); diff --git a/plugins/auth-backend/src/lib/oauth/helpers.ts b/plugins/auth-backend/src/lib/oauth/helpers.ts deleted file mode 100644 index fef6dd04ae..0000000000 --- a/plugins/auth-backend/src/lib/oauth/helpers.ts +++ /dev/null @@ -1,82 +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 express from 'express'; -import { - CookieConfigurer, - OAuthState, - decodeOAuthState, - encodeOAuthState, -} from '@backstage/plugin-auth-node'; - -/** - * @public - * @deprecated Use `decodeOAuthState` from `@backstage/plugin-auth-node` instead - */ -export const readState = decodeOAuthState; - -/** - * @public - * @deprecated Use `encodeOAuthState` from `@backstage/plugin-auth-node` instead - */ -export const encodeState = encodeOAuthState; - -/** - * @public - * @deprecated Use inline logic to make sure the session and state nonce matches instead. - */ -export const verifyNonce = (req: express.Request, providerId: string) => { - const cookieNonce = req.cookies[`${providerId}-nonce`]; - const state: OAuthState = readState(req.query.state?.toString() ?? ''); - const stateNonce = state.nonce; - - if (!cookieNonce) { - throw new Error('Auth response is missing cookie nonce'); - } - if (stateNonce.length === 0) { - throw new Error('Auth response is missing state nonce'); - } - if (cookieNonce !== stateNonce) { - throw new Error('Invalid nonce'); - } -}; - -export const defaultCookieConfigurer: CookieConfigurer = ({ - callbackUrl, - providerId, - appOrigin, -}) => { - const { hostname: domain, pathname, protocol } = new URL(callbackUrl); - const secure = protocol === 'https:'; - - // For situations where the auth-backend is running on a - // different domain than the app, we set the SameSite attribute - // to 'none' to allow third-party access to the cookie, but - // only if it's in a secure context (https). - let sameSite: ReturnType['sameSite'] = 'lax'; - if (new URL(appOrigin).hostname !== domain && secure) { - sameSite = 'none'; - } - - // If the provider supports callbackUrls, the pathname will - // contain the complete path to the frame handler so we need - // to slice off the trailing part of the path. - const path = pathname.endsWith(`${providerId}/handler/frame`) - ? pathname.slice(0, -'/handler/frame'.length) - : `${pathname}/${providerId}`; - - return { domain, path, secure, sameSite }; -}; diff --git a/plugins/auth-backend/src/lib/oauth/index.ts b/plugins/auth-backend/src/lib/oauth/index.ts deleted file mode 100644 index f3416b6236..0000000000 --- a/plugins/auth-backend/src/lib/oauth/index.ts +++ /dev/null @@ -1,29 +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. - */ - -export { OAuthEnvironmentHandler } from './OAuthEnvironmentHandler'; -export { encodeState, verifyNonce, readState } from './helpers'; -export type { - OAuthHandlers, - OAuthProviderInfo, - OAuthProviderOptions, - OAuthResponse, - OAuthState, - OAuthStartRequest, - OAuthRefreshRequest, - OAuthLogoutRequest, - OAuthResult, -} from './types'; diff --git a/plugins/auth-backend/src/lib/oauth/types.ts b/plugins/auth-backend/src/lib/oauth/types.ts deleted file mode 100644 index 76689abcdc..0000000000 --- a/plugins/auth-backend/src/lib/oauth/types.ts +++ /dev/null @@ -1,158 +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 express from 'express'; -import { Profile as PassportProfile } from 'passport'; -import { - BackstageSignInResult, - ProfileInfo, - OAuthState as _OAuthState, -} from '@backstage/plugin-auth-node'; -import { OAuthStartResponse } from '../../providers/types'; - -/** - * Common options for passport.js-based OAuth providers - * - * @public - * @deprecated No longer in use - */ -export type OAuthProviderOptions = { - /** - * Client ID of the auth provider. - */ - clientId: string; - /** - * Client Secret of the auth provider. - */ - clientSecret: string; - /** - * Callback URL to be passed to the auth provider to redirect to after the user signs in. - */ - callbackUrl: string; -}; - -/** - * @public - * @deprecated Use `OAuthAuthenticatorResult` from `@backstage/plugin-auth-node` instead - */ -export type OAuthResult = { - fullProfile: PassportProfile; - params: { - id_token?: string; - scope: string; - token_type?: string; - expires_in: number; - }; - accessToken: string; - refreshToken?: string; -}; - -/** - * @public - * @deprecated Use `ClientAuthResponse` from `@backstage/plugin-auth-node` instead - */ -export type OAuthResponse = { - profile: ProfileInfo; - providerInfo: OAuthProviderInfo; - backstageIdentity?: BackstageSignInResult; -}; - -/** - * @public - * @deprecated Use `createOAuthRouteHandlers` from `@backstage/plugin-auth-node` instead - */ -export type OAuthProviderInfo = { - /** - * An access token issued for the signed in user. - */ - accessToken: string; - /** - * (Optional) Id token issued for the signed in user. - */ - idToken?: string; - /** - * Expiry of the access token in seconds. - */ - expiresInSeconds?: number; - /** - * Scopes granted for the access token. - */ - scope: string; -}; - -/** - * @public - * @deprecated import from `@backstage/plugin-auth-node` instead - */ -export type OAuthState = _OAuthState; - -/** - * @public - * @deprecated Use `createOAuthRouteHandlers` from `@backstage/plugin-auth-node` instead - */ -export type OAuthStartRequest = express.Request<{}> & { - scope: string; - state: OAuthState; -}; - -/** - * @public - * @deprecated Use `createOAuthRouteHandlers` from `@backstage/plugin-auth-node` instead - */ -export type OAuthRefreshRequest = express.Request<{}> & { - scope: string; - refreshToken: string; -}; - -/** - * @public - * @deprecated Use `createOAuthRouteHandlers` from `@backstage/plugin-auth-node` instead - */ -export type OAuthLogoutRequest = express.Request<{}> & { - refreshToken: string; -}; - -/** - * @public - * @deprecated Use `createOAuthRouteHandlers` from `@backstage/plugin-auth-node` instead - */ -export interface OAuthHandlers { - /** - * Initiate a sign in request with an auth provider. - */ - start(req: OAuthStartRequest): Promise; - - /** - * Handle the redirect from the auth provider when the user has signed in. - */ - handler(req: express.Request): Promise<{ - response: OAuthResponse; - refreshToken?: string; - }>; - - /** - * (Optional) Given a refresh token and scope fetches a new access token from the auth provider. - */ - refresh?(req: OAuthRefreshRequest): Promise<{ - response: OAuthResponse; - refreshToken?: string; - }>; - - /** - * (Optional) Sign out of the auth provider. - */ - logout?(req: OAuthLogoutRequest): Promise; -} diff --git a/plugins/auth-backend/src/providers/index.ts b/plugins/auth-backend/src/providers/index.ts index 560ee25cc3..9f301893cd 100644 --- a/plugins/auth-backend/src/providers/index.ts +++ b/plugins/auth-backend/src/providers/index.ts @@ -17,18 +17,7 @@ export { createOriginFilter, type ProviderFactories } from './router'; export type { - AuthProviderConfig, - AuthProviderRouteHandlers, - AuthProviderFactory, AuthHandler, - AuthResolverCatalogUserQuery, - AuthResolverContext, AuthHandlerResult, - SignInResolver, - SignInInfo, - CookieConfigurer, - StateEncoder, - AuthResponse, - ProfileInfo, OAuthStartResponse, } from './types'; diff --git a/plugins/auth-backend/src/providers/resolvers.ts b/plugins/auth-backend/src/providers/resolvers.ts deleted file mode 100644 index 54c78ff182..0000000000 --- a/plugins/auth-backend/src/providers/resolvers.ts +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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 { SignInResolver } from '@backstage/plugin-auth-node'; - -/** - * A common sign-in resolver that looks up the user using the local part of - * their email address as the entity name. - */ -export const commonByEmailLocalPartResolver: SignInResolver = async ( - info, - ctx, -) => { - const { profile } = info; - - if (!profile.email) { - throw new Error('Login failed, user profile does not contain an email'); - } - const [localPart] = profile.email.split('@'); - - return ctx.signInWithCatalogUser({ - entityRef: { name: localPart }, - }); -}; - -/** - * A common sign-in resolver that looks up the user using their email address - * as email of the entity. - */ -export const commonByEmailResolver: SignInResolver = async ( - info, - ctx, -) => { - const { profile } = info; - - if (!profile.email) { - throw new Error('Login failed, user profile does not contain an email'); - } - - return ctx.signInWithCatalogUser({ - filter: { - 'spec.profile.email': profile.email, - }, - }); -}; diff --git a/plugins/auth-backend/src/providers/types.ts b/plugins/auth-backend/src/providers/types.ts index 40c693506e..f28995f15e 100644 --- a/plugins/auth-backend/src/providers/types.ts +++ b/plugins/auth-backend/src/providers/types.ts @@ -15,36 +15,9 @@ */ import { - AuthProviderConfig as _AuthProviderConfig, - AuthProviderRouteHandlers as _AuthProviderRouteHandlers, - AuthProviderFactory as _AuthProviderFactory, - AuthResolverCatalogUserQuery as _AuthResolverCatalogUserQuery, AuthResolverContext as _AuthResolverContext, - ClientAuthResponse as _ClientAuthResponse, - CookieConfigurer as _CookieConfigurer, ProfileInfo as _ProfileInfo, - SignInInfo as _SignInInfo, - SignInResolver as _SignInResolver, } from '@backstage/plugin-auth-node'; -import { OAuthStartRequest } from '../lib/oauth/types'; - -/** - * @public - * @deprecated import from `@backstage/plugin-auth-node` instead - */ -export type AuthResolverCatalogUserQuery = _AuthResolverCatalogUserQuery; - -/** - * @public - * @deprecated import from `@backstage/plugin-auth-node` instead - */ -export type AuthResolverContext = _AuthResolverContext; - -/** - * @public - * @deprecated import from `@backstage/plugin-auth-node` instead - */ -export type CookieConfigurer = _CookieConfigurer; /** * @public @@ -61,48 +34,6 @@ export type OAuthStartResponse = { status?: number; }; -/** - * @public - * @deprecated import from `@backstage/plugin-auth-node` instead - */ -export type AuthProviderConfig = _AuthProviderConfig; - -/** - * @public - * @deprecated import from `@backstage/plugin-auth-node` instead - */ -export type AuthProviderRouteHandlers = _AuthProviderRouteHandlers; - -/** - * @public - * @deprecated import from `@backstage/plugin-auth-node` instead - */ -export type AuthProviderFactory = _AuthProviderFactory; - -/** - * @public - * @deprecated import `ClientAuthResponse` from `@backstage/plugin-auth-node` instead - */ -export type AuthResponse = _ClientAuthResponse; - -/** - * @public - * @deprecated import from `@backstage/plugin-auth-node` instead - */ -export type ProfileInfo = _ProfileInfo; - -/** - * @public - * @deprecated import from `@backstage/plugin-auth-node` instead - */ -export type SignInInfo = _SignInInfo; - -/** - * @public - * @deprecated import from `@backstage/plugin-auth-node` instead - */ -export type SignInResolver = _SignInResolver; - /** * The return type of an authentication handler. Must contain valid profile * information. @@ -130,11 +61,3 @@ export type AuthHandler = ( input: TAuthResult, context: _AuthResolverContext, ) => Promise; - -/** - * @public - * @deprecated Use `createOAuthRouteHandlers` from `@backstage/plugin-auth-node` instead - */ -export type StateEncoder = ( - req: OAuthStartRequest, -) => Promise<{ encodedState: string }>; From af20752e8187bc189481fcec1bb5b48a57de321a Mon Sep 17 00:00:00 2001 From: Charles de Dreuille Date: Tue, 15 Apr 2025 22:00:12 +0200 Subject: [PATCH 22/61] Update page.mdx Signed-off-by: Charles de Dreuille --- canon-docs/src/app/(docs)/releases/page.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/canon-docs/src/app/(docs)/releases/page.mdx b/canon-docs/src/app/(docs)/releases/page.mdx index d3a916586b..e71779e854 100644 --- a/canon-docs/src/app/(docs)/releases/page.mdx +++ b/canon-docs/src/app/(docs)/releases/page.mdx @@ -7,6 +7,7 @@ - Add `DataTable` component - ([#29484](https://github.com/backstage/backstage/pull/29484), [#29603](https://github.com/backstage/backstage/pull/29603)) - Add `Select` component - ([#29440](https://github.com/backstage/backstage/pull/29440)) - Add `Avatar` component - ([#29594](https://github.com/backstage/backstage/pull/29594)) +- Add `Collapsible` component - ([#29617](https://github.com/backstage/backstage/pull/29617)) - Add `TextField` component instead of `Field` + `Input` - ([#29364](https://github.com/backstage/backstage/pull/29364)) - Add `TableCellProfile` - ([#29600](https://github.com/backstage/backstage/pull/29600)) - Add breakpoint hooks - `up()` and `down()` - ([#29564](https://github.com/backstage/backstage/pull/29564)) From f6e3bc9dcef7ee3cfc261ab65b2171c40d9a5999 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 15 Apr 2025 22:05:48 +0200 Subject: [PATCH 23/61] removed flow, passport and more MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .../src/lib/flow/authFlowHelpers.test.ts | 203 ---------- .../src/lib/flow/authFlowHelpers.ts | 85 ----- plugins/auth-backend/src/lib/flow/index.ts | 19 - plugins/auth-backend/src/lib/flow/types.ts | 23 -- .../passport/PassportStrategyHelper.test.ts | 360 ------------------ .../lib/passport/PassportStrategyHelper.ts | 224 ----------- .../auth-backend/src/lib/passport/index.ts | 24 -- .../auth-backend/src/lib/passport/types.ts | 20 - .../resolvers/CatalogAuthResolverContext.ts | 14 +- .../auth-backend/src/lib/resolvers/index.ts | 5 +- plugins/auth-backend/src/providers/index.ts | 6 - plugins/auth-backend/src/providers/types.ts | 63 --- 12 files changed, 2 insertions(+), 1044 deletions(-) delete mode 100644 plugins/auth-backend/src/lib/flow/authFlowHelpers.test.ts delete mode 100644 plugins/auth-backend/src/lib/flow/authFlowHelpers.ts delete mode 100644 plugins/auth-backend/src/lib/flow/index.ts delete mode 100644 plugins/auth-backend/src/lib/flow/types.ts delete mode 100644 plugins/auth-backend/src/lib/passport/PassportStrategyHelper.test.ts delete mode 100644 plugins/auth-backend/src/lib/passport/PassportStrategyHelper.ts delete mode 100644 plugins/auth-backend/src/lib/passport/index.ts delete mode 100644 plugins/auth-backend/src/lib/passport/types.ts delete mode 100644 plugins/auth-backend/src/providers/types.ts diff --git a/plugins/auth-backend/src/lib/flow/authFlowHelpers.test.ts b/plugins/auth-backend/src/lib/flow/authFlowHelpers.test.ts deleted file mode 100644 index a61d51b27b..0000000000 --- a/plugins/auth-backend/src/lib/flow/authFlowHelpers.test.ts +++ /dev/null @@ -1,203 +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 express from 'express'; -import { - safelyEncodeURIComponent, - ensuresXRequestedWith, - postMessageResponse, -} from './authFlowHelpers'; -import { WebMessageResponse } from './types'; - -describe('oauth helpers', () => { - describe('safelyEncodeURIComponent', () => { - it('encodes all occurrences of single quotes', () => { - expect(safelyEncodeURIComponent("a'ö'b")).toBe('a%27%C3%B6%27b'); - }); - }); - - describe('postMessageResponse', () => { - const appOrigin = 'http://localhost:3000'; - it('should post a message back with payload success', () => { - const mockResponse = { - end: jest.fn().mockReturnThis(), - setHeader: jest.fn().mockReturnThis(), - } as unknown as express.Response; - - const data: WebMessageResponse = { - type: 'authorization_response', - response: { - providerInfo: { - accessToken: 'ACCESS_TOKEN', - idToken: 'ID_TOKEN', - expiresInSeconds: 10, - scope: 'email', - }, - profile: { - email: 'foo@bar.com', - }, - backstageIdentity: { - token: 'a.b.c', - identity: { - type: 'user', - ownershipEntityRefs: [], - userEntityRef: 'a', - }, - }, - }, - }; - const encoded = safelyEncodeURIComponent(JSON.stringify(data)); - - postMessageResponse(mockResponse, appOrigin, data); - expect(mockResponse.setHeader).toHaveBeenCalledTimes(3); - expect(mockResponse.end).toHaveBeenCalledTimes(1); - expect(mockResponse.end).toHaveBeenCalledWith( - expect.stringContaining(encoded), - ); - }); - - it('should post a message back with payload error', () => { - const mockResponse = { - end: jest.fn().mockReturnThis(), - setHeader: jest.fn().mockReturnThis(), - } as unknown as express.Response; - - const data: WebMessageResponse = { - type: 'authorization_response', - error: new Error('Unknown error occurred'), - }; - const encoded = safelyEncodeURIComponent(JSON.stringify(data)); - - postMessageResponse(mockResponse, appOrigin, data); - expect(mockResponse.setHeader).toHaveBeenCalledTimes(3); - expect(mockResponse.end).toHaveBeenCalledTimes(1); - expect(mockResponse.end).toHaveBeenCalledWith( - expect.stringContaining(encoded), - ); - }); - - it('should call postMessage twice but only one of them with target *', () => { - let responseBody = ''; - - const mockResponse = { - end: jest.fn(body => { - responseBody = body; - return this; - }), - setHeader: jest.fn().mockReturnThis(), - } as unknown as express.Response; - - const data: WebMessageResponse = { - type: 'authorization_response', - response: { - providerInfo: { - accessToken: 'ACCESS_TOKEN', - idToken: 'ID_TOKEN', - expiresInSeconds: 10, - scope: 'email', - }, - profile: { - email: 'foo@bar.com', - }, - backstageIdentity: { - token: 'a.b.c', - identity: { - type: 'user', - ownershipEntityRefs: [], - userEntityRef: 'a', - }, - }, - }, - }; - postMessageResponse(mockResponse, appOrigin, data); - expect(responseBody.match(/.postMessage\(/g)).toHaveLength(2); - expect( - responseBody.match(/.postMessage\([a-zA-Z.()]*, \'\*\'\)/g), - ).toHaveLength(1); - - const errData: WebMessageResponse = { - type: 'authorization_response', - error: new Error('Unknown error occurred'), - }; - postMessageResponse(mockResponse, appOrigin, errData); - expect(responseBody.match(/.postMessage\(/g)).toHaveLength(2); - expect( - responseBody.match(/.postMessage\([a-zA-Z.()]*, \'\*\'\)/g), - ).toHaveLength(1); - }); - - it('handles single quotes and unicode chars safely', () => { - const mockResponse = { - end: jest.fn().mockReturnThis(), - setHeader: jest.fn().mockReturnThis(), - } as unknown as express.Response; - - const data: WebMessageResponse = { - type: 'authorization_response', - response: { - providerInfo: { - accessToken: 'ACCESS_TOKEN', - idToken: 'ID_TOKEN', - expiresInSeconds: 10, - scope: 'email', - }, - profile: { - email: 'foo@bar.com', - displayName: "Adam l'Hôpital", - }, - backstageIdentity: { - token: 'a.b.c', - identity: { - type: 'user', - ownershipEntityRefs: [], - userEntityRef: 'a', - }, - }, - }, - }; - - postMessageResponse(mockResponse, appOrigin, data); - expect(mockResponse.setHeader).toHaveBeenCalledTimes(3); - expect(mockResponse.end).toHaveBeenCalledTimes(1); - expect(mockResponse.end).toHaveBeenCalledWith( - expect.stringContaining('Adam%20l%27H%C3%B4pital'), - ); - }); - }); - - describe('ensuresXRequestedWith', () => { - it('should return false if no header present', () => { - const mockRequest = { - header: () => jest.fn(), - } as unknown as express.Request; - expect(ensuresXRequestedWith(mockRequest)).toBe(false); - }); - - it('should return false if header present with incorrect value', () => { - const mockRequest = { - header: () => 'INVALID', - } as unknown as express.Request; - expect(ensuresXRequestedWith(mockRequest)).toBe(false); - }); - - it('should return true if header present with correct value', () => { - const mockRequest = { - header: () => 'XMLHttpRequest', - } as unknown as express.Request; - expect(ensuresXRequestedWith(mockRequest)).toBe(true); - }); - }); -}); diff --git a/plugins/auth-backend/src/lib/flow/authFlowHelpers.ts b/plugins/auth-backend/src/lib/flow/authFlowHelpers.ts deleted file mode 100644 index 2f1770a3d4..0000000000 --- a/plugins/auth-backend/src/lib/flow/authFlowHelpers.ts +++ /dev/null @@ -1,85 +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 express from 'express'; -import crypto from 'crypto'; -import { WebMessageResponse } from './types'; - -export const safelyEncodeURIComponent = (value: string) => { - // Note the g at the end of the regex; all occurrences of single quotes must - // be replaced, which encodeURIComponent does not do itself by default - return encodeURIComponent(value).replace(/'/g, '%27'); -}; - -/** - * @public - * @deprecated Use `sendWebMessageResponse` from `@backstage/plugin-auth-node` instead - */ -export const postMessageResponse = ( - res: express.Response, - appOrigin: string, - response: WebMessageResponse, -) => { - const jsonData = JSON.stringify(response); - const base64Data = safelyEncodeURIComponent(jsonData); - const base64Origin = safelyEncodeURIComponent(appOrigin); - - // NOTE: It is absolutely imperative that we use the safe encoder above, to - // be sure that the js code below does not allow the injection of malicious - // data. - - // TODO: Make target app origin configurable globally - - // - // postMessage fails silently if the targetOrigin is disallowed. - // So 2 postMessages are sent from the popup to the parent window. - // First, the origin being used to post the actual authorization response is - // shared with the parent window with a postMessage with targetOrigin '*'. - // Second, the actual authorization response is sent with the app origin - // as the targetOrigin. - // If the first message was received but the actual auth response was - // never received, the event listener can conclude that targetOrigin - // was disallowed, indicating potential misconfiguration. - // - const script = ` - var authResponse = decodeURIComponent('${base64Data}'); - var origin = decodeURIComponent('${base64Origin}'); - var originInfo = {'type': 'config_info', 'targetOrigin': origin}; - (window.opener || window.parent).postMessage(originInfo, '*'); - (window.opener || window.parent).postMessage(JSON.parse(authResponse), origin); - setTimeout(() => { - window.close(); - }, 100); // same as the interval of the core-app-api lib/loginPopup.ts (to address race conditions) - `; - const hash = crypto.createHash('sha256').update(script).digest('base64'); - - res.setHeader('Content-Type', 'text/html'); - res.setHeader('X-Frame-Options', 'sameorigin'); - res.setHeader('Content-Security-Policy', `script-src 'sha256-${hash}'`); - res.end(``); -}; - -/** - * @public - * @deprecated Use inline logic to check that the `X-Requested-With` header is set to `'XMLHttpRequest'` instead. - */ -export const ensuresXRequestedWith = (req: express.Request) => { - const requiredHeader = req.header('X-Requested-With'); - if (!requiredHeader || requiredHeader !== 'XMLHttpRequest') { - return false; - } - return true; -}; diff --git a/plugins/auth-backend/src/lib/flow/index.ts b/plugins/auth-backend/src/lib/flow/index.ts deleted file mode 100644 index f7b4491edb..0000000000 --- a/plugins/auth-backend/src/lib/flow/index.ts +++ /dev/null @@ -1,19 +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. - */ - -export { ensuresXRequestedWith, postMessageResponse } from './authFlowHelpers'; - -export type { WebMessageResponse } from './types'; diff --git a/plugins/auth-backend/src/lib/flow/types.ts b/plugins/auth-backend/src/lib/flow/types.ts deleted file mode 100644 index 36f3033b21..0000000000 --- a/plugins/auth-backend/src/lib/flow/types.ts +++ /dev/null @@ -1,23 +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 { WebMessageResponse as _WebMessageResponse } from '@backstage/plugin-auth-node'; - -/** - * @public - * @deprecated import from `@backstage/plugin-auth-node` instead - */ -export type WebMessageResponse = _WebMessageResponse; diff --git a/plugins/auth-backend/src/lib/passport/PassportStrategyHelper.test.ts b/plugins/auth-backend/src/lib/passport/PassportStrategyHelper.test.ts deleted file mode 100644 index d9e80263ee..0000000000 --- a/plugins/auth-backend/src/lib/passport/PassportStrategyHelper.test.ts +++ /dev/null @@ -1,360 +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 express from 'express'; -import { UnsecuredJWT } from 'jose'; -import passport from 'passport'; -import { InternalOAuthError } from 'passport-oauth2'; -import { - executeRedirectStrategy, - executeFrameHandlerStrategy, - executeRefreshTokenStrategy, - makeProfileInfo, -} from './PassportStrategyHelper'; -import { PassportProfile } from './types'; - -const mockRequest = {} as unknown as express.Request; - -describe('PassportStrategyHelper', () => { - describe('makeProfileInfo', () => { - it('retrieves email from passport profile', () => { - const profile: PassportProfile = { - emails: [{ value: 'email' }], - provider: '', - id: '', - displayName: '', - }; - - const profileInfo = makeProfileInfo(profile); - - expect(profileInfo.email).toEqual('email'); - }); - - it('retrieves picture from passport profile avatarUrl', () => { - const profile: PassportProfile = { - avatarUrl: 'avatarUrl', - provider: '', - id: '', - displayName: '', - }; - - const profileInfo = makeProfileInfo(profile); - - expect(profileInfo.picture).toEqual('avatarUrl'); - }); - - it('falls back to picture from passport profile photos field', () => { - const profile: PassportProfile = { - photos: [{ value: 'picture' }], - provider: '', - id: '', - displayName: '', - }; - - const profileInfo = makeProfileInfo(profile); - - expect(profileInfo.picture).toEqual('picture'); - }); - - it('falls back to email from ID token', async () => { - const profile: PassportProfile = { - provider: '', - id: '', - displayName: '', - }; - - const profileInfo = makeProfileInfo( - profile, - await new UnsecuredJWT({ email: 'email' }).encode(), - ); - - expect(profileInfo.email).toEqual('email'); - }); - - it('falls back to picture from ID token', async () => { - const profile: PassportProfile = { - provider: '', - id: '', - displayName: '', - }; - - const profileInfo = makeProfileInfo( - profile, - await new UnsecuredJWT({ picture: 'picture' }).encode(), - ); - - expect(profileInfo.picture).toEqual('picture'); - }); - - it('falls back to name from ID token', async () => { - const profile: PassportProfile = { - provider: '', - id: '', - displayName: '', - }; - - const profileInfo = makeProfileInfo( - profile, - await new UnsecuredJWT({ name: 'name' }).encode(), - ); - - expect(profileInfo.displayName).toEqual('name'); - }); - - it('fails when attempting to fall back to invalid JWT', () => { - const profile: PassportProfile = { - provider: '', - id: '', - displayName: '', - }; - - expect(() => makeProfileInfo(profile, 'invalid JWT')).toThrow( - 'Failed to parse id token and get profile info', - ); - }); - }); - - class MyCustomRedirectStrategy extends passport.Strategy { - authenticate() { - this.redirect('a', 302); - } - } - - describe('executeRedirectStrategy', () => { - it('should call authenticate and resolve with OAuthStartResponse', async () => { - const mockStrategy = new MyCustomRedirectStrategy(); - const spyAuthenticate = jest.spyOn(mockStrategy, 'authenticate'); - const redirectStrategyPromise = executeRedirectStrategy( - mockRequest, - mockStrategy, - {}, - ); - expect(spyAuthenticate).toHaveBeenCalledTimes(1); - await expect(redirectStrategyPromise).resolves.toStrictEqual( - expect.objectContaining({ url: 'a', status: 302 }), - ); - }); - }); - - describe('executeFrameHandlerStrategy', () => { - class MyCustomAuthSuccessStrategy extends passport.Strategy { - authenticate() { - this.success( - { accessToken: 'ACCESS_TOKEN' }, - { refreshToken: 'REFRESH_TOKEN' }, - ); - } - } - class MyCustomAuthErrorStrategy extends passport.Strategy { - authenticate() { - this.error( - new InternalOAuthError('MyCustomAuth error', { - data: '{ "message": "Custom message" }', - }), - ); - } - } - class MyCustomAuthRedirectStrategy extends passport.Strategy { - authenticate() { - this.redirect('URL', 302); - } - } - class MyCustomAuthFailStrategy extends passport.Strategy { - authenticate() { - this.fail('challenge', 302); - } - } - - it('should resolve with user and info on success', async () => { - const mockStrategy = new MyCustomAuthSuccessStrategy(); - const spyAuthenticate = jest.spyOn(mockStrategy, 'authenticate'); - const frameHandlerStrategyPromise = executeFrameHandlerStrategy( - mockRequest, - mockStrategy, - ); - expect(spyAuthenticate).toHaveBeenCalledTimes(1); - await expect(frameHandlerStrategyPromise).resolves.toStrictEqual( - expect.objectContaining({ - result: { accessToken: 'ACCESS_TOKEN' }, - privateInfo: { refreshToken: 'REFRESH_TOKEN' }, - }), - ); - }); - - it('should reject on error', async () => { - const mockStrategy = new MyCustomAuthErrorStrategy(); - const spyAuthenticate = jest.spyOn(mockStrategy, 'authenticate'); - const frameHandlerStrategyPromise = executeFrameHandlerStrategy( - mockRequest, - mockStrategy, - ); - expect(spyAuthenticate).toHaveBeenCalledTimes(1); - await expect(frameHandlerStrategyPromise).rejects.toThrow( - 'Authentication failed, MyCustomAuth error - Custom message', - ); - }); - - it('should reject on redirect', async () => { - const mockStrategy = new MyCustomAuthRedirectStrategy(); - const spyAuthenticate = jest.spyOn(mockStrategy, 'authenticate'); - const frameHandlerStrategyPromise = executeFrameHandlerStrategy( - mockRequest, - mockStrategy, - ); - expect(spyAuthenticate).toHaveBeenCalledTimes(1); - await expect(frameHandlerStrategyPromise).rejects.toThrow( - 'Unexpected redirect', - ); - }); - - it('should reject on fail', async () => { - const mockStrategy = new MyCustomAuthFailStrategy(); - const spyAuthenticate = jest.spyOn(mockStrategy, 'authenticate'); - const frameHandlerStrategyPromise = executeFrameHandlerStrategy( - mockRequest, - mockStrategy, - ); - expect(spyAuthenticate).toHaveBeenCalledTimes(1); - await expect(frameHandlerStrategyPromise).rejects.toThrow(); - }); - }); - - describe('executeRefreshTokenStrategy', () => { - it('should resolve with a new access token, scope and expiry', async () => { - class MyCustomOAuth2Success { - getOAuthAccessToken( - _refreshToken: string, - _options: any, - callback: Function, - ) { - callback(null, 'ACCESS_TOKEN', 'REFRESH_TOKEN', { - scope: 'a', - expires_in: 10, - }); - } - } - class MyCustomRefreshTokenSuccess extends passport.Strategy { - _oauth2 = new MyCustomOAuth2Success(); - userProfile(_accessToken: string, callback: Function) { - callback(null, { - provider: 'a', - email: 'b', - name: 'c', - picture: 'd', - }); - } - } - - const mockStrategy = new MyCustomRefreshTokenSuccess(); - const refreshTokenPromise = executeRefreshTokenStrategy( - mockStrategy, - 'REFRESH_TOKEN', - 'a', - ); - await expect(refreshTokenPromise).resolves.toStrictEqual( - expect.objectContaining({ - accessToken: 'ACCESS_TOKEN', - params: expect.objectContaining({ scope: 'a', expires_in: 10 }), - }), - ); - }); - - it('should forward simple errors', async () => { - class MyCustomRefreshTokenSuccess extends passport.Strategy { - _oauth2 = new (class { - getOAuthAccessToken(_r: string, _o: any, cb: Function) { - cb(new Error('Unknown error')); - } - })(); - } - - await expect( - executeRefreshTokenStrategy( - new MyCustomRefreshTokenSuccess(), - 'REFRESH_TOKEN', - 'a', - ), - ).rejects.toThrow( - 'Failed to refresh access token; caused by Error: Unknown error', - ); - }); - - it('should forward string errors', async () => { - class MyCustomRefreshTokenSuccess extends passport.Strategy { - _oauth2 = new (class { - getOAuthAccessToken(_r: string, _o: any, cb: Function) { - cb('some silly string error'); - } - })(); - } - - await expect( - executeRefreshTokenStrategy( - new MyCustomRefreshTokenSuccess(), - 'REFRESH_TOKEN', - 'a', - ), - ).rejects.toThrow( - "Failed to refresh access token; caused by unknown error 'some silly string error'", - ); - }); - - it('should forward object errors', async () => { - class MyCustomRefreshTokenSuccess extends passport.Strategy { - _oauth2 = new (class { - getOAuthAccessToken(_r: string, _o: any, cb: Function) { - cb({ name: 'SomeError', message: 'some message' }); - } - })(); - } - - await expect( - executeRefreshTokenStrategy( - new MyCustomRefreshTokenSuccess(), - 'REFRESH_TOKEN', - 'a', - ), - ).rejects.toThrow( - 'Failed to refresh access token; caused by SomeError: some message', - ); - }); - - it('should reject with an error if access token missing in refresh callback', async () => { - class MyCustomOAuth2AccessTokenMissing { - getOAuthAccessToken( - _refreshToken: string, - _options: any, - callback: Function, - ) { - callback(null, ''); - } - } - class MyCustomRefreshTokenSuccess extends passport.Strategy { - _oauth2 = new MyCustomOAuth2AccessTokenMissing(); - } - - const mockStrategy = new MyCustomRefreshTokenSuccess(); - const refreshTokenPromise = executeRefreshTokenStrategy( - mockStrategy, - 'REFRESH_TOKEN', - 'a', - ); - await expect(refreshTokenPromise).rejects.toThrow( - 'Failed to refresh access token, no access token received', - ); - }); - }); -}); diff --git a/plugins/auth-backend/src/lib/passport/PassportStrategyHelper.ts b/plugins/auth-backend/src/lib/passport/PassportStrategyHelper.ts deleted file mode 100644 index ef9284c1fb..0000000000 --- a/plugins/auth-backend/src/lib/passport/PassportStrategyHelper.ts +++ /dev/null @@ -1,224 +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 express from 'express'; -import passport from 'passport'; -import { decodeJwt } from 'jose'; -import { InternalOAuthError } from 'passport-oauth2'; -import { ProfileInfo } from '@backstage/plugin-auth-node'; -import { PassportProfile } from './types'; -import { OAuthStartResponse } from '../../providers/types'; -import { ForwardedError } from '@backstage/errors'; - -export type PassportDoneCallback = ( - err?: Error, - response?: Res, - privateInfo?: Private, -) => void; - -export const makeProfileInfo = ( - profile: PassportProfile, - idToken?: string, -): ProfileInfo => { - let email: string | undefined = undefined; - if (profile.emails && profile.emails.length > 0) { - const [firstEmail] = profile.emails; - email = firstEmail.value; - } - - let picture: string | undefined = undefined; - if (profile.avatarUrl) { - picture = profile.avatarUrl; - } else if (profile.photos && profile.photos.length > 0) { - const [firstPhoto] = profile.photos; - picture = firstPhoto.value; - } - - let displayName: string | undefined = - profile.displayName ?? profile.username ?? profile.id; - - if ((!email || !picture || !displayName) && idToken) { - try { - const decoded = decodeJwt(idToken) as { - email?: string; - name?: string; - picture?: string; - }; - if (!email && decoded.email) { - email = decoded.email; - } - if (!picture && decoded.picture) { - picture = decoded.picture; - } - if (!displayName && decoded.name) { - displayName = decoded.name; - } - } catch (e) { - throw new ForwardedError( - `Failed to parse id token and get profile info`, - e, - ); - } - } - - return { - email, - picture, - displayName, - }; -}; - -export const executeRedirectStrategy = async ( - req: express.Request, - providerStrategy: passport.Strategy, - options: Record, -): Promise => { - return new Promise(resolve => { - const strategy = Object.create(providerStrategy); - strategy.redirect = (url: string, status?: number) => { - resolve({ url, status: status ?? undefined }); - }; - - strategy.authenticate(req, { ...options }); - }); -}; - -export const executeFrameHandlerStrategy = async ( - req: express.Request, - providerStrategy: passport.Strategy, - options?: Record, -) => { - return new Promise<{ result: Result; privateInfo: PrivateInfo }>( - (resolve, reject) => { - const strategy = Object.create(providerStrategy); - strategy.success = (result: any, privateInfo: any) => { - resolve({ result, privateInfo }); - }; - strategy.fail = ( - info: { type: 'success' | 'error'; message?: string }, - // _status: number, - ) => { - reject(new Error(`Authentication rejected, ${info.message ?? ''}`)); - }; - strategy.error = (error: InternalOAuthError) => { - let message = `Authentication failed, ${error.message}`; - - if (error.oauthError?.data) { - try { - const errorData = JSON.parse(error.oauthError.data); - - if (errorData.message) { - message += ` - ${errorData.message}`; - } - } catch (parseError) { - message += ` - ${error.oauthError}`; - } - } - - reject(new Error(message)); - }; - strategy.redirect = () => { - reject(new Error('Unexpected redirect')); - }; - strategy.authenticate(req, { ...(options ?? {}) }); - }, - ); -}; - -type RefreshTokenResponse = { - /** - * An access token issued for the signed in user. - */ - accessToken: string; - /** - * Optionally, the server can issue a new Refresh Token for the user - */ - refreshToken?: string; - params: any; -}; - -export const executeRefreshTokenStrategy = async ( - providerStrategy: passport.Strategy, - refreshToken: string, - scope: string, -): Promise => { - return new Promise((resolve, reject) => { - const anyStrategy = providerStrategy as any; - const OAuth2 = anyStrategy._oauth2.constructor; - const oauth2 = new OAuth2( - anyStrategy._oauth2._clientId, - anyStrategy._oauth2._clientSecret, - anyStrategy._oauth2._baseSite, - anyStrategy._oauth2._authorizeUrl, - anyStrategy._refreshURL || anyStrategy._oauth2._accessTokenUrl, - anyStrategy._oauth2._customHeaders, - ); - - oauth2.getOAuthAccessToken( - refreshToken, - { - scope, - grant_type: 'refresh_token', - }, - ( - err: Error | null, - accessToken: string, - newRefreshToken: string, - params: any, - ) => { - if (err) { - reject(new ForwardedError(`Failed to refresh access token`, err)); - } - if (!accessToken) { - reject( - new Error( - `Failed to refresh access token, no access token received`, - ), - ); - } - - resolve({ - accessToken, - refreshToken: newRefreshToken, - params, - }); - }, - ); - }); -}; - -type ProviderStrategy = { - userProfile(accessToken: string, callback: Function): void; -}; - -export const executeFetchUserProfileStrategy = async ( - providerStrategy: passport.Strategy, - accessToken: string, -): Promise => { - return new Promise((resolve, reject) => { - const anyStrategy = providerStrategy as unknown as ProviderStrategy; - anyStrategy.userProfile( - accessToken, - (error: Error, rawProfile: PassportProfile) => { - if (error) { - reject(error); - } else { - resolve(rawProfile); - } - }, - ); - }); -}; diff --git a/plugins/auth-backend/src/lib/passport/index.ts b/plugins/auth-backend/src/lib/passport/index.ts deleted file mode 100644 index 17ab71f51f..0000000000 --- a/plugins/auth-backend/src/lib/passport/index.ts +++ /dev/null @@ -1,24 +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. - */ - -export { - executeFetchUserProfileStrategy, - executeFrameHandlerStrategy, - executeRedirectStrategy, - executeRefreshTokenStrategy, - makeProfileInfo, -} from './PassportStrategyHelper'; -export type { PassportDoneCallback } from './PassportStrategyHelper'; diff --git a/plugins/auth-backend/src/lib/passport/types.ts b/plugins/auth-backend/src/lib/passport/types.ts deleted file mode 100644 index 55fe4543fc..0000000000 --- a/plugins/auth-backend/src/lib/passport/types.ts +++ /dev/null @@ -1,20 +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 passport from 'passport'; - -export type PassportProfile = passport.Profile & { - avatarUrl?: string; -}; diff --git a/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts b/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts index 7f66179d81..0917d916c7 100644 --- a/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts +++ b/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts @@ -39,16 +39,7 @@ import { } from '@backstage/plugin-auth-node'; import { CatalogIdentityClient } from '../catalog'; -/** - * Uses the default ownership resolution logic to return an array - * of entity refs that the provided entity claims ownership through. - * - * A reference to the entity itself will also be included in the returned array. - * - * @public - * @deprecated use `ctx.resolveOwnershipEntityRefs(entity)` from the provided `AuthResolverContext` instead. - */ -export function getDefaultOwnershipEntityRefs(entity: Entity) { +function getDefaultOwnershipEntityRefs(entity: Entity) { const membershipRefs = entity.relations ?.filter( @@ -59,9 +50,6 @@ export function getDefaultOwnershipEntityRefs(entity: Entity) { return Array.from(new Set([stringifyEntityRef(entity), ...membershipRefs])); } -/** - * @internal - */ export class CatalogAuthResolverContext implements AuthResolverContext { static create(options: { logger: LoggerService; diff --git a/plugins/auth-backend/src/lib/resolvers/index.ts b/plugins/auth-backend/src/lib/resolvers/index.ts index c1ca59cb25..fc3ea8521c 100644 --- a/plugins/auth-backend/src/lib/resolvers/index.ts +++ b/plugins/auth-backend/src/lib/resolvers/index.ts @@ -14,7 +14,4 @@ * limitations under the License. */ -export { - CatalogAuthResolverContext, - getDefaultOwnershipEntityRefs, -} from './CatalogAuthResolverContext'; +export { CatalogAuthResolverContext } from './CatalogAuthResolverContext'; diff --git a/plugins/auth-backend/src/providers/index.ts b/plugins/auth-backend/src/providers/index.ts index 9f301893cd..abe3e77736 100644 --- a/plugins/auth-backend/src/providers/index.ts +++ b/plugins/auth-backend/src/providers/index.ts @@ -15,9 +15,3 @@ */ export { createOriginFilter, type ProviderFactories } from './router'; - -export type { - AuthHandler, - AuthHandlerResult, - OAuthStartResponse, -} from './types'; diff --git a/plugins/auth-backend/src/providers/types.ts b/plugins/auth-backend/src/providers/types.ts deleted file mode 100644 index f28995f15e..0000000000 --- a/plugins/auth-backend/src/providers/types.ts +++ /dev/null @@ -1,63 +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 { - AuthResolverContext as _AuthResolverContext, - ProfileInfo as _ProfileInfo, -} from '@backstage/plugin-auth-node'; - -/** - * @public - * @deprecated Use `createOAuthAuthenticator` from `@backstage/plugin-auth-node` instead - */ -export type OAuthStartResponse = { - /** - * URL to redirect to - */ - url: string; - /** - * Status code to use for the redirect - */ - status?: number; -}; - -/** - * The return type of an authentication handler. Must contain valid profile - * information. - * - * @public - * @deprecated Use `createOAuthRouteHandlers` from `@backstage/plugin-auth-node` instead - */ -export type AuthHandlerResult = { profile: _ProfileInfo }; - -/** - * The AuthHandler function is called every time the user authenticates using - * the provider. - * - * The handler should return a profile that represents the session for the user - * in the frontend. - * - * Throwing an error in the function will cause the authentication to fail, - * making it possible to use this function as a way to limit access to a certain - * group of users. - * - * @public - * @deprecated Use `createOAuthRouteHandlers` from `@backstage/plugin-auth-node` instead - */ -export type AuthHandler = ( - input: TAuthResult, - context: _AuthResolverContext, -) => Promise; From edfcd7e04b84896f7f02b6ff58e35442971d0ba4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 15 Apr 2025 22:39:03 +0200 Subject: [PATCH 24/61] removed backend-common MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- plugins/auth-backend/package.json | 1 - plugins/auth-backend/src/authPlugin.ts | 3 - .../auth-backend/src/database/AuthDatabase.ts | 17 --- .../src/identity/KeyStores.test.ts | 126 ++++++++++-------- .../lib/catalog/CatalogIdentityClient.test.ts | 31 ++--- .../src/lib/catalog/CatalogIdentityClient.ts | 32 +---- .../CatalogAuthResolverContext.test.ts | 3 - .../resolvers/CatalogAuthResolverContext.ts | 14 +- plugins/auth-backend/src/providers/index.ts | 2 +- plugins/auth-backend/src/providers/router.ts | 13 -- plugins/auth-backend/src/service/router.ts | 16 +-- yarn.lock | 1 - 12 files changed, 95 insertions(+), 164 deletions(-) diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 3040d03516..656a19cf89 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -43,7 +43,6 @@ "test": "backstage-cli package test" }, "dependencies": { - "@backstage/backend-common": "^0.25.0", "@backstage/backend-plugin-api": "workspace:^", "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", diff --git a/plugins/auth-backend/src/authPlugin.ts b/plugins/auth-backend/src/authPlugin.ts index bc02243446..8e55fccdea 100644 --- a/plugins/auth-backend/src/authPlugin.ts +++ b/plugins/auth-backend/src/authPlugin.ts @@ -66,7 +66,6 @@ export const authPlugin = createBackendPlugin({ database: coreServices.database, discovery: coreServices.discovery, auth: coreServices.auth, - httpAuth: coreServices.httpAuth, catalogApi: catalogServiceRef, }, async init({ @@ -76,7 +75,6 @@ export const authPlugin = createBackendPlugin({ database, discovery, auth, - httpAuth, catalogApi, }) { const router = await createRouter({ @@ -85,7 +83,6 @@ export const authPlugin = createBackendPlugin({ database, discovery, auth, - httpAuth, catalogApi, providerFactories: Object.fromEntries(providers), ownershipResolver, diff --git a/plugins/auth-backend/src/database/AuthDatabase.ts b/plugins/auth-backend/src/database/AuthDatabase.ts index 43b48401e2..a09f28c1cd 100644 --- a/plugins/auth-backend/src/database/AuthDatabase.ts +++ b/plugins/auth-backend/src/database/AuthDatabase.ts @@ -14,12 +14,10 @@ * limitations under the License. */ -import { DatabaseManager } from '@backstage/backend-common'; import { DatabaseService, resolvePackagePath, } from '@backstage/backend-plugin-api'; -import { ConfigReader } from '@backstage/config'; import { Knex } from 'knex'; const migrationsDir = resolvePackagePath( @@ -39,21 +37,6 @@ export class AuthDatabase { return new AuthDatabase(database); } - /** @internal */ - static forTesting(): AuthDatabase { - const config = new ConfigReader({ - backend: { - database: { - client: 'better-sqlite3', - connection: ':memory:', - useNullAsDefault: true, - }, - }, - }); - const database = DatabaseManager.fromConfig(config).forPlugin('auth'); - return new AuthDatabase(database); - } - static async runMigrations(knex: Knex): Promise { await knex.migrate.latest({ directory: migrationsDir, diff --git a/plugins/auth-backend/src/identity/KeyStores.test.ts b/plugins/auth-backend/src/identity/KeyStores.test.ts index 0d4ffac4d8..13818ff79c 100644 --- a/plugins/auth-backend/src/identity/KeyStores.test.ts +++ b/plugins/auth-backend/src/identity/KeyStores.test.ts @@ -20,9 +20,13 @@ import { DatabaseKeyStore } from './DatabaseKeyStore'; import { FirestoreKeyStore } from './FirestoreKeyStore'; import { KeyStores } from './KeyStores'; import { MemoryKeyStore } from './MemoryKeyStore'; -import { mockServices } from '@backstage/backend-test-utils'; +import { mockServices, TestDatabases } from '@backstage/backend-test-utils'; + +jest.setTimeout(60_000); describe('KeyStores', () => { + const databases = TestDatabases.create(); + const defaultConfigOptions = { auth: { keyStore: { @@ -32,65 +36,77 @@ describe('KeyStores', () => { }; const defaultConfig = new ConfigReader(defaultConfigOptions); - it('reads auth section from config', async () => { - const configSpy = jest.spyOn(defaultConfig, 'getOptionalConfig'); - const keyStore = await KeyStores.fromConfig(defaultConfig, { - logger: mockServices.logger.mock(), - database: AuthDatabase.forTesting(), - }); + it.each(databases.eachSupportedId())( + 'reads auth section from config, %p', + async databaseId => { + const knex = await databases.init(databaseId); + const configSpy = jest.spyOn(defaultConfig, 'getOptionalConfig'); + const keyStore = await KeyStores.fromConfig(defaultConfig, { + logger: mockServices.logger.mock(), + database: AuthDatabase.create(mockServices.database({ knex })), + }); - expect(keyStore).toBeInstanceOf(MemoryKeyStore); - expect(configSpy).toHaveBeenCalledWith('auth.keyStore'); - expect( - defaultConfig - .getOptionalConfig('auth.keyStore') - ?.getOptionalString('provider'), - ).toBe(defaultConfigOptions.auth.keyStore.provider); - }); + expect(keyStore).toBeInstanceOf(MemoryKeyStore); + expect(configSpy).toHaveBeenCalledWith('auth.keyStore'); + expect( + defaultConfig + .getOptionalConfig('auth.keyStore') + ?.getOptionalString('provider'), + ).toBe(defaultConfigOptions.auth.keyStore.provider); + }, + ); - it('can handle without auth config', async () => { - const keyStore = await KeyStores.fromConfig(new ConfigReader({}), { - logger: mockServices.logger.mock(), - database: AuthDatabase.forTesting(), - }); - expect(keyStore).toBeInstanceOf(DatabaseKeyStore); - }); + it.each(databases.eachSupportedId())( + 'can handle without auth config, %p', + async databaseId => { + const knex = await databases.init(databaseId); + const keyStore = await KeyStores.fromConfig(new ConfigReader({}), { + logger: mockServices.logger.mock(), + database: AuthDatabase.create(mockServices.database({ knex })), + }); + expect(keyStore).toBeInstanceOf(DatabaseKeyStore); + }, + ); - it('can handle additional provider config', async () => { - jest.spyOn(FirestoreKeyStore, 'verifyConnection').mockResolvedValue(); - const createSpy = jest.spyOn(FirestoreKeyStore, 'create'); + it.each(databases.eachSupportedId())( + 'can handle additional provider config, %p', + async databaseId => { + const knex = await databases.init(databaseId); + jest.spyOn(FirestoreKeyStore, 'verifyConnection').mockResolvedValue(); + const createSpy = jest.spyOn(FirestoreKeyStore, 'create'); - const configOptions = { - auth: { - keyStore: { - provider: 'firestore', - firestore: { - projectId: 'my-project', - keyFilename: 'cred.json', - path: 'my-path', - timeout: 100, - host: 'localhost', - port: 8088, - ssl: false, + const configOptions = { + auth: { + keyStore: { + provider: 'firestore', + firestore: { + projectId: 'my-project', + keyFilename: 'cred.json', + path: 'my-path', + timeout: 100, + host: 'localhost', + port: 8088, + ssl: false, + }, }, }, - }, - }; - const config = new ConfigReader(configOptions); - const keyStore = await KeyStores.fromConfig(config, { - logger: mockServices.logger.mock(), - database: AuthDatabase.forTesting(), - }); + }; + const config = new ConfigReader(configOptions); + const keyStore = await KeyStores.fromConfig(config, { + logger: mockServices.logger.mock(), + database: AuthDatabase.create(mockServices.database({ knex })), + }); - expect(keyStore).toBeInstanceOf(FirestoreKeyStore); - expect(createSpy).toHaveBeenCalledWith( - configOptions.auth.keyStore.firestore, - ); - expect( - config - .getOptionalConfig('auth.keyStore') - ?.getOptionalConfig('firestore') - ?.getOptionalString('projectId'), - ).toBe(configOptions.auth.keyStore.firestore.projectId); - }); + expect(keyStore).toBeInstanceOf(FirestoreKeyStore); + expect(createSpy).toHaveBeenCalledWith( + configOptions.auth.keyStore.firestore, + ); + expect( + config + .getOptionalConfig('auth.keyStore') + ?.getOptionalConfig('firestore') + ?.getOptionalString('projectId'), + ).toBe(configOptions.auth.keyStore.firestore.projectId); + }, + ); }); diff --git a/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.test.ts b/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.test.ts index 749b684d6e..b873b043aa 100644 --- a/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.test.ts +++ b/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.test.ts @@ -14,20 +14,16 @@ * limitations under the License. */ -import { TokenManager } from '@backstage/backend-common'; import { RELATION_MEMBER_OF, UserEntityV1alpha1, } from '@backstage/catalog-model'; import { catalogServiceMock } from '@backstage/plugin-catalog-node/testUtils'; import { CatalogIdentityClient } from './CatalogIdentityClient'; -import { mockServices } from '@backstage/backend-test-utils'; +import { mockCredentials, mockServices } from '@backstage/backend-test-utils'; describe('CatalogIdentityClient', () => { - const tokenManager: jest.Mocked = { - getToken: jest.fn(), - authenticate: jest.fn(), - }; + const auth = mockServices.auth(); afterEach(() => jest.resetAllMocks()); @@ -48,11 +44,9 @@ describe('CatalogIdentityClient', () => { }); jest.spyOn(catalogApi, 'getEntities'); - tokenManager.getToken.mockResolvedValue({ token: 'my-token' }); const client = new CatalogIdentityClient({ - discovery: mockServices.discovery(), catalogApi, - tokenManager, + auth, }); await client.findUser({ annotations: { key: 'value' } }); @@ -64,9 +58,13 @@ describe('CatalogIdentityClient', () => { 'metadata.annotations.key': 'value', }, }, - { token: 'my-token' }, + { + token: mockCredentials.service.token({ + onBehalfOf: mockCredentials.service('plugin:test'), + targetPluginId: 'catalog', + }), + }, ); - expect(tokenManager.getToken).toHaveBeenCalledWith(); }); it('resolveCatalogMembership resolves membership', async () => { @@ -107,12 +105,10 @@ describe('CatalogIdentityClient', () => { ]; const catalogApi = catalogServiceMock({ entities: mockUsers }); jest.spyOn(catalogApi, 'getEntities'); - tokenManager.getToken.mockResolvedValue({ token: 'my-token' }); const client = new CatalogIdentityClient({ - discovery: {} as any, catalogApi, - tokenManager, + auth, }); const claims = await client.resolveCatalogMembership({ @@ -139,7 +135,12 @@ describe('CatalogIdentityClient', () => { }, ], }, - { token: 'my-token' }, + { + token: mockCredentials.service.token({ + onBehalfOf: mockCredentials.service('plugin:test'), + targetPluginId: 'catalog', + }), + }, ); expect(claims).toMatchObject([ diff --git a/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.ts b/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.ts index 252cae88af..074a402bca 100644 --- a/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.ts +++ b/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.ts @@ -14,12 +14,7 @@ * limitations under the License. */ -import { - AuthService, - DiscoveryService, - HttpAuthService, - LoggerService, -} from '@backstage/backend-plugin-api'; +import { AuthService, LoggerService } from '@backstage/backend-plugin-api'; import { ConflictError, NotFoundError } from '@backstage/errors'; import { CatalogApi } from '@backstage/catalog-client'; import { @@ -29,38 +24,17 @@ import { stringifyEntityRef, UserEntity, } from '@backstage/catalog-model'; -import { - TokenManager, - createLegacyAuthAdapters, -} from '@backstage/backend-common'; /** * A catalog client tailored for reading out identity data from the catalog. - * - * @public - * @deprecated Use the provided `AuthResolverContext` instead, see https://backstage.io/docs/auth/identity-resolver#building-custom-resolvers */ export class CatalogIdentityClient { private readonly catalogApi: CatalogApi; private readonly auth: AuthService; - constructor(options: { - catalogApi: CatalogApi; - tokenManager?: TokenManager; - discovery: DiscoveryService; - auth?: AuthService; - httpAuth?: HttpAuthService; - }) { + constructor(options: { catalogApi: CatalogApi; auth: AuthService }) { this.catalogApi = options.catalogApi; - - const { auth } = createLegacyAuthAdapters({ - auth: options.auth, - httpAuth: options.httpAuth, - discovery: options.discovery, - tokenManager: options.tokenManager, - }); - - this.auth = auth; + this.auth = options.auth; } /** diff --git a/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.test.ts b/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.test.ts index c51d99a558..e79b4ee75d 100644 --- a/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.test.ts +++ b/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.test.ts @@ -17,7 +17,6 @@ import { CatalogAuthResolverContext } from './CatalogAuthResolverContext'; import { mockServices } from '@backstage/backend-test-utils'; import { TokenIssuer } from '../../identity/types'; -import { DiscoveryService } from '@backstage/backend-plugin-api'; import { catalogServiceMock } from '@backstage/plugin-catalog-node/testUtils'; import { NotFoundError } from '@backstage/errors'; @@ -34,9 +33,7 @@ describe('CatalogAuthResolverContext', () => { logger: mockServices.logger.mock(), catalogApi, tokenIssuer: {} as TokenIssuer, - discovery: {} as DiscoveryService, auth: mockServices.auth(), - httpAuth: mockServices.httpAuth(), }); await expect( diff --git a/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts b/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts index 0917d916c7..31db763d09 100644 --- a/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts +++ b/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { TokenManager } from '@backstage/backend-common'; import { CatalogApi } from '@backstage/catalog-client'; import { DEFAULT_NAMESPACE, @@ -24,12 +23,7 @@ import { stringifyEntityRef, } from '@backstage/catalog-model'; import { ConflictError, InputError, NotFoundError } from '@backstage/errors'; -import { - AuthService, - DiscoveryService, - HttpAuthService, - LoggerService, -} from '@backstage/backend-plugin-api'; +import { AuthService, LoggerService } from '@backstage/backend-plugin-api'; import { TokenIssuer } from '../../identity/types'; import { AuthOwnershipResolver, @@ -55,18 +49,12 @@ export class CatalogAuthResolverContext implements AuthResolverContext { logger: LoggerService; catalogApi: CatalogApi; tokenIssuer: TokenIssuer; - tokenManager?: TokenManager; - discovery: DiscoveryService; auth: AuthService; - httpAuth: HttpAuthService; ownershipResolver?: AuthOwnershipResolver; }): CatalogAuthResolverContext { const catalogIdentityClient = new CatalogIdentityClient({ catalogApi: options.catalogApi, - tokenManager: options.tokenManager, - discovery: options.discovery, auth: options.auth, - httpAuth: options.httpAuth, }); return new CatalogAuthResolverContext( diff --git a/plugins/auth-backend/src/providers/index.ts b/plugins/auth-backend/src/providers/index.ts index abe3e77736..772a913024 100644 --- a/plugins/auth-backend/src/providers/index.ts +++ b/plugins/auth-backend/src/providers/index.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { createOriginFilter, type ProviderFactories } from './router'; +export { type ProviderFactories } from './router'; diff --git a/plugins/auth-backend/src/providers/router.ts b/plugins/auth-backend/src/providers/router.ts index ceab20553d..63891c38dc 100644 --- a/plugins/auth-backend/src/providers/router.ts +++ b/plugins/auth-backend/src/providers/router.ts @@ -14,11 +14,9 @@ * limitations under the License. */ -import { TokenManager } from '@backstage/backend-common'; import { AuthService, DiscoveryService, - HttpAuthService, LoggerService, } from '@backstage/backend-plugin-api'; import { CatalogApi, CatalogClient } from '@backstage/catalog-client'; @@ -50,8 +48,6 @@ export function bindProviderRouters( logger: LoggerService; discovery: DiscoveryService; auth: AuthService; - httpAuth: HttpAuthService; - tokenManager?: TokenManager; tokenIssuer: TokenIssuer; ownershipResolver?: AuthOwnershipResolver; catalogApi?: CatalogApi; @@ -65,8 +61,6 @@ export function bindProviderRouters( logger, discovery, auth, - httpAuth, - tokenManager, tokenIssuer, catalogApi, ownershipResolver, @@ -97,10 +91,7 @@ export function bindProviderRouters( catalogApi: catalogApi ?? new CatalogClient({ discoveryApi: discovery }), tokenIssuer, - tokenManager, - discovery, auth, - httpAuth, ownershipResolver, }), }); @@ -148,10 +139,6 @@ export function bindProviderRouters( } } -/** - * @public - * @deprecated this export will be removed - */ export function createOriginFilter( config: Config, ): (origin: string) => boolean { diff --git a/plugins/auth-backend/src/service/router.ts b/plugins/auth-backend/src/service/router.ts index 070c9f905f..9c5a6b7711 100644 --- a/plugins/auth-backend/src/service/router.ts +++ b/plugins/auth-backend/src/service/router.ts @@ -21,15 +21,10 @@ import { AuthService, DatabaseService, DiscoveryService, - HttpAuthService, LoggerService, RootConfigService, } from '@backstage/backend-plugin-api'; import { AuthOwnershipResolver } from '@backstage/plugin-auth-node'; -import { - TokenManager, - createLegacyAuthAdapters, -} from '@backstage/backend-common'; import { NotFoundError } from '@backstage/errors'; import { CatalogApi } from '@backstage/catalog-client'; import { @@ -53,9 +48,7 @@ export interface RouterOptions { database: DatabaseService; config: RootConfigService; discovery: DiscoveryService; - tokenManager?: TokenManager; - auth?: AuthService; - httpAuth?: HttpAuthService; + auth: AuthService; tokenFactoryAlgorithm?: string; providerFactories?: ProviderFactories; catalogApi?: CatalogApi; @@ -74,8 +67,6 @@ export async function createRouter( providerFactories = {}, } = options; - const { auth, httpAuth } = createLegacyAuthAdapters(options); - const router = Router(); const appUrl = config.getString('app.baseUrl'); @@ -147,12 +138,11 @@ export async function createRouter( baseUrl: authUrl, tokenIssuer, ...options, - auth, - httpAuth, + auth: options.auth, }); bindOidcRouter(router, { - auth, + auth: options.auth, tokenIssuer, baseUrl: authUrl, userInfoDatabaseHandler, diff --git a/yarn.lock b/yarn.lock index 3337a6ee2f..4ff5e976ad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5277,7 +5277,6 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend@workspace:plugins/auth-backend" dependencies: - "@backstage/backend-common": "npm:^0.25.0" "@backstage/backend-defaults": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-test-utils": "workspace:^" From 855dd3ba45889bae7ce323a7e3dca82da60e1e71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 15 Apr 2025 22:48:58 +0200 Subject: [PATCH 25/61] remove index files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- plugins/auth-backend/src/identity/index.ts | 24 ------------------- plugins/auth-backend/src/identity/types.ts | 10 ++------ plugins/auth-backend/src/lib/catalog/index.ts | 17 ------------- .../resolvers/CatalogAuthResolverContext.ts | 2 +- .../auth-backend/src/lib/resolvers/index.ts | 17 ------------- plugins/auth-backend/src/providers/index.ts | 17 ------------- plugins/auth-backend/src/providers/router.ts | 4 ---- plugins/auth-backend/src/service/index.ts | 17 ------------- plugins/auth-backend/src/service/router.ts | 12 ++++------ 9 files changed, 8 insertions(+), 112 deletions(-) delete mode 100644 plugins/auth-backend/src/identity/index.ts delete mode 100644 plugins/auth-backend/src/lib/catalog/index.ts delete mode 100644 plugins/auth-backend/src/lib/resolvers/index.ts delete mode 100644 plugins/auth-backend/src/providers/index.ts delete mode 100644 plugins/auth-backend/src/service/index.ts diff --git a/plugins/auth-backend/src/identity/index.ts b/plugins/auth-backend/src/identity/index.ts deleted file mode 100644 index 6ea025aae9..0000000000 --- a/plugins/auth-backend/src/identity/index.ts +++ /dev/null @@ -1,24 +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. - */ - -export { bindOidcRouter } from './router'; -export { TokenFactory } from './TokenFactory'; -export { DatabaseKeyStore } from './DatabaseKeyStore'; -export { MemoryKeyStore } from './MemoryKeyStore'; -export { FirestoreKeyStore } from './FirestoreKeyStore'; -export { KeyStores } from './KeyStores'; -export type { KeyStore, TokenParams } from './types'; -export { UserInfoDatabaseHandler } from './UserInfoDatabaseHandler'; diff --git a/plugins/auth-backend/src/identity/types.ts b/plugins/auth-backend/src/identity/types.ts index 059b9fca84..0693a2aba0 100644 --- a/plugins/auth-backend/src/identity/types.ts +++ b/plugins/auth-backend/src/identity/types.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { TokenParams as _TokenParams } from '@backstage/plugin-auth-node'; +import { TokenParams } from '@backstage/plugin-auth-node'; /** Represents any form of serializable JWK */ export interface AnyJWK extends Record { @@ -24,12 +24,6 @@ export interface AnyJWK extends Record { kty: string; } -/** - * @public - * @deprecated import from `@backstage/plugin-auth-node` instead - */ -export type TokenParams = _TokenParams; - /** * A TokenIssuer is able to issue verifiable ID Tokens on demand. */ @@ -37,7 +31,7 @@ export type TokenIssuer = { /** * Issues a new ID Token */ - issueToken(params: _TokenParams): Promise; + issueToken(params: TokenParams): Promise; /** * List all public keys that are currently being used to sign tokens, or have been used diff --git a/plugins/auth-backend/src/lib/catalog/index.ts b/plugins/auth-backend/src/lib/catalog/index.ts deleted file mode 100644 index f0f5b10808..0000000000 --- a/plugins/auth-backend/src/lib/catalog/index.ts +++ /dev/null @@ -1,17 +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. - */ - -export { CatalogIdentityClient } from './CatalogIdentityClient'; diff --git a/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts b/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts index 31db763d09..a27954d6c4 100644 --- a/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts +++ b/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts @@ -31,7 +31,7 @@ import { AuthResolverContext, TokenParams, } from '@backstage/plugin-auth-node'; -import { CatalogIdentityClient } from '../catalog'; +import { CatalogIdentityClient } from '../catalog/CatalogIdentityClient'; function getDefaultOwnershipEntityRefs(entity: Entity) { const membershipRefs = diff --git a/plugins/auth-backend/src/lib/resolvers/index.ts b/plugins/auth-backend/src/lib/resolvers/index.ts deleted file mode 100644 index fc3ea8521c..0000000000 --- a/plugins/auth-backend/src/lib/resolvers/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * 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. - */ - -export { CatalogAuthResolverContext } from './CatalogAuthResolverContext'; diff --git a/plugins/auth-backend/src/providers/index.ts b/plugins/auth-backend/src/providers/index.ts deleted file mode 100644 index 772a913024..0000000000 --- a/plugins/auth-backend/src/providers/index.ts +++ /dev/null @@ -1,17 +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. - */ - -export { type ProviderFactories } from './router'; diff --git a/plugins/auth-backend/src/providers/router.ts b/plugins/auth-backend/src/providers/router.ts index 63891c38dc..63e37a5035 100644 --- a/plugins/auth-backend/src/providers/router.ts +++ b/plugins/auth-backend/src/providers/router.ts @@ -32,10 +32,6 @@ import { Minimatch } from 'minimatch'; import { CatalogAuthResolverContext } from '../lib/resolvers/CatalogAuthResolverContext'; import { TokenIssuer } from '../identity/types'; -/** - * @public - * @deprecated Migrate the auth plugin to the new backend system https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin - */ export type ProviderFactories = { [s: string]: AuthProviderFactory }; export function bindProviderRouters( diff --git a/plugins/auth-backend/src/service/index.ts b/plugins/auth-backend/src/service/index.ts deleted file mode 100644 index d26055aa59..0000000000 --- a/plugins/auth-backend/src/service/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2024 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 { createRouter, type RouterOptions } from './router'; diff --git a/plugins/auth-backend/src/service/router.ts b/plugins/auth-backend/src/service/router.ts index 9c5a6b7711..d58d1bc976 100644 --- a/plugins/auth-backend/src/service/router.ts +++ b/plugins/auth-backend/src/service/router.ts @@ -27,12 +27,10 @@ import { import { AuthOwnershipResolver } from '@backstage/plugin-auth-node'; import { NotFoundError } from '@backstage/errors'; import { CatalogApi } from '@backstage/catalog-client'; -import { - bindOidcRouter, - KeyStores, - TokenFactory, - UserInfoDatabaseHandler, -} from '../identity'; +import { bindOidcRouter } from '../identity/router'; +import { KeyStores } from '../identity/KeyStores'; +import { TokenFactory } from '../identity/TokenFactory'; +import { UserInfoDatabaseHandler } from '../identity/UserInfoDatabaseHandler'; import session from 'express-session'; import connectSessionKnex from 'connect-session-knex'; import passport from 'passport'; @@ -43,7 +41,7 @@ import { StaticTokenIssuer } from '../identity/StaticTokenIssuer'; import { StaticKeyStore } from '../identity/StaticKeyStore'; import { bindProviderRouters, ProviderFactories } from '../providers/router'; -export interface RouterOptions { +interface RouterOptions { logger: LoggerService; database: DatabaseService; config: RootConfigService; From 5cdfe05cba2a680b1b3db084ed502c0bd5b85816 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 15 Apr 2025 22:59:46 +0200 Subject: [PATCH 26/61] remove unused packages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/cruel-lights-sip.md | 5 + .../package.json | 1 + plugins/auth-backend/knip-report.md | 32 --- plugins/auth-backend/package.json | 32 +-- yarn.lock | 194 +----------------- 5 files changed, 19 insertions(+), 245 deletions(-) create mode 100644 .changeset/cruel-lights-sip.md diff --git a/.changeset/cruel-lights-sip.md b/.changeset/cruel-lights-sip.md new file mode 100644 index 0000000000..b38ab052a9 --- /dev/null +++ b/.changeset/cruel-lights-sip.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend-module-github-provider': patch +--- + +Added missing types package diff --git a/plugins/auth-backend-module-github-provider/package.json b/plugins/auth-backend-module-github-provider/package.json index efc9c5146c..dd0ec788a3 100644 --- a/plugins/auth-backend-module-github-provider/package.json +++ b/plugins/auth-backend-module-github-provider/package.json @@ -44,6 +44,7 @@ "@backstage/cli": "workspace:^", "@backstage/plugin-auth-backend": "workspace:^", "@backstage/types": "workspace:^", + "@types/passport-github2": "^1.2.4", "supertest": "^7.0.0" }, "configSchema": "config.d.ts" diff --git a/plugins/auth-backend/knip-report.md b/plugins/auth-backend/knip-report.md index fd6926afb9..2661c35327 100644 --- a/plugins/auth-backend/knip-report.md +++ b/plugins/auth-backend/knip-report.md @@ -1,34 +1,2 @@ # Knip report -## Unused dependencies (14) - -| Name | Location | Severity | -| :---------------------- | :----------- | :------- | -| passport-google-oauth20 | package.json | error | -| passport-onelogin-oauth | package.json | error | -| google-auth-library | package.json | error | -| passport-microsoft | package.json | error | -| passport-github2 | package.json | error | -| passport-auth0 | package.json | error | -| openid-client | package.json | error | -| compression | package.json | error | -| node-cache | package.json | error | -| fs-extra | package.json | error | -| winston | package.json | error | -| morgan | package.json | error | -| cors | package.json | error | -| yn | package.json | error | - -## Unused devDependencies (8) - -| Name | Location | Severity | -| :----------------------------- | :----------- | :------- | -| @types/passport-google-oauth20 | package.json | error | -| @types/passport-microsoft | package.json | error | -| @types/passport-strategy | package.json | error | -| @types/passport-github2 | package.json | error | -| @types/passport-auth0 | package.json | error | -| @types/passport-saml | package.json | error | -| @types/body-parser | package.json | error | -| @types/xml2js | package.json | error | - diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 656a19cf89..cf07425e09 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -52,52 +52,28 @@ "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "@google-cloud/firestore": "^7.0.0", - "@node-saml/passport-saml": "^5.0.0", - "@types/express": "^4.17.6", - "@types/passport": "^1.0.3", - "compression": "^1.7.4", "connect-session-knex": "^4.0.0", "cookie-parser": "^1.4.5", - "cors": "^2.8.5", "express": "^4.17.1", "express-promise-router": "^4.1.0", "express-session": "^1.17.1", - "fs-extra": "^11.2.0", - "google-auth-library": "^9.0.0", "jose": "^5.0.0", "knex": "^3.0.0", "lodash": "^4.17.21", "luxon": "^3.0.0", "minimatch": "^9.0.0", - "morgan": "^1.10.0", - "node-cache": "^5.1.2", - "openid-client": "^5.2.1", "passport": "^0.7.0", - "passport-auth0": "^1.4.3", - "passport-github2": "^0.1.12", - "passport-google-oauth20": "^2.0.0", - "passport-microsoft": "^1.0.0", - "passport-oauth2": "^1.6.1", - "passport-onelogin-oauth": "^0.0.1", - "uuid": "^11.0.0", - "winston": "^3.2.1", - "yn": "^4.0.0" + "uuid": "^11.0.0" }, "devDependencies": { "@backstage/backend-defaults": "workspace:^", "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", - "@types/body-parser": "^1.19.0", + "@backstage/plugin-auth-backend-module-google-provider": "workspace:^", "@types/cookie-parser": "^1.4.2", + "@types/express": "^4.17.6", "@types/express-session": "^1.17.2", - "@types/passport-auth0": "^1.0.5", - "@types/passport-github2": "^1.2.4", - "@types/passport-google-oauth20": "^2.0.3", - "@types/passport-microsoft": "^1.0.0", - "@types/passport-saml": "^1.1.3", - "@types/passport-strategy": "^0.2.35", - "@types/xml2js": "^0.4.7", - "msw": "^1.0.0", + "@types/passport": "^1.0.3", "supertest": "^7.0.0" }, "configSchema": "config.d.ts" diff --git a/yarn.lock b/yarn.lock index 4ff5e976ad..352b16bc2d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5060,6 +5060,7 @@ __metadata: "@backstage/plugin-auth-backend": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" "@backstage/types": "workspace:^" + "@types/passport-github2": "npm:^1.2.4" passport-github2: "npm:^0.1.12" supertest: "npm:^7.0.0" languageName: unknown @@ -5083,7 +5084,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend-module-google-provider@workspace:plugins/auth-backend-module-google-provider": +"@backstage/plugin-auth-backend-module-google-provider@workspace:^, @backstage/plugin-auth-backend-module-google-provider@workspace:plugins/auth-backend-module-google-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-google-provider@workspace:plugins/auth-backend-module-google-provider" dependencies: @@ -5285,52 +5286,28 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" + "@backstage/plugin-auth-backend-module-google-provider": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@google-cloud/firestore": "npm:^7.0.0" - "@node-saml/passport-saml": "npm:^5.0.0" - "@types/body-parser": "npm:^1.19.0" "@types/cookie-parser": "npm:^1.4.2" "@types/express": "npm:^4.17.6" "@types/express-session": "npm:^1.17.2" "@types/passport": "npm:^1.0.3" - "@types/passport-auth0": "npm:^1.0.5" - "@types/passport-github2": "npm:^1.2.4" - "@types/passport-google-oauth20": "npm:^2.0.3" - "@types/passport-microsoft": "npm:^1.0.0" - "@types/passport-saml": "npm:^1.1.3" - "@types/passport-strategy": "npm:^0.2.35" - "@types/xml2js": "npm:^0.4.7" - compression: "npm:^1.7.4" connect-session-knex: "npm:^4.0.0" cookie-parser: "npm:^1.4.5" - cors: "npm:^2.8.5" express: "npm:^4.17.1" express-promise-router: "npm:^4.1.0" express-session: "npm:^1.17.1" - fs-extra: "npm:^11.2.0" - google-auth-library: "npm:^9.0.0" jose: "npm:^5.0.0" knex: "npm:^3.0.0" lodash: "npm:^4.17.21" luxon: "npm:^3.0.0" minimatch: "npm:^9.0.0" - morgan: "npm:^1.10.0" - msw: "npm:^1.0.0" - node-cache: "npm:^5.1.2" - openid-client: "npm:^5.2.1" passport: "npm:^0.7.0" - passport-auth0: "npm:^1.4.3" - passport-github2: "npm:^0.1.12" - passport-google-oauth20: "npm:^2.0.0" - passport-microsoft: "npm:^1.0.0" - passport-oauth2: "npm:^1.6.1" - passport-onelogin-oauth: "npm:^0.0.1" supertest: "npm:^7.0.0" uuid: "npm:^11.0.0" - winston: "npm:^3.2.1" - yn: "npm:^4.0.0" languageName: unknown linkType: soft @@ -12255,40 +12232,6 @@ __metadata: languageName: node linkType: hard -"@node-saml/node-saml@npm:^5.0.1": - version: 5.0.1 - resolution: "@node-saml/node-saml@npm:5.0.1" - dependencies: - "@types/debug": "npm:^4.1.12" - "@types/qs": "npm:^6.9.11" - "@types/xml-encryption": "npm:^1.2.4" - "@types/xml2js": "npm:^0.4.14" - "@xmldom/is-dom-node": "npm:^1.0.1" - "@xmldom/xmldom": "npm:^0.8.10" - debug: "npm:^4.3.4" - xml-crypto: "npm:^6.0.1" - xml-encryption: "npm:^3.0.2" - xml2js: "npm:^0.6.2" - xmlbuilder: "npm:^15.1.1" - xpath: "npm:^0.0.34" - checksum: 10/65b31123733582ddb159fe2139349c766a5327fe12a141fac637ec8b5636be061c644e53486f17d2ffd67ef62d5497c90f76b5a6692a30a94d4114eae6124165 - languageName: node - linkType: hard - -"@node-saml/passport-saml@npm:^5.0.0": - version: 5.0.1 - resolution: "@node-saml/passport-saml@npm:5.0.1" - dependencies: - "@node-saml/node-saml": "npm:^5.0.1" - "@types/express": "npm:^4.17.21" - "@types/passport": "npm:^1.0.16" - "@types/passport-strategy": "npm:^0.2.38" - passport: "npm:^0.7.0" - passport-strategy: "npm:^1.0.0" - checksum: 10/b921ceeff68326539591ec6ef805535e907b3a63182c8df3418d8b449b88b82fb0137117f087268a3ebc76ef294a37b3e1b4df675f1f1a57b95455b87366db8d - languageName: node - linkType: hard - "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -19259,7 +19202,7 @@ __metadata: languageName: node linkType: hard -"@types/body-parser@npm:*, @types/body-parser@npm:^1.19.0": +"@types/body-parser@npm:*": version: 1.19.5 resolution: "@types/body-parser@npm:1.19.5" dependencies: @@ -19513,7 +19456,7 @@ __metadata: languageName: node linkType: hard -"@types/debug@npm:^4.0.0, @types/debug@npm:^4.1.12, @types/debug@npm:^4.1.7": +"@types/debug@npm:^4.0.0, @types/debug@npm:^4.1.7": version: 4.1.12 resolution: "@types/debug@npm:4.1.12" dependencies: @@ -20308,26 +20251,6 @@ __metadata: languageName: node linkType: hard -"@types/passport-saml@npm:^1.1.3": - version: 1.1.7 - resolution: "@types/passport-saml@npm:1.1.7" - dependencies: - "@types/express": "npm:*" - "@types/passport": "npm:*" - checksum: 10/cc112ac43d8a9ed586cfa04342afefef45ec96b7125a554534fb763986e3426b0316ee3d9e4705240c9c3df3b2b19914dba48ef6abccbd6946e9ae634f790332 - languageName: node - linkType: hard - -"@types/passport-strategy@npm:^0.2.35, @types/passport-strategy@npm:^0.2.38": - version: 0.2.38 - resolution: "@types/passport-strategy@npm:0.2.38" - dependencies: - "@types/express": "npm:*" - "@types/passport": "npm:*" - checksum: 10/b580e165182b137a6e57b6b7511904e6c875a5e372f08679ec54f456dc5c2a72d86f23d9373a52d8286b207fe8240946686f9e3d50b0bc1b4f7316f336a06fa2 - languageName: node - linkType: hard - "@types/passport@npm:*, @types/passport@npm:^1.0.16, @types/passport@npm:^1.0.3": version: 1.0.17 resolution: "@types/passport@npm:1.0.17" @@ -20419,7 +20342,7 @@ __metadata: languageName: node linkType: hard -"@types/qs@npm:*, @types/qs@npm:^6.9.11, @types/qs@npm:^6.9.6": +"@types/qs@npm:*, @types/qs@npm:^6.9.6": version: 6.9.18 resolution: "@types/qs@npm:6.9.18" checksum: 10/152fab96efd819cc82ae67c39f089df415da6deddb48f1680edaaaa4e86a2a597de7b2ff0ad391df66d11a07006a08d52c9405e86b8cb8f3d5ba15881fe56cc7 @@ -21001,24 +20924,6 @@ __metadata: languageName: node linkType: hard -"@types/xml-encryption@npm:^1.2.4": - version: 1.2.4 - resolution: "@types/xml-encryption@npm:1.2.4" - dependencies: - "@types/node": "npm:*" - checksum: 10/1ef957dfb47cf55b12e114755e271a2343f73eb4c59ab6c68b0b7d1b8111d7e1bd8d2bfe0601d2aea09be83c66355bc77fc59f9b71aeff9bb9e15371bcfef5d3 - languageName: node - linkType: hard - -"@types/xml2js@npm:^0.4.14, @types/xml2js@npm:^0.4.7": - version: 0.4.14 - resolution: "@types/xml2js@npm:0.4.14" - dependencies: - "@types/node": "npm:*" - checksum: 10/d76338b8d6ce8540c7af6a32aacf96c38f6de48254568f58f6e5ac2af3f88e6bd1490e5346d3bb336990f91267d23c5cc09e8bf7e80840a63c7855dbf174ecbb - languageName: node - linkType: hard - "@types/yargs-parser@npm:*": version: 15.0.0 resolution: "@types/yargs-parser@npm:15.0.0" @@ -21865,14 +21770,7 @@ __metadata: languageName: node linkType: hard -"@xmldom/is-dom-node@npm:^1.0.1": - version: 1.0.1 - resolution: "@xmldom/is-dom-node@npm:1.0.1" - checksum: 10/45683a6a192e4eff0f5189d4e3ef5272fcf8e3458f598f99614810490a8163c9a7ebe4ecaf241286fb74fcd762610b46c062ad3c7fddaa6eafa9a9f1537e338a - languageName: node - linkType: hard - -"@xmldom/xmldom@npm:^0.8.10, @xmldom/xmldom@npm:^0.8.3, @xmldom/xmldom@npm:^0.8.5": +"@xmldom/xmldom@npm:^0.8.3": version: 0.8.10 resolution: "@xmldom/xmldom@npm:0.8.10" checksum: 10/62400bc5e0e75b90650e33a5ceeb8d94829dd11f9b260962b71a784cd014ddccec3e603fe788af9c1e839fa4648d8c521ebd80d8b752878d3a40edabc9ce7ccf @@ -38640,7 +38538,7 @@ __metadata: languageName: node linkType: hard -"openid-client@npm:^5.2.1, openid-client@npm:^5.3.0, openid-client@npm:^5.4.3, openid-client@npm:^5.5.0, openid-client@npm:^5.6.5": +"openid-client@npm:^5.3.0, openid-client@npm:^5.4.3, openid-client@npm:^5.5.0, openid-client@npm:^5.6.5": version: 5.7.1 resolution: "openid-client@npm:5.7.1" dependencies: @@ -39258,7 +39156,7 @@ __metadata: languageName: node linkType: hard -"passport-strategy@npm:1.x.x, passport-strategy@npm:^1.0.0": +"passport-strategy@npm:1.x.x": version: 1.0.0 resolution: "passport-strategy@npm:1.0.0" checksum: 10/5086693f2508e538dffa55a338c89fe8192fb5f4478c71f80cd5890b8573419a098f4fec88b505374f60bbe9049f6f24b9f3992678612528a3370b4dc73354a2 @@ -43107,13 +43005,6 @@ __metadata: languageName: node linkType: hard -"sax@npm:>=0.6.0": - version: 1.2.4 - resolution: "sax@npm:1.2.4" - checksum: 10/09b79ff6dc09689a24323352117c94593c69db348997b2af0edbd82fa08aba47d778055bf9616b57285bb73d25d790900c044bf631a8f10c8252412e3f3fe5dd - languageName: node - linkType: hard - "saxes@npm:^6.0.0": version: 6.0.0 resolution: "saxes@npm:6.0.0" @@ -47912,28 +47803,6 @@ __metadata: languageName: node linkType: hard -"xml-crypto@npm:^6.0.1": - version: 6.0.1 - resolution: "xml-crypto@npm:6.0.1" - dependencies: - "@xmldom/is-dom-node": "npm:^1.0.1" - "@xmldom/xmldom": "npm:^0.8.10" - xpath: "npm:^0.0.33" - checksum: 10/703d40b54333a50f74f2d4f3e37a7b9de7aa2dfde48b0418205261d2f66c9e3869babd96d7be18ec1661aaa3aea03a018279846f844cea607a57183a21a4748a - languageName: node - linkType: hard - -"xml-encryption@npm:^3.0.2": - version: 3.0.2 - resolution: "xml-encryption@npm:3.0.2" - dependencies: - "@xmldom/xmldom": "npm:^0.8.5" - escape-html: "npm:^1.0.3" - xpath: "npm:0.0.32" - checksum: 10/081a42ca7d7e81d23229f2a1149313e934d872c33da57eda25113a613f3940ff66f73e4e2f62d37a3a38c3c7d291784047b5b729988f346fef96c7124f6dbe83 - languageName: node - linkType: hard - "xml-name-validator@npm:^4.0.0": version: 4.0.0 resolution: "xml-name-validator@npm:4.0.0" @@ -47948,16 +47817,6 @@ __metadata: languageName: node linkType: hard -"xml2js@npm:^0.6.2": - version: 0.6.2 - resolution: "xml2js@npm:0.6.2" - dependencies: - sax: "npm:>=0.6.0" - xmlbuilder: "npm:~11.0.0" - checksum: 10/df29de8eeedb762c367d87945c39bcf54db19a2c522607491c266ed6184b5a749e37ff29cfaed0ac149da9ba332ac3dcf8e5ff2bd0a206be3343eca95faa941d - languageName: node - linkType: hard - "xml@npm:=1.0.1": version: 1.0.1 resolution: "xml@npm:1.0.1" @@ -47965,20 +47824,6 @@ __metadata: languageName: node linkType: hard -"xmlbuilder@npm:^15.1.1": - version: 15.1.1 - resolution: "xmlbuilder@npm:15.1.1" - checksum: 10/e6f4bab2504afdd5f80491bda948894d2146756532521dbe7db33ae0931cd3000e3b4da19b3f5b3f51bedbd9ee06582144d28136d68bd1df96579ecf4d4404a2 - languageName: node - linkType: hard - -"xmlbuilder@npm:~11.0.0": - version: 11.0.1 - resolution: "xmlbuilder@npm:11.0.1" - checksum: 10/c8c3d208783718db5b285101a736cd8e6b69a5c265199a0739abaa93d1a1b7de5489fd16df4e776e18b2c98cb91f421a7349e99fd8c1ebeb44ecfed72a25091a - languageName: node - linkType: hard - "xmlchars@npm:^2.2.0": version: 2.2.0 resolution: "xmlchars@npm:2.2.0" @@ -47986,27 +47831,6 @@ __metadata: languageName: node linkType: hard -"xpath@npm:0.0.32": - version: 0.0.32 - resolution: "xpath@npm:0.0.32" - checksum: 10/9d8be7adde4500e9ee96db963838269021f89ef1ad222fdfd41b7266336e851a38416b4a710c194dcf9eb35cf58ad11e023e5951e919151b76ffcd6eb3b2cbf4 - languageName: node - linkType: hard - -"xpath@npm:^0.0.33": - version: 0.0.33 - resolution: "xpath@npm:0.0.33" - checksum: 10/09c539661cafc0d75bb48d13fee7ce6e7593d88f4387c401a3b15d46d543e81f46680be5c6ecf868c11f6090ee67ea78e0c327c4e0ffceb2969308a2d1e238bb - languageName: node - linkType: hard - -"xpath@npm:^0.0.34": - version: 0.0.34 - resolution: "xpath@npm:0.0.34" - checksum: 10/77ce03c4494dab97b70fa443761c35a6bd484538a449714b981387a532a6eb22e245b29164f5d8a4a82f4f3cfd71d27ba71d09ed2b6fe933654585c6e46c0a25 - languageName: node - linkType: hard - "xtend@npm:^4.0.0, xtend@npm:^4.0.2": version: 4.0.2 resolution: "xtend@npm:4.0.2" From ff95e42895a353409b768405dead4948d44a1325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 15 Apr 2025 23:25:59 +0200 Subject: [PATCH 27/61] use the non-alpha catalog service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- plugins/auth-backend/src/authPlugin.ts | 8 ++--- .../lib/catalog/CatalogIdentityClient.test.ts | 30 ++++++++----------- .../src/lib/catalog/CatalogIdentityClient.ts | 30 ++++++++----------- .../CatalogAuthResolverContext.test.ts | 13 ++++---- .../resolvers/CatalogAuthResolverContext.ts | 27 +++++++++-------- plugins/auth-backend/src/providers/router.ts | 17 ++++------- plugins/auth-backend/src/service/router.ts | 4 +-- 7 files changed, 57 insertions(+), 72 deletions(-) diff --git a/plugins/auth-backend/src/authPlugin.ts b/plugins/auth-backend/src/authPlugin.ts index 8e55fccdea..f3877d48cd 100644 --- a/plugins/auth-backend/src/authPlugin.ts +++ b/plugins/auth-backend/src/authPlugin.ts @@ -24,7 +24,7 @@ import { AuthProviderFactory, authProvidersExtensionPoint, } from '@backstage/plugin-auth-node'; -import { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha'; +import { catalogServiceRef } from '@backstage/plugin-catalog-node'; import { createRouter } from './service/router'; /** @@ -66,7 +66,7 @@ export const authPlugin = createBackendPlugin({ database: coreServices.database, discovery: coreServices.discovery, auth: coreServices.auth, - catalogApi: catalogServiceRef, + catalog: catalogServiceRef, }, async init({ httpRouter, @@ -75,7 +75,7 @@ export const authPlugin = createBackendPlugin({ database, discovery, auth, - catalogApi, + catalog, }) { const router = await createRouter({ logger, @@ -83,7 +83,7 @@ export const authPlugin = createBackendPlugin({ database, discovery, auth, - catalogApi, + catalog, providerFactories: Object.fromEntries(providers), ownershipResolver, }); diff --git a/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.test.ts b/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.test.ts index b873b043aa..ddfa792fa1 100644 --- a/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.test.ts +++ b/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.test.ts @@ -20,15 +20,15 @@ import { } from '@backstage/catalog-model'; import { catalogServiceMock } from '@backstage/plugin-catalog-node/testUtils'; import { CatalogIdentityClient } from './CatalogIdentityClient'; -import { mockCredentials, mockServices } from '@backstage/backend-test-utils'; +import { mockServices } from '@backstage/backend-test-utils'; describe('CatalogIdentityClient', () => { - const auth = mockServices.auth(); + const auth = mockServices.auth({ pluginId: 'auth' }); afterEach(() => jest.resetAllMocks()); it('findUser passes through the correct search params', async () => { - const catalogApi = catalogServiceMock({ + const catalog = catalogServiceMock({ entities: [ { apiVersion: 'backstage.io/v1beta1', @@ -42,16 +42,16 @@ describe('CatalogIdentityClient', () => { }, ], }); - jest.spyOn(catalogApi, 'getEntities'); + jest.spyOn(catalog, 'getEntities'); const client = new CatalogIdentityClient({ - catalogApi, + catalog, auth, }); await client.findUser({ annotations: { key: 'value' } }); - expect(catalogApi.getEntities).toHaveBeenCalledWith( + expect(catalog.getEntities).toHaveBeenCalledWith( { filter: { kind: 'user', @@ -59,10 +59,7 @@ describe('CatalogIdentityClient', () => { }, }, { - token: mockCredentials.service.token({ - onBehalfOf: mockCredentials.service('plugin:test'), - targetPluginId: 'catalog', - }), + credentials: await auth.getOwnServiceCredentials(), }, ); }); @@ -103,11 +100,11 @@ describe('CatalogIdentityClient', () => { ], }, ]; - const catalogApi = catalogServiceMock({ entities: mockUsers }); - jest.spyOn(catalogApi, 'getEntities'); + const catalog = catalogServiceMock({ entities: mockUsers }); + jest.spyOn(catalog, 'getEntities'); const client = new CatalogIdentityClient({ - catalogApi, + catalog, auth, }); @@ -115,7 +112,7 @@ describe('CatalogIdentityClient', () => { entityRefs: ['inigom', 'User:default/imontoya', 'User:reality/mpatinkin'], }); - expect(catalogApi.getEntities).toHaveBeenCalledWith( + expect(catalog.getEntities).toHaveBeenCalledWith( { filter: [ { @@ -136,10 +133,7 @@ describe('CatalogIdentityClient', () => { ], }, { - token: mockCredentials.service.token({ - onBehalfOf: mockCredentials.service('plugin:test'), - targetPluginId: 'catalog', - }), + credentials: await auth.getOwnServiceCredentials(), }, ); diff --git a/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.ts b/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.ts index 074a402bca..bdec031e6a 100644 --- a/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.ts +++ b/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.ts @@ -16,7 +16,7 @@ import { AuthService, LoggerService } from '@backstage/backend-plugin-api'; import { ConflictError, NotFoundError } from '@backstage/errors'; -import { CatalogApi } from '@backstage/catalog-client'; +import { CatalogService } from '@backstage/plugin-catalog-node'; import { CompoundEntityRef, parseEntityRef, @@ -29,11 +29,11 @@ import { * A catalog client tailored for reading out identity data from the catalog. */ export class CatalogIdentityClient { - private readonly catalogApi: CatalogApi; + private readonly catalog: CatalogService; private readonly auth: AuthService; - constructor(options: { catalogApi: CatalogApi; auth: AuthService }) { - this.catalogApi = options.catalogApi; + constructor(options: { catalog: CatalogService; auth: AuthService }) { + this.catalog = options.catalog; this.auth = options.auth; } @@ -52,12 +52,10 @@ export class CatalogIdentityClient { filter[`metadata.annotations.${key}`] = value; } - const { token } = await this.auth.getPluginRequestToken({ - onBehalfOf: await this.auth.getOwnServiceCredentials(), - targetPluginId: 'catalog', - }); - - const { items } = await this.catalogApi.getEntities({ filter }, { token }); + const { items } = await this.catalog.getEntities( + { filter }, + { credentials: await this.auth.getOwnServiceCredentials() }, + ); if (items.length !== 1) { if (items.length > 1) { @@ -103,13 +101,11 @@ export class CatalogIdentityClient { 'metadata.name': ref.name, })); - const { token } = await this.auth.getPluginRequestToken({ - onBehalfOf: await this.auth.getOwnServiceCredentials(), - targetPluginId: 'catalog', - }); - - const entities = await this.catalogApi - .getEntities({ filter }, { token }) + const entities = await this.catalog + .getEntities( + { filter }, + { credentials: await this.auth.getOwnServiceCredentials() }, + ) .then(r => r.items); if (entityRefs.length !== entities.length) { diff --git a/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.test.ts b/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.test.ts index e79b4ee75d..4426cb7815 100644 --- a/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.test.ts +++ b/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.test.ts @@ -25,15 +25,16 @@ describe('CatalogAuthResolverContext', () => { jest.clearAllMocks(); }); - const catalogApi = catalogServiceMock(); - jest.spyOn(catalogApi, 'getEntities'); + const catalog = catalogServiceMock(); + jest.spyOn(catalog, 'getEntities'); it('adds kind to filter when missing', async () => { + const auth = mockServices.auth(); const context = CatalogAuthResolverContext.create({ logger: mockServices.logger.mock(), - catalogApi, + catalog, tokenIssuer: {} as TokenIssuer, - auth: mockServices.auth(), + auth, }); await expect( @@ -41,11 +42,11 @@ describe('CatalogAuthResolverContext', () => { filter: [{}, { kind: 'group' }, { KIND: 'USER' }], }), ).rejects.toThrow(NotFoundError); - expect(catalogApi.getEntities).toHaveBeenCalledWith( + expect(catalog.getEntities).toHaveBeenCalledWith( { filter: [{ kind: 'user' }, { kind: 'group' }, { KIND: 'USER' }], }, - { token: 'mock-service-token:{"sub":"plugin:test","target":"catalog"}' }, + { credentials: await auth.getOwnServiceCredentials() }, ); }); }); diff --git a/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts b/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts index a27954d6c4..bbf42c70eb 100644 --- a/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts +++ b/plugins/auth-backend/src/lib/resolvers/CatalogAuthResolverContext.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { CatalogApi } from '@backstage/catalog-client'; import { DEFAULT_NAMESPACE, Entity, @@ -24,6 +23,7 @@ import { } from '@backstage/catalog-model'; import { ConflictError, InputError, NotFoundError } from '@backstage/errors'; import { AuthService, LoggerService } from '@backstage/backend-plugin-api'; +import { CatalogService } from '@backstage/plugin-catalog-node'; import { TokenIssuer } from '../../identity/types'; import { AuthOwnershipResolver, @@ -47,13 +47,13 @@ function getDefaultOwnershipEntityRefs(entity: Entity) { export class CatalogAuthResolverContext implements AuthResolverContext { static create(options: { logger: LoggerService; - catalogApi: CatalogApi; + catalog: CatalogService; tokenIssuer: TokenIssuer; auth: AuthService; ownershipResolver?: AuthOwnershipResolver; }): CatalogAuthResolverContext { const catalogIdentityClient = new CatalogIdentityClient({ - catalogApi: options.catalogApi, + catalog: options.catalog, auth: options.auth, }); @@ -61,7 +61,7 @@ export class CatalogAuthResolverContext implements AuthResolverContext { options.logger, options.tokenIssuer, catalogIdentityClient, - options.catalogApi, + options.catalog, options.auth, options.ownershipResolver, ); @@ -71,7 +71,7 @@ export class CatalogAuthResolverContext implements AuthResolverContext { public readonly logger: LoggerService, public readonly tokenIssuer: TokenIssuer, public readonly catalogIdentityClient: CatalogIdentityClient, - private readonly catalogApi: CatalogApi, + private readonly catalog: CatalogService, private readonly auth: AuthService, private readonly ownershipResolver?: AuthOwnershipResolver, ) {} @@ -83,17 +83,15 @@ export class CatalogAuthResolverContext implements AuthResolverContext { async findCatalogUser(query: AuthResolverCatalogUserQuery) { let result: Entity[] | Entity | undefined = undefined; - const { token } = await this.auth.getPluginRequestToken({ - onBehalfOf: await this.auth.getOwnServiceCredentials(), - targetPluginId: 'catalog', - }); if ('entityRef' in query) { const entityRef = parseEntityRef(query.entityRef, { defaultKind: 'User', defaultNamespace: DEFAULT_NAMESPACE, }); - result = await this.catalogApi.getEntityByRef(entityRef, { token }); + result = await this.catalog.getEntityByRef(entityRef, { + credentials: await this.auth.getOwnServiceCredentials(), + }); } else if ('annotations' in query) { const filter: Record = { kind: 'user', @@ -101,7 +99,10 @@ export class CatalogAuthResolverContext implements AuthResolverContext { for (const [key, value] of Object.entries(query.annotations)) { filter[`metadata.annotations.${key}`] = value; } - const res = await this.catalogApi.getEntities({ filter }, { token }); + const res = await this.catalog.getEntities( + { filter }, + { credentials: await this.auth.getOwnServiceCredentials() }, + ); result = res.items; } else if ('filter' in query) { const filter = [query.filter].flat().map(value => { @@ -117,9 +118,9 @@ export class CatalogAuthResolverContext implements AuthResolverContext { } return value; }); - const res = await this.catalogApi.getEntities( + const res = await this.catalog.getEntities( { filter: filter }, - { token }, + { credentials: await this.auth.getOwnServiceCredentials() }, ); result = res.items; } else { diff --git a/plugins/auth-backend/src/providers/router.ts b/plugins/auth-backend/src/providers/router.ts index 63e37a5035..d04347e7b3 100644 --- a/plugins/auth-backend/src/providers/router.ts +++ b/plugins/auth-backend/src/providers/router.ts @@ -14,18 +14,14 @@ * limitations under the License. */ -import { - AuthService, - DiscoveryService, - LoggerService, -} from '@backstage/backend-plugin-api'; -import { CatalogApi, CatalogClient } from '@backstage/catalog-client'; +import { AuthService, LoggerService } from '@backstage/backend-plugin-api'; import { Config } from '@backstage/config'; import { assertError, NotFoundError } from '@backstage/errors'; import { AuthOwnershipResolver, AuthProviderFactory, } from '@backstage/plugin-auth-node'; +import { CatalogService } from '@backstage/plugin-catalog-node'; import express from 'express'; import Router from 'express-promise-router'; import { Minimatch } from 'minimatch'; @@ -42,11 +38,10 @@ export function bindProviderRouters( baseUrl: string; config: Config; logger: LoggerService; - discovery: DiscoveryService; auth: AuthService; tokenIssuer: TokenIssuer; ownershipResolver?: AuthOwnershipResolver; - catalogApi?: CatalogApi; + catalog: CatalogService; }, ) { const { @@ -55,10 +50,9 @@ export function bindProviderRouters( baseUrl, config, logger, - discovery, auth, tokenIssuer, - catalogApi, + catalog, ownershipResolver, } = options; @@ -84,8 +78,7 @@ export function bindProviderRouters( logger, resolverContext: CatalogAuthResolverContext.create({ logger, - catalogApi: - catalogApi ?? new CatalogClient({ discoveryApi: discovery }), + catalog, tokenIssuer, auth, ownershipResolver, diff --git a/plugins/auth-backend/src/service/router.ts b/plugins/auth-backend/src/service/router.ts index d58d1bc976..1952e9d648 100644 --- a/plugins/auth-backend/src/service/router.ts +++ b/plugins/auth-backend/src/service/router.ts @@ -25,8 +25,8 @@ import { RootConfigService, } from '@backstage/backend-plugin-api'; import { AuthOwnershipResolver } from '@backstage/plugin-auth-node'; +import { CatalogService } from '@backstage/plugin-catalog-node'; import { NotFoundError } from '@backstage/errors'; -import { CatalogApi } from '@backstage/catalog-client'; import { bindOidcRouter } from '../identity/router'; import { KeyStores } from '../identity/KeyStores'; import { TokenFactory } from '../identity/TokenFactory'; @@ -49,7 +49,7 @@ interface RouterOptions { auth: AuthService; tokenFactoryAlgorithm?: string; providerFactories?: ProviderFactories; - catalogApi?: CatalogApi; + catalog: CatalogService; ownershipResolver?: AuthOwnershipResolver; } From bc8fb4b78df01385750158e77b8e1e91c1bfd0e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 15 Apr 2025 23:28:40 +0200 Subject: [PATCH 28/61] update docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- docs/auth/add-auth-provider.md | 4 ++-- docs/auth/identity-resolver--old.md | 2 +- plugins/auth-backend/package.json | 1 - yarn.lock | 1 - 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/auth/add-auth-provider.md b/docs/auth/add-auth-provider.md index 51424f1c10..b068b09642 100644 --- a/docs/auth/add-auth-provider.md +++ b/docs/auth/add-auth-provider.md @@ -66,8 +66,8 @@ function takes an `express.Response`, a `WebMessageResponse` and the URL of the frontend (`appOrigin`) as parameters and return an HTML page with the script and the message. -There is a helper class for [OAuth2](https://oauth.net/2/) based authentication providers, [OAuthAdapter](../reference/plugin-auth-backend.oauthadapter.md). This class implements the `AuthProviderRouteHandlers` interface -for you, and instead requires you to implement [OAuthHandlers](../reference/plugin-auth-backend.oauthhandlers.md), which +There is a helper class for [OAuth2](https://oauth.net/2/) based authentication providers, [OAuthAdapter](../reference/plugin-auth-node.oauthadapter.md). This class implements the `AuthProviderRouteHandlers` interface +for you, and instead requires you to implement [OAuthHandlers](../reference/plugin-auth-node.oauthhandlers.md), which is significantly easier. ### Auth Environment Separation diff --git a/docs/auth/identity-resolver--old.md b/docs/auth/identity-resolver--old.md index f6310ace64..f2f554bf41 100644 --- a/docs/auth/identity-resolver--old.md +++ b/docs/auth/identity-resolver--old.md @@ -22,7 +22,7 @@ be mapped to user identities within Backstage. ## Quick Start -> See [providers](../reference/plugin-auth-backend.providers.md) +> See [the auth docs](../index.md) > for a full list of auth providers and their built-in sign-in resolvers. Backstage projects created with `npx @backstage/create-app` come configured with a diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index cf07425e09..e6da6d2eb6 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -44,7 +44,6 @@ }, "dependencies": { "@backstage/backend-plugin-api": "workspace:^", - "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", diff --git a/yarn.lock b/yarn.lock index 352b16bc2d..996fd4820e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5281,7 +5281,6 @@ __metadata: "@backstage/backend-defaults": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-test-utils": "workspace:^" - "@backstage/catalog-client": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" From ff9d717c71a3725acbbe308ece447f58c8dad311 Mon Sep 17 00:00:00 2001 From: Toby Harradine Date: Wed, 16 Apr 2025 11:47:41 +1000 Subject: [PATCH 29/61] fix: enable markdown rendering for EntityPicker description Signed-off-by: Toby Harradine --- .../fields/EntityPicker/EntityPicker.tsx | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx index 8a1b0854cf..a471e69457 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx @@ -29,8 +29,10 @@ import { catalogApiRef, entityPresentationApiRef, } from '@backstage/plugin-catalog-react'; +import { MarkdownContent } from '@backstage/core-components'; import TextField from '@material-ui/core/TextField'; import FormControl from '@material-ui/core/FormControl'; +import { makeStyles } from '@material-ui/core/styles'; import Autocomplete, { AutocompleteChangeReason, createFilterOptions, @@ -49,6 +51,18 @@ import { scaffolderTranslationRef } from '../../../translation'; export { EntityPickerSchema } from './schema'; +const useStyles = makeStyles(theme => ({ + markdownDescription: { + fontSize: theme.typography.caption.fontSize, + margin: 0, + color: theme.palette.text.secondary, + '& :first-child': { + margin: 0, + marginTop: '3px', // to keep the standard browser padding + }, + }, +})); + /** * The underlying component that is rendered in the form for the `EntityPicker` * field extension. @@ -57,6 +71,7 @@ export { EntityPickerSchema } from './schema'; */ export const EntityPicker = (props: EntityPickerProps) => { const { t } = useTranslationRef(scaffolderTranslationRef); + const classes = useStyles(); const { onChange, schema: { @@ -210,8 +225,6 @@ export const EntityPicker = (props: EntityPickerProps) => { {...params} label={title} margin="dense" - helperText={description} - FormHelperTextProps={{ margin: 'dense', style: { marginLeft: 0 } }} variant="outlined" required={required} disabled={isDisabled} @@ -226,6 +239,13 @@ export const EntityPicker = (props: EntityPickerProps) => { })} ListboxComponent={VirtualizedListbox} /> + {description && ( + + )} ); }; From 205df8bd61aa239d956ac5e75bf729c446d3a2b6 Mon Sep 17 00:00:00 2001 From: Toby Harradine Date: Wed, 16 Apr 2025 13:00:54 +1000 Subject: [PATCH 30/61] test: add test for markdown description rendering in EntityPicker Signed-off-by: Toby Harradine --- .../fields/EntityPicker/EntityPicker.test.tsx | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx index ab3092e3ed..2522283230 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx @@ -28,6 +28,13 @@ import { EntityPickerProps } from './schema'; import { ScaffolderRJSFFieldProps as FieldProps } from '@backstage/plugin-scaffolder-react'; import { DefaultEntityPresentationApi } from '@backstage/plugin-catalog'; import { catalogApiMock } from '@backstage/plugin-catalog-react/testUtils'; +import * as backstageCore from '@backstage/core-components'; + +// Mock MarkdownContent to test that it's called with the right props +jest.mock('@backstage/core-components', () => ({ + ...jest.requireActual('@backstage/core-components'), + MarkdownContent: jest.fn(() => null), +})); const makeEntity = (kind: string, namespace: string, name: string): Entity => ({ apiVersion: 'scaffolder.backstage.io/v1beta3', @@ -812,4 +819,39 @@ describe('', () => { expect(onChange).toHaveBeenCalledWith(undefined); }); }); + + describe('with markdown description', () => { + beforeEach(() => { + jest.clearAllMocks(); + uiSchema = { 'ui:options': {} }; + props = { + onChange, + schema: { + description: '**Bold text** and *italic text*', + }, + required, + uiSchema, + rawErrors, + formData, + } as unknown as FieldProps; + + catalogApi.getEntities.mockResolvedValue({ items: entities }); + }); + + it('renders description as markdown', async () => { + await renderInTestApp( + + + , + ); + + expect(backstageCore.MarkdownContent).toHaveBeenCalledWith( + expect.objectContaining({ + content: '**Bold text** and *italic text*', + linkTarget: '_blank', + }), + expect.anything(), + ); + }); + }); }); From d7da01d98b6496fbe046d3d99f1593cc448389e5 Mon Sep 17 00:00:00 2001 From: Toby Harradine Date: Wed, 16 Apr 2025 14:01:04 +1000 Subject: [PATCH 31/61] add changeset for EntityPicker markdown fix Signed-off-by: Toby Harradine --- .changeset/green-trainers-float.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/green-trainers-float.md diff --git a/.changeset/green-trainers-float.md b/.changeset/green-trainers-float.md new file mode 100644 index 0000000000..537fe01736 --- /dev/null +++ b/.changeset/green-trainers-float.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Fix EntityPicker field to render description as markdown, matching other form components in the system. From ed9b022b419fe976de936e9416137ca6eaf88bf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 16 Apr 2025 09:52:56 +0200 Subject: [PATCH 32/61] fix docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- docs/auth/add-auth-provider.md | 4 ---- docs/auth/identity-resolver--old.md | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/docs/auth/add-auth-provider.md b/docs/auth/add-auth-provider.md index b068b09642..7cfa21dd4a 100644 --- a/docs/auth/add-auth-provider.md +++ b/docs/auth/add-auth-provider.md @@ -66,10 +66,6 @@ function takes an `express.Response`, a `WebMessageResponse` and the URL of the frontend (`appOrigin`) as parameters and return an HTML page with the script and the message. -There is a helper class for [OAuth2](https://oauth.net/2/) based authentication providers, [OAuthAdapter](../reference/plugin-auth-node.oauthadapter.md). This class implements the `AuthProviderRouteHandlers` interface -for you, and instead requires you to implement [OAuthHandlers](../reference/plugin-auth-node.oauthhandlers.md), which -is significantly easier. - ### Auth Environment Separation The concept of an `env` is core to the way the auth backend works. It uses an diff --git a/docs/auth/identity-resolver--old.md b/docs/auth/identity-resolver--old.md index f2f554bf41..ce41fbcf2b 100644 --- a/docs/auth/identity-resolver--old.md +++ b/docs/auth/identity-resolver--old.md @@ -22,7 +22,7 @@ be mapped to user identities within Backstage. ## Quick Start -> See [the auth docs](../index.md) +> See [the auth docs](./index.md) > for a full list of auth providers and their built-in sign-in resolvers. Backstage projects created with `npx @backstage/create-app` come configured with a From 0bd0e873e8d9690a8f45994c5337261894c2fdcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 16 Apr 2025 10:00:50 +0200 Subject: [PATCH 33/61] try to get rid of https://backstage.io/docs/v1.1.0/ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- docs/{release-notes-template.md => .release-notes-template.md} | 0 docs/publishing.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename docs/{release-notes-template.md => .release-notes-template.md} (100%) diff --git a/docs/release-notes-template.md b/docs/.release-notes-template.md similarity index 100% rename from docs/release-notes-template.md rename to docs/.release-notes-template.md diff --git a/docs/publishing.md b/docs/publishing.md index 08f4f124d9..3d23572ffe 100644 --- a/docs/publishing.md +++ b/docs/publishing.md @@ -47,7 +47,7 @@ Additional steps for the main line release - Check for mentions of "major" & "breaking" and if they are expected in the current release - Verify the version we are shipping is correct - Create Release Notes - - There exists a [release notes template](./release-notes-template.md) for creating the release notes. It can already be created after the last main line release to keep track of major changes during the month + - There exists a [release notes template](./.release-notes-template.md) for creating the release notes. It can already be created after the last main line release to keep track of major changes during the month - The content is picked by relevancy showcasing the work of the community during the month of the release - Mention newly added packages or features - Mention any security fixes From d8ea59ef0cef2da8c480c286bf582a299fba1f72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 16 Apr 2025 10:59:25 +0200 Subject: [PATCH 34/61] Update .changeset/new-hands-scream.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/new-hands-scream.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/new-hands-scream.md b/.changeset/new-hands-scream.md index c5874787e4..03291648db 100644 --- a/.changeset/new-hands-scream.md +++ b/.changeset/new-hands-scream.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-auth-backend': major +'@backstage/plugin-auth-backend': minor --- **BREAKING**: Removed support for the old backend system, and removed all deprecated exports. From 07e39dc0f877977386d9c1feac795821f48149e1 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Wed, 16 Apr 2025 12:12:50 +0200 Subject: [PATCH 35/61] Update v1.38.0.md Signed-off-by: Vincenzo Scamporlino --- docs/releases/v1.38.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/releases/v1.38.0.md b/docs/releases/v1.38.0.md index 5f18981212..4d5fe1d75c 100644 --- a/docs/releases/v1.38.0.md +++ b/docs/releases/v1.38.0.md @@ -51,7 +51,7 @@ This means that the translation keys have changed for `actionsPage.content.table Contributed by [@mbenson](https://github.com/mbenson) in [#29383](https://github.com/backstage/backstage/pull/29383) -### `backtage-cli repo start` +### `backstage-cli repo start` In order to align on `yarn start` being the only command needed for local development, we’ve introduced a new `repo start` command to the `backstage-cli` for use in the root `package.json`. From 97f7592ea945c76f7305dfe315a69f6ebaa2c260 Mon Sep 17 00:00:00 2001 From: Toby Harradine Date: Wed, 16 Apr 2025 20:38:42 +1000 Subject: [PATCH 36/61] refactor: convert EntityPicker to use ScaffolderField component Signed-off-by: Toby Harradine --- .../fields/EntityPicker/EntityPicker.test.tsx | 42 ------------------- .../fields/EntityPicker/EntityPicker.tsx | 35 ++++------------ 2 files changed, 8 insertions(+), 69 deletions(-) diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx index 2522283230..ab3092e3ed 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx @@ -28,13 +28,6 @@ import { EntityPickerProps } from './schema'; import { ScaffolderRJSFFieldProps as FieldProps } from '@backstage/plugin-scaffolder-react'; import { DefaultEntityPresentationApi } from '@backstage/plugin-catalog'; import { catalogApiMock } from '@backstage/plugin-catalog-react/testUtils'; -import * as backstageCore from '@backstage/core-components'; - -// Mock MarkdownContent to test that it's called with the right props -jest.mock('@backstage/core-components', () => ({ - ...jest.requireActual('@backstage/core-components'), - MarkdownContent: jest.fn(() => null), -})); const makeEntity = (kind: string, namespace: string, name: string): Entity => ({ apiVersion: 'scaffolder.backstage.io/v1beta3', @@ -819,39 +812,4 @@ describe('', () => { expect(onChange).toHaveBeenCalledWith(undefined); }); }); - - describe('with markdown description', () => { - beforeEach(() => { - jest.clearAllMocks(); - uiSchema = { 'ui:options': {} }; - props = { - onChange, - schema: { - description: '**Bold text** and *italic text*', - }, - required, - uiSchema, - rawErrors, - formData, - } as unknown as FieldProps; - - catalogApi.getEntities.mockResolvedValue({ items: entities }); - }); - - it('renders description as markdown', async () => { - await renderInTestApp( - - - , - ); - - expect(backstageCore.MarkdownContent).toHaveBeenCalledWith( - expect.objectContaining({ - content: '**Bold text** and *italic text*', - linkTarget: '_blank', - }), - expect.anything(), - ); - }); - }); }); diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx index a471e69457..b15c197945 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx @@ -29,10 +29,7 @@ import { catalogApiRef, entityPresentationApiRef, } from '@backstage/plugin-catalog-react'; -import { MarkdownContent } from '@backstage/core-components'; import TextField from '@material-ui/core/TextField'; -import FormControl from '@material-ui/core/FormControl'; -import { makeStyles } from '@material-ui/core/styles'; import Autocomplete, { AutocompleteChangeReason, createFilterOptions, @@ -48,21 +45,10 @@ import { import { VirtualizedListbox } from '../VirtualizedListbox'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; import { scaffolderTranslationRef } from '../../../translation'; +import { ScaffolderField } from '@backstage/plugin-scaffolder-react/alpha'; export { EntityPickerSchema } from './schema'; -const useStyles = makeStyles(theme => ({ - markdownDescription: { - fontSize: theme.typography.caption.fontSize, - margin: 0, - color: theme.palette.text.secondary, - '& :first-child': { - margin: 0, - marginTop: '3px', // to keep the standard browser padding - }, - }, -})); - /** * The underlying component that is rendered in the form for the `EntityPicker` * field extension. @@ -71,7 +57,6 @@ const useStyles = makeStyles(theme => ({ */ export const EntityPicker = (props: EntityPickerProps) => { const { t } = useTranslationRef(scaffolderTranslationRef); - const classes = useStyles(); const { onChange, schema: { @@ -83,6 +68,7 @@ export const EntityPicker = (props: EntityPickerProps) => { rawErrors, formData, idSchema, + errors, } = props; const catalogFilter = buildCatalogFilter(uiSchema); const defaultKind = uiSchema['ui:options']?.defaultKind; @@ -194,10 +180,12 @@ export const EntityPicker = (props: EntityPickerProps) => { }, [entities, onChange, selectedEntity, required, allowArbitraryValues]); return ( - 0 && !formData} + disabled={isDisabled} + errors={errors} > { })} ListboxComponent={VirtualizedListbox} /> - {description && ( - - )} - + ); }; From d15355c9b8f22d29324ae20be52dd69334572a41 Mon Sep 17 00:00:00 2001 From: Peter Macdonald Date: Wed, 16 Apr 2025 12:58:02 +0200 Subject: [PATCH 37/61] feat: Update gitlab repo push error handling slightly when the commit action is not create Signed-off-by: Peter Macdonald --- .changeset/bumpy-showers-design.md | 5 ++ .../src/actions/gitlabRepoPush.test.ts | 71 +++++++++++++++++++ .../src/actions/gitlabRepoPush.ts | 7 ++ 3 files changed, 83 insertions(+) create mode 100644 .changeset/bumpy-showers-design.md diff --git a/.changeset/bumpy-showers-design.md b/.changeset/bumpy-showers-design.md new file mode 100644 index 0000000000..2db5006944 --- /dev/null +++ b/.changeset/bumpy-showers-design.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend-module-gitlab': patch +--- + +If the commit action is not `create` log a more appropriate error message to the end user advising that the files they're trying to modify might not exist diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.test.ts index 65cf2244d4..5644e0b952 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.test.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.test.ts @@ -376,4 +376,75 @@ describe('createGitLabCommit', () => { ); }); }); + + describe('error handling', () => { + it('throws appropriate error for create action when commit fails', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + commitMessage: 'Create my new commit', + branchName: 'some-branch', + commitAction: 'create', + }; + mockDir.setContent({ + [workspacePath]: { + 'foo.txt': 'Hello there!', + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + mockGitlabClient.Commits.create.mockRejectedValue( + new Error('Commit failed'), + ); + + await expect(instance.handler(ctx)).rejects.toThrow( + 'Committing the changes to some-branch failed. Please check that none of the files created by the template already exists. Error: Commit failed', + ); + }); + + it('throws appropriate error for update action when commit fails', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + commitMessage: 'Update my commit', + branchName: 'some-branch', + commitAction: 'update', + }; + mockDir.setContent({ + [workspacePath]: { + 'foo.txt': 'Hello there!', + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + mockGitlabClient.Commits.create.mockRejectedValue( + new Error('Commit failed'), + ); + + await expect(instance.handler(ctx)).rejects.toThrow( + "Modifying the files in some-branch failed. Please verify that all files you're trying to modify exist in the repository. Error: Commit failed", + ); + }); + + it('throws appropriate error for delete action when commit fails', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + commitMessage: 'Delete my commit', + branchName: 'some-branch', + commitAction: 'delete', + }; + mockDir.setContent({ + [workspacePath]: { + 'foo.txt': 'Hello there!', + }, + }); + + const ctx = createMockActionContext({ input, workspacePath }); + mockGitlabClient.Commits.create.mockRejectedValue( + new Error('Commit failed'), + ); + + await expect(instance.handler(ctx)).rejects.toThrow( + "Modifying the files in some-branch failed. Please verify that all files you're trying to modify exist in the repository. Error: Commit failed", + ); + }); + }); }); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.ts index 666e236cda..8b6f5cca50 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.ts @@ -203,6 +203,13 @@ export const createGitlabRepoPushAction = (options: { ctx.output('projectPath', repoID); ctx.output('commitHash', commitId); } catch (e) { + if (commitAction !== 'create') { + throw new InputError( + `Modifying the files in ${branchName} failed. Please verify that all files you're trying to modify exist in the repository. ${getErrorMessage( + e, + )}`, + ); + } throw new InputError( `Committing the changes to ${branchName} failed. Please check that none of the files created by the template already exists. ${getErrorMessage( e, From e6943d1f4a8cb143787158941a302177d1baa623 Mon Sep 17 00:00:00 2001 From: Toby Harradine Date: Tue, 15 Apr 2025 15:12:29 +1000 Subject: [PATCH 38/61] fix(scaffolder): make EntityPicker display consistent between dropdown and selected value Signed-off-by: Toby Harradine --- .../fields/EntityPicker/EntityPicker.test.tsx | 93 +++++++++++++++++++ .../fields/EntityPicker/EntityPicker.tsx | 2 +- 2 files changed, 94 insertions(+), 1 deletion(-) diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx index ab3092e3ed..2424d76f5a 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx @@ -812,4 +812,97 @@ describe('', () => { expect(onChange).toHaveBeenCalledWith(undefined); }); }); + + describe('rendering consistency', () => { + beforeEach(() => { + uiSchema = { 'ui:options': {} }; + props = { + onChange, + schema, + required, + uiSchema, + rawErrors, + formData: 'group:default/team-a', + } as unknown as FieldProps; + }); + + it('renders consistent entity display between dropdown and selected value', async () => { + // Mock the presentation API to return specific values for testing + const mockEntityPresentation = { + entityRef: 'group:default/team-a', + primaryTitle: 'Team A', + }; + + // Create a catalog API that includes the specific test entity + const testCatalogApi = catalogApiMock.mock({ + getEntities: jest.fn().mockResolvedValue({ + items: [makeEntity('Group', 'default', 'team-a')], + }), + }); + + // Create mock entity presentation mapping + const entityRefToPresentation = new Map(); + entityRefToPresentation.set( + 'group:default/team-a', + mockEntityPresentation, + ); + + const renderResult = await renderInTestApp( + + + , + ); + + // Wait for the entity data to load and be processed + // This is needed because the EntityPicker uses useAsync + await new Promise(resolve => setTimeout(resolve, 100)); + + // Force a re-render to apply the mocked data + renderResult.rerender( + + + , + ); + + // Force update to complete + await new Promise(resolve => setTimeout(resolve, 100)); + + // Verify the selected value shows the correct display + const input = screen.getByRole('textbox'); + expect(input).toHaveValue('Team A'); + + // Open the dropdown + fireEvent.mouseDown(input); + + // Check if dropdown shows the same representation + const option = await screen.findByText('Team A'); + expect(option).toBeInTheDocument(); + }); + }); }); diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx index b15c197945..fa62795b40 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx @@ -204,7 +204,7 @@ export const EntityPicker = (props: EntityPickerProps) => { typeof option === 'string' ? option : entities?.entityRefToPresentation.get(stringifyEntityRef(option)) - ?.entityRef! + ?.primaryTitle || stringifyEntityRef(option) } autoSelect freeSolo={allowArbitraryValues} From 467cb0b14930cad7f42a25e9d537d6d90ec6b412 Mon Sep 17 00:00:00 2001 From: Toby Harradine Date: Tue, 15 Apr 2025 15:54:58 +1000 Subject: [PATCH 39/61] Add changeset for EntityPicker display fix Signed-off-by: Toby Harradine --- .changeset/entity-picker-display-fix.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/entity-picker-display-fix.md diff --git a/.changeset/entity-picker-display-fix.md b/.changeset/entity-picker-display-fix.md new file mode 100644 index 0000000000..4a37fbc29a --- /dev/null +++ b/.changeset/entity-picker-display-fix.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Fixed EntityPicker display inconsistency between dropdown options and selected value by using primaryTitle from entity presentation for both. From 2e56a4e303e77450ec4f9ca59a6fe9651988c5c6 Mon Sep 17 00:00:00 2001 From: Toby Harradine Date: Wed, 16 Apr 2025 19:44:35 +1000 Subject: [PATCH 40/61] Update changelog message Signed-off-by: Toby Harradine --- .changeset/entity-picker-display-fix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/entity-picker-display-fix.md b/.changeset/entity-picker-display-fix.md index 4a37fbc29a..f5a3f2b0bc 100644 --- a/.changeset/entity-picker-display-fix.md +++ b/.changeset/entity-picker-display-fix.md @@ -2,4 +2,4 @@ '@backstage/plugin-scaffolder': patch --- -Fixed EntityPicker display inconsistency between dropdown options and selected value by using primaryTitle from entity presentation for both. +Fixed `EntityPicker` display inconsistency between dropdown options and selected value. From 0fbcab15411b344ac12c8967f7d3602bd8da7ffd Mon Sep 17 00:00:00 2001 From: Peter Macdonald Date: Wed, 16 Apr 2025 13:03:45 +0200 Subject: [PATCH 41/61] fix: error should be similar Signed-off-by: Peter Macdonald --- .../src/actions/gitlabRepoPush.test.ts | 4 ++-- .../src/actions/gitlabRepoPush.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.test.ts index 5644e0b952..35a0b83ae5 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.test.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.test.ts @@ -420,7 +420,7 @@ describe('createGitLabCommit', () => { ); await expect(instance.handler(ctx)).rejects.toThrow( - "Modifying the files in some-branch failed. Please verify that all files you're trying to modify exist in the repository. Error: Commit failed", + "Committing the changes to some-branch failed. Please verify that all files you're trying to modify exist in the repository. Error: Commit failed", ); }); @@ -443,7 +443,7 @@ describe('createGitLabCommit', () => { ); await expect(instance.handler(ctx)).rejects.toThrow( - "Modifying the files in some-branch failed. Please verify that all files you're trying to modify exist in the repository. Error: Commit failed", + "Committing the changes to some-branch failed. Please verify that all files you're trying to modify exist in the repository. Error: Commit failed", ); }); }); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.ts index 8b6f5cca50..9ac1de13d3 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/gitlabRepoPush.ts @@ -205,7 +205,7 @@ export const createGitlabRepoPushAction = (options: { } catch (e) { if (commitAction !== 'create') { throw new InputError( - `Modifying the files in ${branchName} failed. Please verify that all files you're trying to modify exist in the repository. ${getErrorMessage( + `Committing the changes to ${branchName} failed. Please verify that all files you're trying to modify exist in the repository. ${getErrorMessage( e, )}`, ); From c273516a27621752da1312fcf75e8d84984b6e29 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Apr 2025 11:36:12 +0000 Subject: [PATCH 42/61] fix(deps): update dependency webpack-dev-server to v5.2.1 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/yarn.lock b/yarn.lock index 13e85720ca..129cebdddd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19660,7 +19660,7 @@ __metadata: languageName: node linkType: hard -"@types/express-serve-static-core@npm:^4.17.33, @types/express-serve-static-core@npm:^4.17.5": +"@types/express-serve-static-core@npm:^4.17.21, @types/express-serve-static-core@npm:^4.17.33, @types/express-serve-static-core@npm:^4.17.5": version: 4.19.6 resolution: "@types/express-serve-static-core@npm:4.19.6" dependencies: @@ -47409,7 +47409,7 @@ __metadata: languageName: node linkType: hard -"webpack-dev-server@npm:5.2.0, webpack-dev-server@npm:^5.0.0": +"webpack-dev-server@npm:5.2.0": version: 5.2.0 resolution: "webpack-dev-server@npm:5.2.0" dependencies: @@ -47453,6 +47453,51 @@ __metadata: languageName: node linkType: hard +"webpack-dev-server@npm:^5.0.0": + version: 5.2.1 + resolution: "webpack-dev-server@npm:5.2.1" + dependencies: + "@types/bonjour": "npm:^3.5.13" + "@types/connect-history-api-fallback": "npm:^1.5.4" + "@types/express": "npm:^4.17.21" + "@types/express-serve-static-core": "npm:^4.17.21" + "@types/serve-index": "npm:^1.9.4" + "@types/serve-static": "npm:^1.15.5" + "@types/sockjs": "npm:^0.3.36" + "@types/ws": "npm:^8.5.10" + ansi-html-community: "npm:^0.0.8" + bonjour-service: "npm:^1.2.1" + chokidar: "npm:^3.6.0" + colorette: "npm:^2.0.10" + compression: "npm:^1.7.4" + connect-history-api-fallback: "npm:^2.0.0" + express: "npm:^4.21.2" + graceful-fs: "npm:^4.2.6" + http-proxy-middleware: "npm:^2.0.7" + ipaddr.js: "npm:^2.1.0" + launch-editor: "npm:^2.6.1" + open: "npm:^10.0.3" + p-retry: "npm:^6.2.0" + schema-utils: "npm:^4.2.0" + selfsigned: "npm:^2.4.1" + serve-index: "npm:^1.9.1" + sockjs: "npm:^0.3.24" + spdy: "npm:^4.0.2" + webpack-dev-middleware: "npm:^7.4.2" + ws: "npm:^8.18.0" + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true + bin: + webpack-dev-server: bin/webpack-dev-server.js + checksum: 10/424edfe22b7bbe2301a38b8b519dfeb7643e0ca643be01af3fa48ec18512955c1952246741d7577bdb911ee09dcd6c521ade7d65e0059448ee69ab02bfac4624 + languageName: node + linkType: hard + "webpack-hot-middleware@npm:^2.25.1": version: 2.26.1 resolution: "webpack-hot-middleware@npm:2.26.1" From 7e4af68e5d6406b4fb0704fc31b1846ffd2efe87 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Apr 2025 11:36:51 +0000 Subject: [PATCH 43/61] fix(deps): update dependency yaml to v2.7.1 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 13e85720ca..a5d29f6948 100644 --- a/yarn.lock +++ b/yarn.lock @@ -48116,11 +48116,11 @@ __metadata: linkType: hard "yaml@npm:^2.0.0, yaml@npm:^2.0.0-10, yaml@npm:^2.1.1, yaml@npm:^2.2.1, yaml@npm:^2.2.2, yaml@npm:^2.3.2, yaml@npm:^2.3.3, yaml@npm:^2.3.4, yaml@npm:^2.6.1, yaml@npm:^2.7.0": - version: 2.7.0 - resolution: "yaml@npm:2.7.0" + version: 2.7.1 + resolution: "yaml@npm:2.7.1" bin: yaml: bin.mjs - checksum: 10/c8c314c62fbd49244a6a51b06482f6d495b37ab10fa685fcafa1bbaae7841b7233ee7d12cab087bcca5a0b28adc92868b6e437322276430c28d00f1c1732eeec + checksum: 10/af57658d37c5efae4bac7204589b742ae01878a278554d632f01012868cf7fa66cba09b39140f12e7f6ceecc693ae52bcfb737596c4827e6e233338cb3a9528e languageName: node linkType: hard From 277bf5c91f951e315d30ad7dfd0c58bc2cb2dcdc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Apr 2025 12:49:51 +0000 Subject: [PATCH 44/61] fix(deps): update react monorepo Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4853b42ade..810ff12c31 100644 --- a/yarn.lock +++ b/yarn.lock @@ -20365,11 +20365,11 @@ __metadata: linkType: hard "@types/react-dom@npm:^18.0.0": - version: 18.3.5 - resolution: "@types/react-dom@npm:18.3.5" + version: 18.3.6 + resolution: "@types/react-dom@npm:18.3.6" peerDependencies: "@types/react": ^18.0.0 - checksum: 10/02095b326f373867498e0eb2b5ebb60f9bd9535db0d757ea13504c4b7d75e16605cf1d43ce7a2e67893d177b51db4357cabb2842fb4257c49427d02da1a14e09 + checksum: 10/ae179355401c64423d39946eda22c5f7f74c94ce61c21505024d4d82c33853ec40bc9b370f75e4a7750b0524aba4d95a43fcc328d8d14684dc2abb41ba529de8 languageName: node linkType: hard @@ -20467,12 +20467,12 @@ __metadata: linkType: hard "@types/react@npm:^18.0.0": - version: 18.3.19 - resolution: "@types/react@npm:18.3.19" + version: 18.3.20 + resolution: "@types/react@npm:18.3.20" dependencies: "@types/prop-types": "npm:*" csstype: "npm:^3.0.2" - checksum: 10/4b40a4adf7a59390541dc24059c09d95a777e8e8025fab13d660e1929a88e78efadde8ec94ebd357c5cc80b25590645e81c5b621661700f40496e7833b3d2983 + checksum: 10/020c51e63b60862e6d772f0cdea0b9441182eedab6289dabd8add0708ded62003834c4e7c6f23a1ccd3ca9486b46296057c3f881c34261a0483765351f8d0bc3 languageName: node linkType: hard From f453d5c5b926f42279759599a91600b9665e9da1 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Wed, 16 Apr 2025 08:00:53 -0500 Subject: [PATCH 45/61] unprocessed entities - removed legacy and backend-common Signed-off-by: Andre Wanlin --- .changeset/cyan-pots-appear.md | 5 +++++ packages/backend-legacy/package.json | 1 - .../backend-legacy/src/plugins/catalog.ts | 10 ---------- .../package.json | 1 - .../report.api.md | 19 ------------------- .../src/UnprocessedEntitiesModule.ts | 16 ++++------------ .../src/index.ts | 1 - .../src/module.ts | 3 --- yarn.lock | 2 -- 9 files changed, 9 insertions(+), 49 deletions(-) create mode 100644 .changeset/cyan-pots-appear.md diff --git a/.changeset/cyan-pots-appear.md b/.changeset/cyan-pots-appear.md new file mode 100644 index 0000000000..9c05255180 --- /dev/null +++ b/.changeset/cyan-pots-appear.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-unprocessed': minor +--- + +**BREAKING** Removed support for the legcacy backend and removed references to `@backstage/backend-common`, please [migrate to the new backend system](https://backstage.io/docs/backend-system/building-plugins-and-modules/migrating) diff --git a/packages/backend-legacy/package.json b/packages/backend-legacy/package.json index a5a05f05ac..eef3fc1bb5 100644 --- a/packages/backend-legacy/package.json +++ b/packages/backend-legacy/package.json @@ -38,7 +38,6 @@ "@backstage/plugin-auth-node": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^", - "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-events-backend": "workspace:^", "@backstage/plugin-events-node": "workspace:^", diff --git a/packages/backend-legacy/src/plugins/catalog.ts b/packages/backend-legacy/src/plugins/catalog.ts index c83d5844d1..022b9de4e6 100644 --- a/packages/backend-legacy/src/plugins/catalog.ts +++ b/packages/backend-legacy/src/plugins/catalog.ts @@ -16,7 +16,6 @@ import { CatalogBuilder } from '@backstage/plugin-catalog-backend'; import { ScaffolderEntitiesProcessor } from '@backstage/plugin-catalog-backend-module-scaffolder-entity-model'; -import { UnprocessedEntitiesModule } from '@backstage/plugin-catalog-backend-module-unprocessed'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; import { DemoEventBasedEntityProvider } from './DemoEventBasedEntityProvider'; @@ -37,15 +36,6 @@ export default async function createPlugin( const { processingEngine, router } = await builder.build(); - const unprocessed = UnprocessedEntitiesModule.create({ - database: await env.database.getClient(), - router, - permissions: env.permissions, - discovery: env.discovery, - }); - - unprocessed.registerRoutes(); - await processingEngine.start(); return router; } diff --git a/plugins/catalog-backend-module-unprocessed/package.json b/plugins/catalog-backend-module-unprocessed/package.json index 290c314760..88d4d6c3ae 100644 --- a/plugins/catalog-backend-module-unprocessed/package.json +++ b/plugins/catalog-backend-module-unprocessed/package.json @@ -33,7 +33,6 @@ "test": "backstage-cli package test" }, "dependencies": { - "@backstage/backend-common": "^0.25.0", "@backstage/backend-plugin-api": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/errors": "workspace:^", diff --git a/plugins/catalog-backend-module-unprocessed/report.api.md b/plugins/catalog-backend-module-unprocessed/report.api.md index 493082ac7c..85ddc0e3ac 100644 --- a/plugins/catalog-backend-module-unprocessed/report.api.md +++ b/plugins/catalog-backend-module-unprocessed/report.api.md @@ -4,27 +4,8 @@ ```ts import { BackendFeature } from '@backstage/backend-plugin-api'; -import { DiscoveryService } from '@backstage/backend-plugin-api'; -import { HttpAuthService } from '@backstage/backend-plugin-api'; -import { HttpRouterService } from '@backstage/backend-plugin-api'; -import { Knex } from 'knex'; -import { PermissionsService } from '@backstage/backend-plugin-api'; // @public const catalogModuleUnprocessedEntities: BackendFeature; export default catalogModuleUnprocessedEntities; - -// @public -export class UnprocessedEntitiesModule { - // (undocumented) - static create(options: { - router: Pick; - database: Knex; - discovery: DiscoveryService; - permissions: PermissionsService; - httpAuth?: HttpAuthService; - }): UnprocessedEntitiesModule; - // (undocumented) - registerRoutes(): void; -} ``` diff --git a/plugins/catalog-backend-module-unprocessed/src/UnprocessedEntitiesModule.ts b/plugins/catalog-backend-module-unprocessed/src/UnprocessedEntitiesModule.ts index 34aedd61af..ce25ba2bd1 100644 --- a/plugins/catalog-backend-module-unprocessed/src/UnprocessedEntitiesModule.ts +++ b/plugins/catalog-backend-module-unprocessed/src/UnprocessedEntitiesModule.ts @@ -22,7 +22,6 @@ import { } from './types'; import { Knex } from 'knex'; import { - DiscoveryService, HttpAuthService, HttpRouterService, PermissionsService, @@ -36,12 +35,11 @@ import { } from '@backstage/plugin-permission-common'; import { unprocessedEntitiesDeletePermission } from '@backstage/plugin-catalog-unprocessed-entities-common'; import { NotAllowedError } from '@backstage/errors'; -import { createLegacyAuthAdapters } from '@backstage/backend-common'; /** * Module providing Unprocessed Entities API endpoints * - * @public + * @internal */ export class UnprocessedEntitiesModule { private readonly moduleRouter; @@ -52,30 +50,24 @@ export class UnprocessedEntitiesModule { private readonly database: Knex, private readonly router: Pick, private readonly permissions: PermissionsService, - discovery: DiscoveryService, - httpAuth?: HttpAuthService, + httpAuth: HttpAuthService, ) { this.moduleRouter = Router(); this.router.use(this.moduleRouter); - this.httpAuth = createLegacyAuthAdapters({ - discovery, - httpAuth, - }).httpAuth; + this.httpAuth = httpAuth; } static create(options: { router: Pick; database: Knex; - discovery: DiscoveryService; permissions: PermissionsService; - httpAuth?: HttpAuthService; + httpAuth: HttpAuthService; }) { return new UnprocessedEntitiesModule( options.database, options.router, options.permissions, - options.discovery, options.httpAuth, ); } diff --git a/plugins/catalog-backend-module-unprocessed/src/index.ts b/plugins/catalog-backend-module-unprocessed/src/index.ts index 20132d9b27..912d69d8c0 100644 --- a/plugins/catalog-backend-module-unprocessed/src/index.ts +++ b/plugins/catalog-backend-module-unprocessed/src/index.ts @@ -21,4 +21,3 @@ */ export { catalogModuleUnprocessedEntities as default } from './module'; -export * from './UnprocessedEntitiesModule'; diff --git a/plugins/catalog-backend-module-unprocessed/src/module.ts b/plugins/catalog-backend-module-unprocessed/src/module.ts index bf1d50a634..1b46cb4448 100644 --- a/plugins/catalog-backend-module-unprocessed/src/module.ts +++ b/plugins/catalog-backend-module-unprocessed/src/module.ts @@ -36,7 +36,6 @@ export const catalogModuleUnprocessedEntities = createBackendModule({ router: coreServices.httpRouter, logger: coreServices.logger, httpAuth: coreServices.httpAuth, - discovery: coreServices.discovery, permissions: coreServices.permissions, permissionsRegistry: coreServices.permissionsRegistry, }, @@ -46,14 +45,12 @@ export const catalogModuleUnprocessedEntities = createBackendModule({ logger, permissions, httpAuth, - discovery, permissionsRegistry, }) { const module = UnprocessedEntitiesModule.create({ database: await database.getClient(), router, permissions, - discovery, httpAuth, }); diff --git a/yarn.lock b/yarn.lock index 4853b42ade..985bef73a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5784,7 +5784,6 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-unprocessed@workspace:plugins/catalog-backend-module-unprocessed" dependencies: - "@backstage/backend-common": "npm:^0.25.0" "@backstage/backend-plugin-api": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" @@ -28965,7 +28964,6 @@ __metadata: "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^" - "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-events-backend": "workspace:^" "@backstage/plugin-events-node": "workspace:^" From 26eefef711ab84aa686f83dbedcf0202094f69e4 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Wed, 16 Apr 2025 08:02:47 -0500 Subject: [PATCH 46/61] Fixed typo Signed-off-by: Andre Wanlin --- .changeset/cyan-pots-appear.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/cyan-pots-appear.md b/.changeset/cyan-pots-appear.md index 9c05255180..f82f4548c3 100644 --- a/.changeset/cyan-pots-appear.md +++ b/.changeset/cyan-pots-appear.md @@ -2,4 +2,4 @@ '@backstage/plugin-catalog-backend-module-unprocessed': minor --- -**BREAKING** Removed support for the legcacy backend and removed references to `@backstage/backend-common`, please [migrate to the new backend system](https://backstage.io/docs/backend-system/building-plugins-and-modules/migrating) +**BREAKING** Removed support for the legacy backend and removed references to `@backstage/backend-common`, please [migrate to the new backend system](https://backstage.io/docs/backend-system/building-plugins-and-modules/migrating) From 3ad33f53a3891c44d06b06a60f0e08c61b7b6980 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Wed, 16 Apr 2025 08:05:11 -0500 Subject: [PATCH 47/61] Updated docs as well Signed-off-by: Andre Wanlin --- .../catalog-backend-module-unprocessed/README.md | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/plugins/catalog-backend-module-unprocessed/README.md b/plugins/catalog-backend-module-unprocessed/README.md index f01347912d..21ab19ca72 100644 --- a/plugins/catalog-backend-module-unprocessed/README.md +++ b/plugins/catalog-backend-module-unprocessed/README.md @@ -19,19 +19,3 @@ In `packages/backend/src/index.ts` add the module: ```ts title="packages/backend/src/index.ts" backend.add(import('@backstage/plugin-catalog-backend-module-unprocessed')); ``` - -### Legacy Backend - -In `packages/backend/src/plugins/catalog.ts` import the module and initialize it after invoking `CatalogBuilder.build()`: - -```ts title="packages/backend/src/plugins/catalog.ts" -import { UnprocessedEntitiesModule } from '@backstage/plugin-catalog-backend-module-unprocessed'; - -//... - -const unprocessed = new UnprocessedEntitiesModule( - await env.database.getClient(), - router, -); -unprocessed.registerRoutes(); -``` From e99636891269686cc186a8f7398b4ed8b811ee03 Mon Sep 17 00:00:00 2001 From: Charles de Dreuille Date: Wed, 16 Apr 2025 17:58:29 +0200 Subject: [PATCH 48/61] Update dependencies Signed-off-by: Charles de Dreuille --- .changeset/chubby-needles-vanish.md | 5 + packages/canon/package.json | 24 +- yarn.lock | 364 ++++++++++++++-------------- 3 files changed, 199 insertions(+), 194 deletions(-) create mode 100644 .changeset/chubby-needles-vanish.md diff --git a/.changeset/chubby-needles-vanish.md b/.changeset/chubby-needles-vanish.md new file mode 100644 index 0000000000..2cd664dcdd --- /dev/null +++ b/.changeset/chubby-needles-vanish.md @@ -0,0 +1,5 @@ +--- +'@backstage/canon': patch +--- + +Fix Canon missing dependencies diff --git a/packages/canon/package.json b/packages/canon/package.json index a67c3d58f8..f343d9d123 100644 --- a/packages/canon/package.json +++ b/packages/canon/package.json @@ -41,26 +41,26 @@ "test": "backstage-cli package test" }, "dependencies": { - "@base-ui-components/react": "^1.0.0-alpha.5", - "@remixicon/react": "^4.5.0", + "@base-ui-components/react": "^1.0.0-alpha.7", + "@remixicon/react": "^4.6.0", + "@tanstack/react-table": "^8.21.3", "clsx": "^2.1.1" }, "devDependencies": { "@backstage/cli": "workspace:^", - "@storybook/addon-essentials": "^8.6.8", - "@storybook/addon-interactions": "^8.6.8", + "@storybook/addon-essentials": "^8.6.12", + "@storybook/addon-interactions": "^8.6.12", "@storybook/addon-styling-webpack": "^1.0.1", - "@storybook/addon-themes": "^8.6.8", + "@storybook/addon-themes": "^8.6.12", "@storybook/addon-webpack5-compiler-swc": "^3.0.0", - "@storybook/blocks": "^8.6.8", - "@storybook/react": "^8.6.8", - "@storybook/react-webpack5": "^8.6.8", - "@storybook/test": "^8.6.8", - "@tanstack/react-table": "^8.21.2", + "@storybook/blocks": "^8.6.12", + "@storybook/react": "^8.6.12", + "@storybook/react-webpack5": "^8.6.12", + "@storybook/test": "^8.6.12", "@types/react": "^18.0.0", "@types/react-dom": "^18.0.0", "chalk": "^5.4.1", - "eslint-plugin-storybook": "^0.11.4", + "eslint-plugin-storybook": "^0.12.0", "glob": "^11.0.1", "globals": "^15.11.0", "lightningcss": "^1.29.1", @@ -68,7 +68,7 @@ "react": "^18.0.2", "react-dom": "^18.0.2", "react-router-dom": "^6.3.0", - "storybook": "^8.6.8" + "storybook": "^8.6.12" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0", diff --git a/yarn.lock b/yarn.lock index b07e6c1367..f963ba21d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3781,23 +3781,23 @@ __metadata: resolution: "@backstage/canon@workspace:packages/canon" dependencies: "@backstage/cli": "workspace:^" - "@base-ui-components/react": "npm:^1.0.0-alpha.5" - "@remixicon/react": "npm:^4.5.0" - "@storybook/addon-essentials": "npm:^8.6.8" - "@storybook/addon-interactions": "npm:^8.6.8" + "@base-ui-components/react": "npm:^1.0.0-alpha.7" + "@remixicon/react": "npm:^4.6.0" + "@storybook/addon-essentials": "npm:^8.6.12" + "@storybook/addon-interactions": "npm:^8.6.12" "@storybook/addon-styling-webpack": "npm:^1.0.1" - "@storybook/addon-themes": "npm:^8.6.8" + "@storybook/addon-themes": "npm:^8.6.12" "@storybook/addon-webpack5-compiler-swc": "npm:^3.0.0" - "@storybook/blocks": "npm:^8.6.8" - "@storybook/react": "npm:^8.6.8" - "@storybook/react-webpack5": "npm:^8.6.8" - "@storybook/test": "npm:^8.6.8" - "@tanstack/react-table": "npm:^8.21.2" + "@storybook/blocks": "npm:^8.6.12" + "@storybook/react": "npm:^8.6.12" + "@storybook/react-webpack5": "npm:^8.6.12" + "@storybook/test": "npm:^8.6.12" + "@tanstack/react-table": "npm:^8.21.3" "@types/react": "npm:^18.0.0" "@types/react-dom": "npm:^18.0.0" chalk: "npm:^5.4.1" clsx: "npm:^2.1.1" - eslint-plugin-storybook: "npm:^0.11.4" + eslint-plugin-storybook: "npm:^0.12.0" glob: "npm:^11.0.1" globals: "npm:^15.11.0" lightningcss: "npm:^1.29.1" @@ -3805,7 +3805,7 @@ __metadata: react: "npm:^18.0.2" react-dom: "npm:^18.0.2" react-router-dom: "npm:^6.3.0" - storybook: "npm:^8.6.8" + storybook: "npm:^8.6.12" peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 react: ^17.0.0 || ^18.0.0 @@ -8565,7 +8565,7 @@ __metadata: languageName: node linkType: hard -"@base-ui-components/react@npm:^1.0.0-alpha.5": +"@base-ui-components/react@npm:^1.0.0-alpha.7": version: 1.0.0-alpha.7 resolution: "@base-ui-components/react@npm:1.0.0-alpha.7" dependencies: @@ -15640,7 +15640,7 @@ __metadata: languageName: node linkType: hard -"@remixicon/react@npm:^4.5.0": +"@remixicon/react@npm:^4.6.0": version: 4.6.0 resolution: "@remixicon/react@npm:4.6.0" peerDependencies: @@ -17471,9 +17471,9 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-actions@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/addon-actions@npm:8.6.8" +"@storybook/addon-actions@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/addon-actions@npm:8.6.12" dependencies: "@storybook/global": "npm:^5.0.0" "@types/uuid": "npm:^9.0.1" @@ -17481,121 +17481,121 @@ __metadata: polished: "npm:^4.2.2" uuid: "npm:^9.0.0" peerDependencies: - storybook: ^8.6.8 - checksum: 10/fa806bc84e07fbf78151cb4ecef1ed6d826dee7bc5c0858dceefae36653276f7b3e33cb070d31d1252f5d9b40332fc9eb903f7ca1f84108820c0415daf2f4f4e + storybook: ^8.6.12 + checksum: 10/c5eaaf5274bfe382877720ba9c379c0d7f6ec6173addb8bb94e80ba7318363359c677b57f25ca7582dd0007b4564683d627c51f69466e7a54faffdccae19f31f languageName: node linkType: hard -"@storybook/addon-backgrounds@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/addon-backgrounds@npm:8.6.8" +"@storybook/addon-backgrounds@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/addon-backgrounds@npm:8.6.12" dependencies: "@storybook/global": "npm:^5.0.0" memoizerific: "npm:^1.11.3" ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^8.6.8 - checksum: 10/e646305a175f851ee4b37ec59bace1960ab24a6c82e43ab937c464230a09dc8170eebb190bbcff12d577bc28439e050356c7453aeeab6551315d58e78706676d + storybook: ^8.6.12 + checksum: 10/cb4793843140f6b454cb11bf9ef65f9d68ac001544538744b2a0564c30d6b82a144f788ede3d8e86ab23951e4b1fa157e4b78b74f8ab1cc461c8e696532eb8a6 languageName: node linkType: hard -"@storybook/addon-controls@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/addon-controls@npm:8.6.8" +"@storybook/addon-controls@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/addon-controls@npm:8.6.12" dependencies: "@storybook/global": "npm:^5.0.0" dequal: "npm:^2.0.2" ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^8.6.8 - checksum: 10/58e735bedafe2a68231fbda5d061b68960d37859277e95d93a8eb7261bec8664828ea027e157f482e1e316658360f56b0391257669fffa25da2a6e27ca3f7aec + storybook: ^8.6.12 + checksum: 10/2de79406c572f8706a7a31871f7c7bc6498cde48bcbcbc00984277e6861defcad9ba895d90a66ed0ffc526bcf3b950561ff6d51837192625fb7cb5a9bb763ce4 languageName: node linkType: hard -"@storybook/addon-docs@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/addon-docs@npm:8.6.8" +"@storybook/addon-docs@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/addon-docs@npm:8.6.12" dependencies: "@mdx-js/react": "npm:^3.0.0" - "@storybook/blocks": "npm:8.6.8" - "@storybook/csf-plugin": "npm:8.6.8" - "@storybook/react-dom-shim": "npm:8.6.8" + "@storybook/blocks": "npm:8.6.12" + "@storybook/csf-plugin": "npm:8.6.12" + "@storybook/react-dom-shim": "npm:8.6.12" react: "npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" react-dom: "npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^8.6.8 - checksum: 10/7f459e6fda203c9561d1fc59302614d121abf165069c94548ed7e390f7d5b0fcd0791c98e92a60b43e61abd8f0ad21eb61e6e9a9550e7179dd92b5bdd5fa1427 + storybook: ^8.6.12 + checksum: 10/df52e5c77a3e2b380864fdc5a6fcd0726e309f8c0556b9981cfe0899ea778531f286663be4f7988cd41ae0a813cb2de57f9fd09281ee0fadd8977354125b7f17 languageName: node linkType: hard -"@storybook/addon-essentials@npm:^8.6.8": - version: 8.6.8 - resolution: "@storybook/addon-essentials@npm:8.6.8" +"@storybook/addon-essentials@npm:^8.6.12": + version: 8.6.12 + resolution: "@storybook/addon-essentials@npm:8.6.12" dependencies: - "@storybook/addon-actions": "npm:8.6.8" - "@storybook/addon-backgrounds": "npm:8.6.8" - "@storybook/addon-controls": "npm:8.6.8" - "@storybook/addon-docs": "npm:8.6.8" - "@storybook/addon-highlight": "npm:8.6.8" - "@storybook/addon-measure": "npm:8.6.8" - "@storybook/addon-outline": "npm:8.6.8" - "@storybook/addon-toolbars": "npm:8.6.8" - "@storybook/addon-viewport": "npm:8.6.8" + "@storybook/addon-actions": "npm:8.6.12" + "@storybook/addon-backgrounds": "npm:8.6.12" + "@storybook/addon-controls": "npm:8.6.12" + "@storybook/addon-docs": "npm:8.6.12" + "@storybook/addon-highlight": "npm:8.6.12" + "@storybook/addon-measure": "npm:8.6.12" + "@storybook/addon-outline": "npm:8.6.12" + "@storybook/addon-toolbars": "npm:8.6.12" + "@storybook/addon-viewport": "npm:8.6.12" ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^8.6.8 - checksum: 10/4d4fc7b4ce03910392caf19aa7b79136ccec30d4b4b18b72175bbbb95406d0c15e84231e634ccc96262ce5934242d4bf34a3afcaf8aa4500948751f310c1cbd1 + storybook: ^8.6.12 + checksum: 10/88cc2f1687186a5b4b0d509f65610d0ae89318740d4186020bb8879d5837ecdb5be75fed6cecf161614180eb91c75e4411f9c902f25c5452230121ecce00eae1 languageName: node linkType: hard -"@storybook/addon-highlight@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/addon-highlight@npm:8.6.8" +"@storybook/addon-highlight@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/addon-highlight@npm:8.6.12" dependencies: "@storybook/global": "npm:^5.0.0" peerDependencies: - storybook: ^8.6.8 - checksum: 10/83b938b2de91c256d85d631a32aab78253f0211338296e1b75c249fbf2dc43ab71bc851e8f8d905c2f5366477f5ea8ecc0ff34d38fdb96f70f5aebb45ca044b9 + storybook: ^8.6.12 + checksum: 10/04bdb057ed40e36af2b4a73a6220aa8c95f5322bb00c62f293118b174885476c8fb23019cfba53b9ffcfc28ff77ecbf38164c3a0fc6a717507f91d80e9b83655 languageName: node linkType: hard -"@storybook/addon-interactions@npm:^8.6.8": - version: 8.6.8 - resolution: "@storybook/addon-interactions@npm:8.6.8" +"@storybook/addon-interactions@npm:^8.6.12": + version: 8.6.12 + resolution: "@storybook/addon-interactions@npm:8.6.12" dependencies: "@storybook/global": "npm:^5.0.0" - "@storybook/instrumenter": "npm:8.6.8" - "@storybook/test": "npm:8.6.8" + "@storybook/instrumenter": "npm:8.6.12" + "@storybook/test": "npm:8.6.12" polished: "npm:^4.2.2" ts-dedent: "npm:^2.2.0" peerDependencies: - storybook: ^8.6.8 - checksum: 10/88e27b114ad1474694be1ca5e05cde2f98a035e11857c8c89083bfd5d1d9ddfd5e26caed8de983001cba3cdfb079f3356b6e7f925d3d332147b933e1dba6c791 + storybook: ^8.6.12 + checksum: 10/eb467f2976d670cf3e35d30d665366e1860e750c6d57c9418781418a1138c8ed3124f534f8fab0b358998957daca27d0c924e9dc61500646b2ff0ed04c7855b4 languageName: node linkType: hard -"@storybook/addon-measure@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/addon-measure@npm:8.6.8" +"@storybook/addon-measure@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/addon-measure@npm:8.6.12" dependencies: "@storybook/global": "npm:^5.0.0" tiny-invariant: "npm:^1.3.1" peerDependencies: - storybook: ^8.6.8 - checksum: 10/19b4227035737a1a9c0ab0e9d97c2a5ceca6048dc7f37b14c52d417fd1e13a1110e3c9cac2562b1bb836cfac2339dd14e22826baa433f0288bacbfb5406a0448 + storybook: ^8.6.12 + checksum: 10/ea4eced8d28d4cf9a7a5d3184d78030efcc31dd2ecab9096e2b17e5e690a711067fc3488677e2dde33405406c7d659aef542cb9a6dd6310971481c9119b24b1a languageName: node linkType: hard -"@storybook/addon-outline@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/addon-outline@npm:8.6.8" +"@storybook/addon-outline@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/addon-outline@npm:8.6.12" dependencies: "@storybook/global": "npm:^5.0.0" ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^8.6.8 - checksum: 10/6f45bdd5f833a147767795a1561b7bde8309016e4eba27db09698fba89ae83f2e405ec71b55935131fe4be600fb3d8b283274e2cb109aff9d54dba2406e11ac4 + storybook: ^8.6.12 + checksum: 10/57fcde63feae3c0b755afa8036ab832d8f414acaffa7c6e7ee0039caf8b5074e53182e8c61802071f5d858e9c64d4e02ed5680a5a28c34f824f118f65a0c7607 languageName: node linkType: hard @@ -17610,34 +17610,34 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-themes@npm:^8.6.8": - version: 8.6.8 - resolution: "@storybook/addon-themes@npm:8.6.8" +"@storybook/addon-themes@npm:^8.6.12": + version: 8.6.12 + resolution: "@storybook/addon-themes@npm:8.6.12" dependencies: ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^8.6.8 - checksum: 10/9fdddaf503f2091c0c69a13a42f335bcce30e742f89f56f549c26464e33b70983a4828ea71182d91356b371d4e761f7ab0c613c7ae27e1c0bd1b51e95ec8a7a4 + storybook: ^8.6.12 + checksum: 10/2df945accd7c0546785f71e2adc4ed68d71a057bc54aaef53f16ce8fcbc5a494380d60f9dd58520fe7d93b021a1b09e3d73553766d4bf2a1d07a3d731132b939 languageName: node linkType: hard -"@storybook/addon-toolbars@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/addon-toolbars@npm:8.6.8" +"@storybook/addon-toolbars@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/addon-toolbars@npm:8.6.12" peerDependencies: - storybook: ^8.6.8 - checksum: 10/31e4dca67308e122b9c4a8ceab6fedbe69f5d3f3a36dc05a1b7b334cbcbf3d539dc847da8417934c2f227296f60561dad054fb8fc47f5253210a34becfdc4b59 + storybook: ^8.6.12 + checksum: 10/f94c3bcc8886ead315eb919cee18fb2143134ca9e59058e1d7a35c0e348e0bdcf51971b2a51ebd7a7250ec0e5873519dea72e699f83d771288b6bde873720e1f languageName: node linkType: hard -"@storybook/addon-viewport@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/addon-viewport@npm:8.6.8" +"@storybook/addon-viewport@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/addon-viewport@npm:8.6.12" dependencies: memoizerific: "npm:^1.11.3" peerDependencies: - storybook: ^8.6.8 - checksum: 10/1857f78c57f152c7945b73c88c0e79f3fa51a3960f41f16c213b8841d3e24bc3a8accd44a0261f3e5cb5c49f847c1222d83400e2cd8355468c3289958c32c0c7 + storybook: ^8.6.12 + checksum: 10/b7b9fe1bc9d51b33b67ba35f5a219910db88c99323baad6e7e5ee9ec6ddd5b5f2f4124ff99729571c4306f35fcb36ee388bece437c648e9f2ce94cbfb44c4800 languageName: node linkType: hard @@ -17651,30 +17651,30 @@ __metadata: languageName: node linkType: hard -"@storybook/blocks@npm:8.6.8, @storybook/blocks@npm:^8.6.8": - version: 8.6.8 - resolution: "@storybook/blocks@npm:8.6.8" +"@storybook/blocks@npm:8.6.12, @storybook/blocks@npm:^8.6.12": + version: 8.6.12 + resolution: "@storybook/blocks@npm:8.6.12" dependencies: "@storybook/icons": "npm:^1.2.12" ts-dedent: "npm:^2.0.0" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - storybook: ^8.6.8 + storybook: ^8.6.12 peerDependenciesMeta: react: optional: true react-dom: optional: true - checksum: 10/e8f919029b7ccee81b555174a648205e72ff5657e2752866c25263f106f61408a1414bbe21c8872e93620c38fd0a1a3c8956a496b77e7aee5d8d13818e646207 + checksum: 10/636172d0512f85913f1bed23eafcb3d827e4c924f65377c0c5d60ccce0241056caf9ab1fa3eb718cae9c02fb063f446294e32d1d5163377774d9225d97f210a0 languageName: node linkType: hard -"@storybook/builder-webpack5@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/builder-webpack5@npm:8.6.8" +"@storybook/builder-webpack5@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/builder-webpack5@npm:8.6.12" dependencies: - "@storybook/core-webpack": "npm:8.6.8" + "@storybook/core-webpack": "npm:8.6.12" "@types/semver": "npm:^7.3.4" browser-assert: "npm:^1.2.1" case-sensitive-paths-webpack-plugin: "npm:^2.4.0" @@ -17699,39 +17699,39 @@ __metadata: webpack-hot-middleware: "npm:^2.25.1" webpack-virtual-modules: "npm:^0.6.0" peerDependencies: - storybook: ^8.6.8 + storybook: ^8.6.12 peerDependenciesMeta: typescript: optional: true - checksum: 10/e802bf8287cdbaa29a56fbbbf4292799b21535b3bf18ebb864b7fb1ec2a2ef546977f70d212ef1e70949527b72c3d37952e158310242f0ff2ea3ffa36cffc671 + checksum: 10/787c602308775e69e71925ec79de02b88d092a02e0c76584543dda1ebe3b769c07d7ccd3df1976f64d3562b9049cb92ed3f375bc1e9563505a0064c0c0bf3ea0 languageName: node linkType: hard -"@storybook/components@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/components@npm:8.6.8" +"@storybook/components@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/components@npm:8.6.12" peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - checksum: 10/fb69c6d7804f91fffd3fc7d42ba5b144c7b808af6e6b764c14cdef11263897e551e5cc8a0fa379b9ed73f5c0438ed32d355c7ed63801046e1cb078c479d4cecf + checksum: 10/ccc6af275bdfbc66de8afb272f59b2b4b6b76bb2961903335cb62e7defae4a2368bd8f5a2008f8598dd8417e5368d824bce836ca96c3c6ff659dbf2f081ec0dd languageName: node linkType: hard -"@storybook/core-webpack@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/core-webpack@npm:8.6.8" +"@storybook/core-webpack@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/core-webpack@npm:8.6.12" dependencies: ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^8.6.8 - checksum: 10/b691bcfd7c9681a90f1e51272f1bf9df1b84a1ebe0e7db11dd4bb12d271b92cfb72751560ee76fdf91ffcc2ba5f0c95c3dfaebcc4be4a3f8036e66a155ffa998 + storybook: ^8.6.12 + checksum: 10/2c4d7b51480b16499d13fd5611d4c98345b0251061cfd457ff5ea185ddaa29746b9936c79b1a9b0b39a3b2e527b7c62d1da2cf32cbc5c7a5e42ae50776175ca3 languageName: node linkType: hard -"@storybook/core@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/core@npm:8.6.8" +"@storybook/core@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/core@npm:8.6.12" dependencies: - "@storybook/theming": "npm:8.6.8" + "@storybook/theming": "npm:8.6.12" better-opn: "npm:^3.0.2" browser-assert: "npm:^1.2.1" esbuild: "npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0" @@ -17747,18 +17747,18 @@ __metadata: peerDependenciesMeta: prettier: optional: true - checksum: 10/0ca71e2d553acca34a3e6164726f1973a7bfc67a03a179066f92035c93adba356cb69e4368fb5b2cdbe5835d7a08b73e61fb77dabc390a38e38cd7d56ff9f521 + checksum: 10/78776f51b9eae00f9387421b33b646b1dc67ef833fd6272de03399daa7f0ffa248c65b5f24d5d2a9af923a029d06d84d5425e3455302ece542bf47c7a9ec0df6 languageName: node linkType: hard -"@storybook/csf-plugin@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/csf-plugin@npm:8.6.8" +"@storybook/csf-plugin@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/csf-plugin@npm:8.6.12" dependencies: unplugin: "npm:^1.3.1" peerDependencies: - storybook: ^8.6.8 - checksum: 10/17dece5267ae2bfb735ccb26485722bb16dbb2c53aea18c94aa6f532a5b848b2a2558678b6ccad3dbfabbf596aa45d543aea3a1967afa1e97c244f8603d86ec9 + storybook: ^8.6.12 + checksum: 10/05dc3d5eb567c396f4773faed8283255526e60d7ed05452acd399edfb0d23beba886d9042cb705f76f8055108821eeae8dd2124635b5b47412f279b515affcc3 languageName: node linkType: hard @@ -17788,24 +17788,24 @@ __metadata: languageName: node linkType: hard -"@storybook/instrumenter@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/instrumenter@npm:8.6.8" +"@storybook/instrumenter@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/instrumenter@npm:8.6.12" dependencies: "@storybook/global": "npm:^5.0.0" "@vitest/utils": "npm:^2.1.1" peerDependencies: - storybook: ^8.6.8 - checksum: 10/d56650b5f43ac303ebafb04aba42ccd1827f926a39d96fd22e28e77e6358e86f0bd6ec4d1128323772df049ae1ab08611d3e4143c9a14deb1f882b0024b41347 + storybook: ^8.6.12 + checksum: 10/11f608406a2d83a500a9270fda57bbec4aa1f97a3d95a4b52f44dce4efbfd6d198b33a0077cee2b48251af191722d2fdbfd1fe89255ded27656372214e37cb7c languageName: node linkType: hard -"@storybook/manager-api@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/manager-api@npm:8.6.8" +"@storybook/manager-api@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/manager-api@npm:8.6.12" peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - checksum: 10/ee575781572898fc2fa734750ccb4bad09fc021bd0878ca9a05d9668cb336610d53e8110f4ff3c2c180573a64e9caba8f50f59d0bd3f0398a5c98e2eafdd91ae + checksum: 10/d1c44c6649a024c4007461c12a15337f5d13532dbaccc4c02f71bd99599fb973e2574eb8f1bc2d93e05da24e4ae43fa47ec637a7c4cccf5ffc67045cafbf087c languageName: node linkType: hard @@ -17818,12 +17818,12 @@ __metadata: languageName: node linkType: hard -"@storybook/preset-react-webpack@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/preset-react-webpack@npm:8.6.8" +"@storybook/preset-react-webpack@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/preset-react-webpack@npm:8.6.12" dependencies: - "@storybook/core-webpack": "npm:8.6.8" - "@storybook/react": "npm:8.6.8" + "@storybook/core-webpack": "npm:8.6.12" + "@storybook/react": "npm:8.6.12" "@storybook/react-docgen-typescript-plugin": "npm:1.0.6--canary.9.0c3f3b7.0" "@types/semver": "npm:^7.3.4" find-up: "npm:^5.0.0" @@ -17836,20 +17836,20 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.8 + storybook: ^8.6.12 peerDependenciesMeta: typescript: optional: true - checksum: 10/02904f5fa99c07791a731f751b7d73c898a0c72516940707e1f49dc8caaf185beafa7d354a7a61d63512e27c02927b2fa15ed64ff58decaa43d74b6fa3a35770 + checksum: 10/7f6ae4fe8584cc46c9d1d4959f69983e5fef08814e24a801f377c04c781cc86a3ee5785e2ef2e4e66ffd82a4b0324f604704af3531362bd0760ba944871c1551 languageName: node linkType: hard -"@storybook/preview-api@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/preview-api@npm:8.6.8" +"@storybook/preview-api@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/preview-api@npm:8.6.12" peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - checksum: 10/ac923a342d09c9e51f67734acaea19a41dc87cfc6cb22aea262591396d41cd4b69896417b618c55f17a9d64660b659813475c30d338c9bb6aa45391cfe8328f0 + checksum: 10/d24f11e4e54e9e51297b0f87e1d462b3f14a974b4681f31d93b62b0706ce5b5ed4ffaaac521ec049dcb0e08e7aa7590f2e039aee4bbe9f85033d69474d982f23 languageName: node linkType: hard @@ -17871,84 +17871,84 @@ __metadata: languageName: node linkType: hard -"@storybook/react-dom-shim@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/react-dom-shim@npm:8.6.8" +"@storybook/react-dom-shim@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/react-dom-shim@npm:8.6.12" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.8 - checksum: 10/d49bc7f96349460c13c61538116c634174418dd174e80336457ee90f9e054efa6030ec8def9cab870a85657eb8050ee8c5599e0643736642608488b43de54b1f + storybook: ^8.6.12 + checksum: 10/7677b4fae978209af239471f9eb609db4318815bd4249a0f48b9875482d9ae910b93fbe4db5d7f794ecc2a1249edf40da26af9de673c941c48fccc4007819c96 languageName: node linkType: hard -"@storybook/react-webpack5@npm:^8.6.8": - version: 8.6.8 - resolution: "@storybook/react-webpack5@npm:8.6.8" +"@storybook/react-webpack5@npm:^8.6.12": + version: 8.6.12 + resolution: "@storybook/react-webpack5@npm:8.6.12" dependencies: - "@storybook/builder-webpack5": "npm:8.6.8" - "@storybook/preset-react-webpack": "npm:8.6.8" - "@storybook/react": "npm:8.6.8" + "@storybook/builder-webpack5": "npm:8.6.12" + "@storybook/preset-react-webpack": "npm:8.6.12" + "@storybook/react": "npm:8.6.12" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.8 + storybook: ^8.6.12 typescript: ">= 4.2.x" peerDependenciesMeta: typescript: optional: true - checksum: 10/f620c05f173317f8a1e1e164d1f339c99e736a003a5eb6e2043785d67529a84e74d117fcf2f4cc55adcd5813e32b8ee7fedced9cea023da6ddd7aacd2a0142bd + checksum: 10/c4ce4baa00837c9f90cb740f916c778418a6bcf9b338db33a9c6b154d4de7ce041bf142beed5eade77998eb77992a5928a870f6a184f01b20ee6f7e796ada547 languageName: node linkType: hard -"@storybook/react@npm:8.6.8, @storybook/react@npm:^8.6.8": - version: 8.6.8 - resolution: "@storybook/react@npm:8.6.8" +"@storybook/react@npm:8.6.12, @storybook/react@npm:^8.6.12": + version: 8.6.12 + resolution: "@storybook/react@npm:8.6.12" dependencies: - "@storybook/components": "npm:8.6.8" + "@storybook/components": "npm:8.6.12" "@storybook/global": "npm:^5.0.0" - "@storybook/manager-api": "npm:8.6.8" - "@storybook/preview-api": "npm:8.6.8" - "@storybook/react-dom-shim": "npm:8.6.8" - "@storybook/theming": "npm:8.6.8" + "@storybook/manager-api": "npm:8.6.12" + "@storybook/preview-api": "npm:8.6.12" + "@storybook/react-dom-shim": "npm:8.6.12" + "@storybook/theming": "npm:8.6.12" peerDependencies: - "@storybook/test": 8.6.8 + "@storybook/test": 8.6.12 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.6.8 + storybook: ^8.6.12 typescript: ">= 4.2.x" peerDependenciesMeta: "@storybook/test": optional: true typescript: optional: true - checksum: 10/b2e664d6ccb91fd269b9168defb7d6c673a1e35119c61518bf72c8612884873eadcfadffd5b64171b26fbd1cc498828ddf52a9fb2fe34fdac9edb3f2d86a62e8 + checksum: 10/d8258c82743906f48a872a781f3e5a63e9ce3fda2ba3b911e959cf62ebda43989b23746257d97905addb7142ac7e53d0089dc178bcbeea48ed4d37d025dd047b languageName: node linkType: hard -"@storybook/test@npm:8.6.8, @storybook/test@npm:^8.6.8": - version: 8.6.8 - resolution: "@storybook/test@npm:8.6.8" +"@storybook/test@npm:8.6.12, @storybook/test@npm:^8.6.12": + version: 8.6.12 + resolution: "@storybook/test@npm:8.6.12" dependencies: "@storybook/global": "npm:^5.0.0" - "@storybook/instrumenter": "npm:8.6.8" + "@storybook/instrumenter": "npm:8.6.12" "@testing-library/dom": "npm:10.4.0" "@testing-library/jest-dom": "npm:6.5.0" "@testing-library/user-event": "npm:14.5.2" "@vitest/expect": "npm:2.0.5" "@vitest/spy": "npm:2.0.5" peerDependencies: - storybook: ^8.6.8 - checksum: 10/afcb28c14067a7d9934d55557257d9ee458388964e4a41ca294254fc5bf982b5253f0a63a497f71b1dd2dcf368bb831f4fd0db13ecb9e6ce4437cd1f65548842 + storybook: ^8.6.12 + checksum: 10/495409d95a6c649c54afd7304d429f1d7ef29ef9ac40415550ce60115d3f4210a228d7ab927dcd3229f63954e5a282f407cb8bc5816c6cfc9a45fcbc8e30bae8 languageName: node linkType: hard -"@storybook/theming@npm:8.6.8": - version: 8.6.8 - resolution: "@storybook/theming@npm:8.6.8" +"@storybook/theming@npm:8.6.12": + version: 8.6.12 + resolution: "@storybook/theming@npm:8.6.12" peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - checksum: 10/1be0dea23178af562133f1047165e170f7e90bec4c3cedbdcb59df22685f314273a06a4677835ab84e6dbc682b803590adad6963217971c8136b076ce69800aa + checksum: 10/c811d9dbb9eaaa680b922111fca126a2985f2238dfb01c1cd23184323eea12899dc9f079063ac42c5e63b0c83de326bd9cc17241e4060ff04e860c57a55fb8b9 languageName: node linkType: hard @@ -18844,7 +18844,7 @@ __metadata: languageName: node linkType: hard -"@tanstack/react-table@npm:^8.21.2": +"@tanstack/react-table@npm:^8.21.3": version: 8.21.3 resolution: "@tanstack/react-table@npm:8.21.3" dependencies: @@ -28482,16 +28482,16 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-storybook@npm:^0.11.4": - version: 0.11.6 - resolution: "eslint-plugin-storybook@npm:0.11.6" +"eslint-plugin-storybook@npm:^0.12.0": + version: 0.12.0 + resolution: "eslint-plugin-storybook@npm:0.12.0" dependencies: "@storybook/csf": "npm:^0.1.11" "@typescript-eslint/utils": "npm:^8.8.1" ts-dedent: "npm:^2.2.0" peerDependencies: eslint: ">=8" - checksum: 10/9872dd37386bed244b56589348949d54cad0a526ef81229681a5c918fe1a74dbef56fd7a6cf1c8014b5b38744ba759d1b24a3f94fdbec5d0fddfc6a54f5e6eb7 + checksum: 10/278ea59565e30b74ee1d57f0a8f704906eaf40973b13999ec2c44872bb90c7505dfb12777b264940e2b480e81ace85c0532af69666e76a783b8ffa898a1d49ad languageName: node linkType: hard @@ -44195,11 +44195,11 @@ __metadata: languageName: node linkType: hard -"storybook@npm:^8.6.8": - version: 8.6.8 - resolution: "storybook@npm:8.6.8" +"storybook@npm:^8.6.12": + version: 8.6.12 + resolution: "storybook@npm:8.6.12" dependencies: - "@storybook/core": "npm:8.6.8" + "@storybook/core": "npm:8.6.12" peerDependencies: prettier: ^2 || ^3 peerDependenciesMeta: @@ -44209,7 +44209,7 @@ __metadata: getstorybook: ./bin/index.cjs sb: ./bin/index.cjs storybook: ./bin/index.cjs - checksum: 10/9d7cd271fda874063cb59795ece7da907608d47e8a1ac441c4b30670c542fb929c9c7f30447ba3151a41631f0ec1f4dbb10cc214853f3a703f2019f23811e5bb + checksum: 10/babd1d086eb02ba25ee659e02e619f7797a6b91028ad74d2da0ab77e72021cd5c2ac4f239668f15156aabf00bd97066a774370dceadf178b1e649bf971160a26 languageName: node linkType: hard From 4d61d2496186e8c4346478638d8c28f159c14f19 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 16 Apr 2025 11:58:56 +0200 Subject: [PATCH 49/61] packages: remove backend-legacy package Signed-off-by: Patrik Oldsberg --- docs/conf/reading.md | 14 +- .../software-catalog/external-integrations.md | 8 +- package.json | 1 - packages/backend-legacy/.eslintrc.js | 1 - packages/backend-legacy/.snyk | 10 - packages/backend-legacy/CHANGELOG.md | 8828 ----------------- packages/backend-legacy/README.md | 61 - packages/backend-legacy/catalog-info.yaml | 9 - packages/backend-legacy/knip-report.md | 27 - packages/backend-legacy/package.json | 84 - packages/backend-legacy/src/index.test.ts | 24 - packages/backend-legacy/src/index.ts | 155 - packages/backend-legacy/src/metrics.ts | 63 - .../plugins/DemoEventBasedEntityProvider.ts | 60 - .../backend-legacy/src/plugins/catalog.ts | 41 - packages/backend-legacy/src/plugins/events.ts | 34 - .../backend-legacy/src/plugins/healthcheck.ts | 28 - .../backend-legacy/src/plugins/kubernetes.ts | 34 - .../backend-legacy/src/plugins/permission.ts | 53 - .../backend-legacy/src/plugins/scaffolder.ts | 63 - packages/backend-legacy/src/types.ts | 44 - yarn.lock | 180 +- 22 files changed, 12 insertions(+), 9810 deletions(-) delete mode 100644 packages/backend-legacy/.eslintrc.js delete mode 100644 packages/backend-legacy/.snyk delete mode 100644 packages/backend-legacy/CHANGELOG.md delete mode 100644 packages/backend-legacy/README.md delete mode 100644 packages/backend-legacy/catalog-info.yaml delete mode 100644 packages/backend-legacy/knip-report.md delete mode 100644 packages/backend-legacy/package.json delete mode 100644 packages/backend-legacy/src/index.test.ts delete mode 100644 packages/backend-legacy/src/index.ts delete mode 100644 packages/backend-legacy/src/metrics.ts delete mode 100644 packages/backend-legacy/src/plugins/DemoEventBasedEntityProvider.ts delete mode 100644 packages/backend-legacy/src/plugins/catalog.ts delete mode 100644 packages/backend-legacy/src/plugins/events.ts delete mode 100644 packages/backend-legacy/src/plugins/healthcheck.ts delete mode 100644 packages/backend-legacy/src/plugins/kubernetes.ts delete mode 100644 packages/backend-legacy/src/plugins/permission.ts delete mode 100644 packages/backend-legacy/src/plugins/scaffolder.ts delete mode 100644 packages/backend-legacy/src/types.ts diff --git a/docs/conf/reading.md b/docs/conf/reading.md index f7d1edae86..61cff2502b 100644 --- a/docs/conf/reading.md +++ b/docs/conf/reading.md @@ -141,15 +141,7 @@ from `@backstage/core-plugin-api`. ## Accessing ConfigApi in Backend Plugins -### Old Backend System - -In the old backend system plugins, the configuration is passed in via options from the main -backend package. See for example -[packages/backend-legacy/src/plugins/auth.ts](https://github.com/backstage/backstage/blob/244eef851f5aa19f91c7c9b5c12d5df95cf482ca/packages/backend/src/plugins/auth.ts#L23). - -### New Backend System - -In the new backend system, plugins are able to directly access config through dependencies. You can access config like so, +In the backend system, plugins are able to directly access config through dependencies. You can access config like so, ```ts title="plugins/your-plugin-backend/src/plugin.ts" export const yourPlugin = createBackendPlugin({ @@ -175,3 +167,7 @@ export const yourPlugin = createBackendPlugin({ }, }); ``` + +### Old Backend System + +In the old backend system plugins, the configuration is passed in via options from the main backend package. diff --git a/docs/features/software-catalog/external-integrations.md b/docs/features/software-catalog/external-integrations.md index 64468f7f41..44946b334a 100644 --- a/docs/features/software-catalog/external-integrations.md +++ b/docs/features/software-catalog/external-integrations.md @@ -53,9 +53,7 @@ Some defining traits of entity providers: ### Creating an Entity Provider -The recommended way of instantiating the catalog backend classes is to use the -`CatalogBuilder`, as illustrated in the -[example backend here](https://github.com/backstage/backstage/blob/master/packages/backend-legacy/src/plugins/catalog.ts). +The recommended way of instantiating the catalog backend classes is to use the `CatalogBuilder`. We will create a new [`EntityProvider`](https://github.com/backstage/backstage/blob/master/plugins/catalog-node/src/api/provider.ts) subclass that can be added to this catalog builder. @@ -637,9 +635,7 @@ does so! ### Creating a Catalog Data Reader Processor -The recommended way of instantiating the catalog backend classes is to use the -`CatalogBuilder`, as illustrated in the -[example backend here](https://github.com/backstage/backstage/blob/master/packages/backend-legacy/src/plugins/catalog.ts). +The recommended way of instantiating the catalog backend classes is to use the `CatalogBuilder`. We will create a new [`CatalogProcessor`](https://github.com/backstage/backstage/blob/master/plugins/catalog-node/src/api/processor.ts) subclass that can be added to this catalog builder. diff --git a/package.json b/package.json index f9aa0d9776..f42bafb4ab 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,6 @@ "snyk:test:package": "yarn snyk:test --include", "start": "backstage-cli repo start", "start-backend": "echo \"Use 'yarn start example-backend' instead\"", - "start-backend:legacy": "echo \"Use 'yarn start example-backend-legacy' instead\"", "start:microsite": "cd microsite/ && yarn start", "start:next": "yarn start example-app-next example-backend", "storybook": "yarn ./storybook run storybook", diff --git a/packages/backend-legacy/.eslintrc.js b/packages/backend-legacy/.eslintrc.js deleted file mode 100644 index e2a53a6ad2..0000000000 --- a/packages/backend-legacy/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/backend-legacy/.snyk b/packages/backend-legacy/.snyk deleted file mode 100644 index ea5abd653d..0000000000 --- a/packages/backend-legacy/.snyk +++ /dev/null @@ -1,10 +0,0 @@ -# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. -version: v1.22.1 -# ignores vulnerabilities until expiry date; change duration by modifying expiry date -ignore: - SNYK-JS-ISOLATEDVM-3037320: - - '*': - reason: We do not pass any V8 cache data, and are therefore unaffected by this vulnerability - expires: 2033-07-02T16:55:57.077Z - created: 2023-07-02T16:55:57.077Z -patch: {} diff --git a/packages/backend-legacy/CHANGELOG.md b/packages/backend-legacy/CHANGELOG.md deleted file mode 100644 index f68e1d3c0d..0000000000 --- a/packages/backend-legacy/CHANGELOG.md +++ /dev/null @@ -1,8828 +0,0 @@ -# example-backend-legacy - -## 0.2.109 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.9.0 - - @backstage/plugin-permission-backend@0.6.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.9.0 - - @backstage/plugin-catalog-node@1.16.3 - - @backstage/plugin-auth-backend@0.24.5 - - @backstage/plugin-catalog-backend@1.32.1 - - @backstage/plugin-scaffolder-backend@1.32.0 - - @backstage/backend-plugin-api@1.3.0 - - @backstage/integration@1.16.3 - - @backstage/plugin-auth-node@0.6.2 - - @backstage/plugin-events-backend@0.5.1 - - @backstage/plugin-kubernetes-backend@0.19.5 - - @backstage/plugin-permission-node@0.9.1 - - @backstage/plugin-search-backend@2.0.1 - - @backstage/plugin-search-backend-node@1.3.10 - - @backstage/plugin-signals-backend@0.3.3 - - @backstage/plugin-techdocs-backend@2.0.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.7 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.7 - - @backstage/plugin-search-backend-module-catalog@0.3.3 - - @backstage/plugin-search-backend-module-techdocs@0.4.1 - - @backstage/catalog-client@1.9.1 - - @backstage/catalog-model@1.7.3 - - @backstage/config@1.3.2 - - @backstage/plugin-events-node@0.4.10 - - @backstage/plugin-permission-common@0.8.4 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.8 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.8 - - @backstage/plugin-search-backend-module-elasticsearch@1.7.1 - - @backstage/plugin-search-backend-module-explore@0.3.1 - - @backstage/plugin-search-backend-module-pg@0.5.43 - - @backstage/plugin-signals-node@0.1.19 - -## 0.2.109-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.32.1-next.1 - - @backstage/plugin-catalog-node@1.16.3-next.0 - - @backstage/backend-defaults@0.9.0-next.2 - - @backstage/plugin-auth-backend@0.24.5-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.7-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.7-next.0 - - @backstage/plugin-kubernetes-backend@0.19.5-next.0 - - @backstage/plugin-scaffolder-backend@1.32.0-next.2 - - @backstage/plugin-search-backend-module-catalog@0.3.3-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.4.1-next.2 - - @backstage/plugin-techdocs-backend@2.0.1-next.2 - - @backstage/backend-plugin-api@1.2.1 - - @backstage/catalog-client@1.9.1 - - @backstage/catalog-model@1.7.3 - - @backstage/config@1.3.2 - - @backstage/integration@1.16.3-next.0 - - @backstage/plugin-auth-node@0.6.1 - - @backstage/plugin-events-backend@0.5.0 - - @backstage/plugin-events-node@0.4.9 - - @backstage/plugin-permission-backend@0.5.55 - - @backstage/plugin-permission-common@0.8.4 - - @backstage/plugin-permission-node@0.9.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.8-next.1 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.8.2-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.8-next.1 - - @backstage/plugin-search-backend@2.0.1-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.7.0 - - @backstage/plugin-search-backend-module-explore@0.3.0 - - @backstage/plugin-search-backend-module-pg@0.5.42 - - @backstage/plugin-search-backend-node@1.3.9 - - @backstage/plugin-signals-backend@0.3.2 - - @backstage/plugin-signals-node@0.1.18 - -## 0.2.109-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend-module-gitlab@0.8.2-next.1 - - @backstage/integration@1.16.3-next.0 - - @backstage/plugin-auth-backend@0.24.5-next.1 - - @backstage/plugin-scaffolder-backend@1.32.0-next.1 - - @backstage/backend-defaults@0.9.0-next.1 - - @backstage/plugin-catalog-backend@1.32.1-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.8-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.8-next.1 - - @backstage/plugin-techdocs-backend@2.0.1-next.1 - - @backstage/plugin-signals-backend@0.3.2 - - @backstage/plugin-auth-node@0.6.1 - - @backstage/plugin-events-backend@0.5.0 - - @backstage/plugin-kubernetes-backend@0.19.4 - - @backstage/plugin-permission-backend@0.5.55 - - @backstage/plugin-permission-node@0.9.0 - - @backstage/plugin-search-backend@2.0.1-next.1 - - @backstage/plugin-search-backend-node@1.3.9 - - @backstage/backend-plugin-api@1.2.1 - - @backstage/catalog-client@1.9.1 - - @backstage/catalog-model@1.7.3 - - @backstage/config@1.3.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.6 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.6 - - @backstage/plugin-catalog-node@1.16.1 - - @backstage/plugin-events-node@0.4.9 - - @backstage/plugin-permission-common@0.8.4 - - @backstage/plugin-search-backend-module-catalog@0.3.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.7.0 - - @backstage/plugin-search-backend-module-explore@0.3.0 - - @backstage/plugin-search-backend-module-pg@0.5.42 - - @backstage/plugin-search-backend-module-techdocs@0.4.1-next.1 - - @backstage/plugin-signals-node@0.1.18 - -## 0.2.109-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.9.0-next.0 - - @backstage/plugin-scaffolder-backend@1.32.0-next.0 - - @backstage/plugin-auth-backend@0.24.5-next.0 - - @backstage/plugin-auth-node@0.6.1 - - @backstage/plugin-catalog-backend@1.32.0 - - @backstage/plugin-events-backend@0.5.0 - - @backstage/plugin-kubernetes-backend@0.19.4 - - @backstage/plugin-permission-backend@0.5.55 - - @backstage/plugin-permission-node@0.9.0 - - @backstage/plugin-search-backend@2.0.1-next.0 - - @backstage/plugin-search-backend-node@1.3.9 - - @backstage/plugin-signals-backend@0.3.2 - - @backstage/plugin-techdocs-backend@2.0.1-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.4.1-next.0 - - @backstage/backend-plugin-api@1.2.1 - - @backstage/catalog-client@1.9.1 - - @backstage/catalog-model@1.7.3 - - @backstage/config@1.3.2 - - @backstage/integration@1.16.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.6 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.6 - - @backstage/plugin-catalog-node@1.16.1 - - @backstage/plugin-events-node@0.4.9 - - @backstage/plugin-permission-common@0.8.4 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.8-next.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.8.2-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.8-next.0 - - @backstage/plugin-search-backend-module-catalog@0.3.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.7.0 - - @backstage/plugin-search-backend-module-explore@0.3.0 - - @backstage/plugin-search-backend-module-pg@0.5.42 - - @backstage/plugin-signals-node@0.1.18 - -## 0.2.108 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-module-techdocs@0.4.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.8.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.7.0 - - @backstage/integration@1.16.2 - - @backstage/backend-defaults@0.8.2 - - @backstage/plugin-scaffolder-backend@1.31.0 - - @backstage/plugin-kubernetes-backend@0.19.4 - - @backstage/plugin-events-backend@0.5.0 - - @backstage/plugin-search-backend-module-pg@0.5.42 - - @backstage/plugin-permission-node@0.9.0 - - @backstage/plugin-catalog-backend@1.32.0 - - @backstage/plugin-techdocs-backend@2.0.0 - - @backstage/plugin-auth-node@0.6.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.7 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.7 - - @backstage/plugin-auth-backend@0.24.4 - - @backstage/plugin-events-node@0.4.9 - - @backstage/plugin-search-backend-module-explore@0.3.0 - - @backstage/plugin-search-backend@2.0.0 - - @backstage/backend-plugin-api@1.2.1 - - @backstage/catalog-client@1.9.1 - - @backstage/catalog-model@1.7.3 - - @backstage/config@1.3.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.6 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.6 - - @backstage/plugin-catalog-node@1.16.1 - - @backstage/plugin-permission-backend@0.5.55 - - @backstage/plugin-permission-common@0.8.4 - - @backstage/plugin-search-backend-module-catalog@0.3.2 - - @backstage/plugin-search-backend-node@1.3.9 - - @backstage/plugin-signals-backend@0.3.2 - - @backstage/plugin-signals-node@0.1.18 - -## 0.2.108-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend-module-gitlab@0.8.1-next.2 - - @backstage/plugin-scaffolder-backend@1.31.0-next.2 - - @backstage/plugin-catalog-backend@1.32.0-next.2 - - @backstage/plugin-techdocs-backend@1.11.7-next.2 - - @backstage/backend-defaults@0.8.2-next.2 - - @backstage/integration@1.16.2-next.0 - - @backstage/plugin-events-backend@0.4.4-next.2 - - @backstage/plugin-events-node@0.4.9-next.2 - - @backstage/backend-plugin-api@1.2.1-next.1 - - @backstage/catalog-client@1.9.1 - - @backstage/catalog-model@1.7.3 - - @backstage/config@1.3.2 - - @backstage/plugin-auth-backend@0.24.4-next.2 - - @backstage/plugin-auth-node@0.6.1-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.6-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.6-next.1 - - @backstage/plugin-catalog-node@1.16.1-next.1 - - @backstage/plugin-kubernetes-backend@0.19.4-next.1 - - @backstage/plugin-permission-backend@0.5.55-next.1 - - @backstage/plugin-permission-common@0.8.4 - - @backstage/plugin-permission-node@0.8.9-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.7-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.7-next.2 - - @backstage/plugin-search-backend@1.8.3-next.2 - - @backstage/plugin-search-backend-module-catalog@0.3.2-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.6.6-next.1 - - @backstage/plugin-search-backend-module-explore@0.2.9-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.42-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.3.7-next.2 - - @backstage/plugin-search-backend-node@1.3.9-next.1 - - @backstage/plugin-signals-backend@0.3.2-next.2 - - @backstage/plugin-signals-node@0.1.18-next.2 - -## 0.2.108-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-node@0.6.1-next.1 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.8.1-next.1 - - @backstage/plugin-catalog-backend@1.32.0-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.7-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.7-next.1 - - @backstage/plugin-scaffolder-backend@1.30.1-next.1 - - @backstage/plugin-auth-backend@0.24.4-next.1 - - @backstage/backend-defaults@0.8.2-next.1 - - @backstage/backend-plugin-api@1.2.1-next.1 - - @backstage/catalog-client@1.9.1 - - @backstage/catalog-model@1.7.3 - - @backstage/config@1.3.2 - - @backstage/integration@1.16.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.6-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.6-next.1 - - @backstage/plugin-catalog-node@1.16.1-next.1 - - @backstage/plugin-events-backend@0.4.4-next.1 - - @backstage/plugin-events-node@0.4.9-next.1 - - @backstage/plugin-kubernetes-backend@0.19.4-next.1 - - @backstage/plugin-permission-backend@0.5.55-next.1 - - @backstage/plugin-permission-common@0.8.4 - - @backstage/plugin-permission-node@0.8.9-next.1 - - @backstage/plugin-search-backend@1.8.3-next.1 - - @backstage/plugin-search-backend-module-catalog@0.3.2-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.6.6-next.1 - - @backstage/plugin-search-backend-module-explore@0.2.9-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.42-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.3.7-next.1 - - @backstage/plugin-search-backend-node@1.3.9-next.1 - - @backstage/plugin-signals-backend@0.3.2-next.1 - - @backstage/plugin-signals-node@0.1.18-next.1 - - @backstage/plugin-techdocs-backend@1.11.7-next.1 - -## 0.2.108-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-module-elasticsearch@1.6.6-next.0 - - @backstage/backend-defaults@0.8.2-next.0 - - @backstage/plugin-kubernetes-backend@0.19.4-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.42-next.0 - - @backstage/plugin-events-backend@0.4.4-next.0 - - @backstage/plugin-permission-node@0.8.9-next.0 - - @backstage/plugin-app-backend@0.4.6-next.0 - - @backstage/plugin-auth-backend@0.24.4-next.0 - - @backstage/plugin-auth-node@0.6.1-next.0 - - @backstage/plugin-catalog-backend@1.31.1-next.0 - - @backstage/plugin-permission-backend@0.5.55-next.0 - - @backstage/plugin-proxy-backend@0.5.12-next.0 - - @backstage/plugin-scaffolder-backend@1.30.1-next.0 - - @backstage/plugin-search-backend@1.8.3-next.0 - - @backstage/plugin-search-backend-node@1.3.9-next.0 - - @backstage/plugin-signals-backend@0.3.2-next.0 - - @backstage/plugin-techdocs-backend@1.11.7-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.3.7-next.0 - - @backstage/backend-plugin-api@1.2.1-next.0 - - @backstage/plugin-catalog-node@1.16.1-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.6-next.0 - - @backstage/plugin-events-node@0.4.9-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.7-next.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.8.1-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.7-next.0 - - @backstage/plugin-search-backend-module-catalog@0.3.2-next.0 - - @backstage/plugin-search-backend-module-explore@0.2.9-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.6-next.0 - - @backstage/plugin-signals-node@0.1.18-next.0 - -## 0.2.107 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-permission-node@0.8.8 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.8.0 - - @backstage/backend-defaults@0.8.0 - - @backstage/plugin-catalog-backend@1.31.0 - - @backstage/plugin-scaffolder-backend@1.30.0 - - @backstage/backend-plugin-api@1.2.0 - - @backstage/plugin-catalog-node@1.16.0 - - @backstage/plugin-kubernetes-backend@0.19.3 - - @backstage/plugin-search-backend-module-catalog@0.3.1 - - @backstage/plugin-search-backend-module-pg@0.5.41 - - @backstage/plugin-search-backend-node@1.3.8 - - @backstage/plugin-auth-node@0.6.0 - - @backstage/plugin-techdocs-backend@1.11.6 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.5 - - @backstage/plugin-permission-backend@0.5.54 - - @backstage/plugin-search-backend@1.8.2 - - @backstage/catalog-client@1.9.1 - - @backstage/catalog-model@1.7.3 - - @backstage/config@1.3.2 - - @backstage/integration@1.16.1 - - @backstage/plugin-app-backend@0.4.5 - - @backstage/plugin-auth-backend@0.24.3 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.5 - - @backstage/plugin-events-backend@0.4.2 - - @backstage/plugin-events-node@0.4.8 - - @backstage/plugin-permission-common@0.8.4 - - @backstage/plugin-proxy-backend@0.5.11 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.6 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.6 - - @backstage/plugin-search-backend-module-elasticsearch@1.6.5 - - @backstage/plugin-search-backend-module-explore@0.2.8 - - @backstage/plugin-search-backend-module-techdocs@0.3.6 - - @backstage/plugin-signals-backend@0.3.1 - - @backstage/plugin-signals-node@0.1.17 - -## 0.2.107-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-node@1.16.0-next.3 - - @backstage/plugin-permission-node@0.8.8-next.2 - - @backstage/plugin-catalog-backend@1.31.0-next.3 - - @backstage/plugin-scaffolder-backend@1.30.0-next.3 - - @backstage/backend-defaults@0.8.0-next.3 - - @backstage/backend-plugin-api@1.2.0-next.2 - - @backstage/plugin-auth-backend@0.24.3-next.3 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.5-next.3 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.5-next.3 - - @backstage/plugin-kubernetes-backend@0.19.3-next.3 - - @backstage/plugin-search-backend-module-catalog@0.3.1-next.3 - - @backstage/plugin-search-backend-module-techdocs@0.3.6-next.3 - - @backstage/plugin-techdocs-backend@1.11.6-next.3 - - @backstage/plugin-permission-backend@0.5.54-next.2 - - @backstage/plugin-search-backend@1.8.2-next.3 - - @backstage/plugin-app-backend@0.4.5-next.2 - - @backstage/plugin-auth-node@0.6.0-next.2 - - @backstage/plugin-events-backend@0.4.2-next.3 - - @backstage/plugin-events-node@0.4.8-next.2 - - @backstage/plugin-proxy-backend@0.5.11-next.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.6-next.2 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.8.0-next.3 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.6-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.6.5-next.2 - - @backstage/plugin-search-backend-module-explore@0.2.8-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.41-next.2 - - @backstage/plugin-search-backend-node@1.3.8-next.2 - - @backstage/plugin-signals-backend@0.3.1-next.2 - - @backstage/catalog-client@1.9.1 - - @backstage/catalog-model@1.7.3 - - @backstage/config@1.3.2 - - @backstage/integration@1.16.1 - - @backstage/plugin-permission-common@0.8.4 - - @backstage/plugin-signals-node@0.1.17-next.2 - -## 0.2.107-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend-module-gitlab@0.8.0-next.2 - - @backstage/backend-plugin-api@1.2.0-next.1 - - @backstage/plugin-search-backend-module-catalog@0.3.1-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.41-next.1 - - @backstage/plugin-search-backend-node@1.3.8-next.1 - - @backstage/plugin-auth-node@0.6.0-next.1 - - @backstage/backend-defaults@0.8.0-next.2 - - @backstage/plugin-kubernetes-backend@0.19.3-next.2 - - @backstage/plugin-scaffolder-backend@1.30.0-next.2 - - @backstage/catalog-client@1.9.1 - - @backstage/catalog-model@1.7.3 - - @backstage/config@1.3.2 - - @backstage/integration@1.16.1 - - @backstage/plugin-app-backend@0.4.5-next.1 - - @backstage/plugin-auth-backend@0.24.3-next.2 - - @backstage/plugin-catalog-backend@1.31.0-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.5-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.5-next.2 - - @backstage/plugin-catalog-node@1.16.0-next.2 - - @backstage/plugin-events-backend@0.4.2-next.2 - - @backstage/plugin-events-node@0.4.8-next.1 - - @backstage/plugin-permission-backend@0.5.54-next.1 - - @backstage/plugin-permission-common@0.8.4 - - @backstage/plugin-permission-node@0.8.8-next.1 - - @backstage/plugin-proxy-backend@0.5.11-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.6-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.6-next.1 - - @backstage/plugin-search-backend@1.8.2-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.6.5-next.1 - - @backstage/plugin-search-backend-module-explore@0.2.8-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.3.6-next.2 - - @backstage/plugin-signals-backend@0.3.1-next.1 - - @backstage/plugin-signals-node@0.1.17-next.1 - - @backstage/plugin-techdocs-backend@1.11.6-next.2 - -## 0.2.107-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend-module-gitlab@0.8.0-next.1 - - @backstage/plugin-scaffolder-backend@1.30.0-next.1 - - @backstage/plugin-catalog-backend@1.31.0-next.1 - - @backstage/plugin-catalog-node@1.16.0-next.1 - - @backstage/backend-defaults@0.8.0-next.1 - - @backstage/plugin-app-backend@0.4.5-next.0 - - @backstage/plugin-events-backend@0.4.2-next.1 - - @backstage/plugin-kubernetes-backend@0.19.3-next.1 - - @backstage/plugin-proxy-backend@0.5.11-next.0 - - @backstage/backend-plugin-api@1.2.0-next.0 - - @backstage/catalog-client@1.9.1 - - @backstage/catalog-model@1.7.3 - - @backstage/config@1.3.2 - - @backstage/integration@1.16.1 - - @backstage/plugin-auth-backend@0.24.3-next.1 - - @backstage/plugin-auth-node@0.5.7-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.5-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.5-next.1 - - @backstage/plugin-events-node@0.4.8-next.0 - - @backstage/plugin-permission-backend@0.5.54-next.0 - - @backstage/plugin-permission-common@0.8.4 - - @backstage/plugin-permission-node@0.8.8-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.6-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.6-next.0 - - @backstage/plugin-search-backend@1.8.2-next.1 - - @backstage/plugin-search-backend-module-catalog@0.3.1-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.6.5-next.0 - - @backstage/plugin-search-backend-module-explore@0.2.8-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.41-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.3.6-next.1 - - @backstage/plugin-search-backend-node@1.3.8-next.0 - - @backstage/plugin-signals-backend@0.3.1-next.0 - - @backstage/plugin-signals-node@0.1.17-next.0 - - @backstage/plugin-techdocs-backend@1.11.6-next.1 - -## 0.2.107-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-permission-node@0.8.8-next.0 - - @backstage/backend-defaults@0.8.0-next.0 - - @backstage/plugin-catalog-backend@1.31.0-next.0 - - @backstage/plugin-kubernetes-backend@0.19.3-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.5-next.0 - - @backstage/plugin-catalog-node@1.15.2-next.0 - - @backstage/backend-plugin-api@1.2.0-next.0 - - @backstage/plugin-scaffolder-backend@1.30.0-next.0 - - @backstage/plugin-search-backend-module-catalog@0.3.1-next.0 - - @backstage/plugin-permission-backend@0.5.54-next.0 - - @backstage/plugin-search-backend@1.8.2-next.0 - - @backstage/catalog-client@1.9.1 - - @backstage/catalog-model@1.7.3 - - @backstage/config@1.3.2 - - @backstage/integration@1.16.1 - - @backstage/plugin-app-backend@0.4.5-next.0 - - @backstage/plugin-auth-backend@0.24.3-next.0 - - @backstage/plugin-auth-node@0.5.7-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.5-next.0 - - @backstage/plugin-events-backend@0.4.2-next.0 - - @backstage/plugin-events-node@0.4.8-next.0 - - @backstage/plugin-permission-common@0.8.4 - - @backstage/plugin-proxy-backend@0.5.11-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.6-next.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.2-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.6-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.6.5-next.0 - - @backstage/plugin-search-backend-module-explore@0.2.8-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.41-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.3.6-next.0 - - @backstage/plugin-search-backend-node@1.3.8-next.0 - - @backstage/plugin-signals-backend@0.3.1-next.0 - - @backstage/plugin-signals-node@0.1.17-next.0 - - @backstage/plugin-techdocs-backend@1.11.6-next.0 - -## 0.2.106 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-signals-backend@0.3.0 - - @backstage/backend-defaults@0.7.0 - - @backstage/plugin-scaffolder-backend@1.29.0 - - @backstage/plugin-proxy-backend@0.5.10 - - @backstage/plugin-search-backend-module-catalog@0.3.0 - - @backstage/plugin-techdocs-backend@1.11.5 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.1 - - @backstage/plugin-permission-backend@0.5.53 - - @backstage/plugin-catalog-backend@1.30.0 - - @backstage/plugin-permission-node@0.8.7 - - @backstage/plugin-events-backend@0.4.1 - - @backstage/plugin-app-backend@0.4.4 - - @backstage/plugin-auth-node@0.5.6 - - @backstage/integration@1.16.1 - - @backstage/plugin-auth-backend@0.24.2 - - @backstage/backend-plugin-api@1.1.1 - - @backstage/catalog-client@1.9.1 - - @backstage/catalog-model@1.7.3 - - @backstage/config@1.3.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.4 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.4 - - @backstage/plugin-catalog-node@1.15.1 - - @backstage/plugin-events-node@0.4.7 - - @backstage/plugin-kubernetes-backend@0.19.2 - - @backstage/plugin-permission-common@0.8.4 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.5 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.5 - - @backstage/plugin-search-backend@1.8.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.6.4 - - @backstage/plugin-search-backend-module-explore@0.2.7 - - @backstage/plugin-search-backend-module-pg@0.5.40 - - @backstage/plugin-search-backend-module-techdocs@0.3.5 - - @backstage/plugin-search-backend-node@1.3.7 - - @backstage/plugin-signals-node@0.1.16 - -## 0.2.106-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.7.0-next.1 - - @backstage/backend-plugin-api@1.1.1-next.1 - - @backstage/catalog-model@1.7.3-next.0 - - @backstage/config@1.3.2-next.0 - - @backstage/plugin-app-backend@0.4.4-next.1 - - @backstage/plugin-auth-backend@0.24.2-next.1 - - @backstage/plugin-auth-node@0.5.6-next.1 - - @backstage/plugin-catalog-backend@1.30.0-next.1 - - @backstage/plugin-catalog-node@1.15.1-next.1 - - @backstage/plugin-events-backend@0.4.1-next.1 - - @backstage/plugin-events-node@0.4.7-next.1 - - @backstage/plugin-kubernetes-backend@0.19.2-next.1 - - @backstage/plugin-permission-common@0.8.4-next.0 - - @backstage/plugin-proxy-backend@0.5.10-next.1 - - @backstage/plugin-scaffolder-backend@1.29.0-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.5-next.1 - - @backstage/plugin-search-backend@1.8.1-next.1 - - @backstage/plugin-signals-backend@0.3.0-next.2 - - @backstage/plugin-signals-node@0.1.16-next.1 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.1-next.1 - - @backstage/plugin-permission-backend@0.5.53-next.1 - - @backstage/plugin-permission-node@0.8.7-next.1 - - @backstage/plugin-search-backend-node@1.3.7-next.1 - - @backstage/plugin-techdocs-backend@1.11.5-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.4-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.4-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.5-next.1 - - @backstage/plugin-search-backend-module-catalog@0.3.0-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.6.4-next.1 - - @backstage/plugin-search-backend-module-explore@0.2.7-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.40-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.3.5-next.1 - - @backstage/catalog-client@1.9.1-next.0 - - @backstage/integration@1.16.1-next.0 - -## 0.2.106-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-signals-backend@0.3.0-next.1 - - @backstage/plugin-techdocs-backend@1.11.5-next.1 - - @backstage/plugin-scaffolder-backend@1.29.0-next.1 - -## 0.2.106-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.7.0-next.0 - - @backstage/plugin-scaffolder-backend@1.29.0-next.0 - - @backstage/plugin-search-backend-module-catalog@0.3.0-next.0 - - @backstage/plugin-permission-backend@0.5.53-next.0 - - @backstage/plugin-catalog-backend@1.30.0-next.0 - - @backstage/plugin-permission-node@0.8.7-next.0 - - @backstage/plugin-events-backend@0.4.1-next.0 - - @backstage/plugin-app-backend@0.4.4-next.0 - - @backstage/plugin-auth-node@0.5.6-next.0 - - @backstage/plugin-auth-backend@0.24.2-next.0 - - @backstage/backend-plugin-api@1.1.1-next.0 - - @backstage/catalog-client@1.9.0 - - @backstage/catalog-model@1.7.2 - - @backstage/config@1.3.1 - - @backstage/integration@1.16.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.4-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.4-next.0 - - @backstage/plugin-catalog-node@1.15.1-next.0 - - @backstage/plugin-events-node@0.4.7-next.0 - - @backstage/plugin-kubernetes-backend@0.19.2-next.0 - - @backstage/plugin-permission-common@0.8.3 - - @backstage/plugin-proxy-backend@0.5.10-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.5-next.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.1-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.5-next.0 - - @backstage/plugin-search-backend@1.8.1-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.6.4-next.0 - - @backstage/plugin-search-backend-module-explore@0.2.7-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.40-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.3.5-next.0 - - @backstage/plugin-search-backend-node@1.3.7-next.0 - - @backstage/plugin-signals-backend@0.2.5-next.0 - - @backstage/plugin-signals-node@0.1.16-next.0 - - @backstage/plugin-techdocs-backend@1.11.5-next.0 - -## 0.2.105 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.28.0 - - @backstage/backend-defaults@0.6.0 - - @backstage/plugin-catalog-backend@1.29.0 - - @backstage/integration@1.16.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.6.3 - - @backstage/plugin-auth-backend@0.24.1 - - @backstage/plugin-auth-node@0.5.5 - - @backstage/backend-plugin-api@1.1.0 - - @backstage/plugin-search-backend-module-techdocs@0.3.4 - - @backstage/plugin-search-backend-module-catalog@0.2.6 - - @backstage/plugin-search-backend-module-explore@0.2.6 - - @backstage/plugin-app-backend@0.4.3 - - @backstage/plugin-catalog-node@1.15.0 - - @backstage/plugin-events-node@0.4.6 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.0 - - @backstage/catalog-client@1.9.0 - - @backstage/plugin-events-backend@0.4.0 - - @backstage/plugin-search-backend@1.8.0 - - @backstage/plugin-permission-backend@0.5.52 - - @backstage/plugin-signals-backend@0.2.4 - - @backstage/plugin-permission-node@0.8.6 - - @backstage/plugin-search-backend-node@1.3.6 - - @backstage/plugin-techdocs-backend@1.11.4 - - @backstage/plugin-proxy-backend@0.5.9 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.4 - - @backstage/plugin-kubernetes-backend@0.19.1 - - @backstage/catalog-model@1.7.2 - - @backstage/config@1.3.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3 - - @backstage/plugin-permission-common@0.8.3 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.4 - - @backstage/plugin-search-backend-module-pg@0.5.39 - - @backstage/plugin-signals-node@0.1.15 - -## 0.2.105-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.28.0-next.2 - - @backstage/backend-defaults@0.6.0-next.2 - - @backstage/plugin-catalog-backend@1.29.0-next.2 - - @backstage/backend-plugin-api@1.1.0-next.2 - - @backstage/plugin-permission-node@0.8.6-next.2 - - @backstage/plugin-app-backend@0.4.3-next.2 - - @backstage/plugin-auth-backend@0.24.1-next.2 - - @backstage/plugin-events-backend@0.4.0-next.2 - - @backstage/plugin-kubernetes-backend@0.19.1-next.2 - - @backstage/plugin-proxy-backend@0.5.9-next.2 - - @backstage/plugin-search-backend@1.8.0-next.2 - - @backstage/plugin-search-backend-node@1.3.6-next.2 - - @backstage/plugin-signals-backend@0.2.4-next.2 - - @backstage/plugin-techdocs-backend@1.11.4-next.2 - - @backstage/plugin-auth-node@0.5.5-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.2 - - @backstage/plugin-catalog-node@1.15.0-next.2 - - @backstage/plugin-events-node@0.4.6-next.2 - - @backstage/plugin-permission-backend@0.5.52-next.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.4-next.2 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.0-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.4-next.2 - - @backstage/plugin-search-backend-module-catalog@0.2.6-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.6.3-next.2 - - @backstage/plugin-search-backend-module-explore@0.2.6-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.39-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.2 - - @backstage/plugin-signals-node@0.1.15-next.2 - - @backstage/catalog-client@1.9.0-next.2 - - @backstage/catalog-model@1.7.2-next.0 - - @backstage/config@1.3.1-next.0 - - @backstage/integration@1.16.0-next.1 - - @backstage/plugin-permission-common@0.8.3-next.0 - -## 0.2.105-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-module-elasticsearch@1.6.3-next.1 - - @backstage/plugin-auth-backend@0.24.1-next.1 - - @backstage/plugin-auth-node@0.5.5-next.1 - - @backstage/plugin-catalog-backend@1.29.0-next.1 - - @backstage/backend-defaults@0.6.0-next.1 - - @backstage/plugin-catalog-node@1.15.0-next.1 - - @backstage/catalog-client@1.9.0-next.1 - - @backstage/plugin-events-backend@0.4.0-next.1 - - @backstage/plugin-search-backend@1.8.0-next.1 - - @backstage/plugin-search-backend-node@1.3.6-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.1 - - @backstage/plugin-search-backend-module-explore@0.2.6-next.1 - - @backstage/plugin-permission-backend@0.5.52-next.1 - - @backstage/plugin-techdocs-backend@1.11.4-next.1 - - @backstage/plugin-signals-backend@0.2.4-next.1 - - @backstage/plugin-proxy-backend@0.5.9-next.1 - - @backstage/plugin-app-backend@0.4.3-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.4-next.1 - - @backstage/backend-plugin-api@1.1.0-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.1 - - @backstage/plugin-kubernetes-backend@0.19.1-next.1 - - @backstage/plugin-permission-node@0.8.6-next.1 - - @backstage/plugin-scaffolder-backend@1.28.0-next.1 - - @backstage/plugin-signals-node@0.1.15-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.1 - - @backstage/plugin-search-backend-module-catalog@0.2.6-next.1 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.0-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.4-next.1 - - @backstage/catalog-model@1.7.1 - - @backstage/config@1.3.0 - - @backstage/integration@1.16.0-next.0 - - @backstage/plugin-events-node@0.4.6-next.1 - - @backstage/plugin-permission-common@0.8.2 - - @backstage/plugin-search-backend-module-pg@0.5.39-next.1 - -## 0.2.105-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.6.0-next.0 - - @backstage/integration@1.16.0-next.0 - - @backstage/plugin-scaffolder-backend@1.28.0-next.0 - - @backstage/backend-plugin-api@1.0.3-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.0 - - @backstage/plugin-search-backend-module-catalog@0.2.6-next.0 - - @backstage/plugin-search-backend-module-explore@0.2.6-next.0 - - @backstage/plugin-app-backend@0.4.3-next.0 - - @backstage/plugin-catalog-backend@1.28.1-next.0 - - @backstage/plugin-events-node@0.4.6-next.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.7.0-next.0 - - @backstage/plugin-auth-node@0.5.5-next.0 - - @backstage/plugin-permission-backend@0.5.52-next.0 - - @backstage/plugin-devtools-backend@0.4.3-next.0 - - @backstage/plugin-signals-backend@0.2.4-next.0 - - @backstage/plugin-events-backend@0.3.17-next.0 - - @backstage/plugin-kubernetes-backend@0.19.1-next.0 - - @backstage/catalog-client@1.8.1-next.0 - - @backstage/catalog-model@1.7.1 - - @backstage/config@1.3.0 - - @backstage/plugin-auth-backend@0.24.1-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.0 - - @backstage/plugin-catalog-node@1.14.1-next.0 - - @backstage/plugin-permission-common@0.8.2 - - @backstage/plugin-permission-node@0.8.6-next.0 - - @backstage/plugin-proxy-backend@0.5.9-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.3-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.3-next.0 - - @backstage/plugin-search-backend@1.7.1-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.6.3-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.39-next.0 - - @backstage/plugin-search-backend-node@1.3.6-next.0 - - @backstage/plugin-signals-node@0.1.15-next.0 - - @backstage/plugin-techdocs-backend@1.11.4-next.0 - -## 0.2.104 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-client@1.8.0 - - @backstage/config@1.3.0 - - @backstage/plugin-events-node@0.4.5 - - @backstage/backend-defaults@0.5.3 - - @backstage/plugin-app-backend@0.4.0 - - @backstage/plugin-search-backend-module-catalog@0.2.5 - - @backstage/plugin-scaffolder-backend@1.27.0 - - @backstage/plugin-auth-backend@0.24.0 - - @backstage/plugin-catalog-backend@1.28.0 - - @backstage/plugin-search-backend@1.7.0 - - @backstage/plugin-events-backend@0.3.16 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1 - - @backstage/plugin-kubernetes-backend@0.19.0 - - @backstage/plugin-auth-node@0.5.4 - - @backstage/plugin-search-backend-module-elasticsearch@1.6.2 - - @backstage/plugin-search-backend-module-explore@0.2.5 - - @backstage/plugin-catalog-node@1.14.0 - - @backstage/backend-plugin-api@1.0.2 - - @backstage/plugin-signals-backend@0.2.3 - - @backstage/plugin-search-backend-module-pg@0.5.38 - - @backstage/plugin-search-backend-node@1.3.5 - - @backstage/plugin-permission-common@0.8.2 - - @backstage/plugin-proxy-backend@0.5.8 - - @backstage/plugin-signals-node@0.1.14 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.2 - - @backstage/catalog-model@1.7.1 - - @backstage/integration@1.15.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2 - - @backstage/plugin-devtools-backend@0.4.2 - - @backstage/plugin-permission-backend@0.5.51 - - @backstage/plugin-permission-node@0.8.5 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2 - - @backstage/plugin-search-backend-module-techdocs@0.3.2 - - @backstage/plugin-techdocs-backend@1.11.2 - -## 0.2.104-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-events-node@0.4.5-next.3 - - @backstage/plugin-events-backend@0.3.16-next.3 - - @backstage/plugin-catalog-backend@1.28.0-next.3 - - @backstage/backend-defaults@0.5.3-next.3 - - @backstage/plugin-scaffolder-backend@1.27.0-next.3 - - @backstage/backend-plugin-api@1.0.2-next.2 - - @backstage/catalog-client@1.8.0-next.1 - - @backstage/catalog-model@1.7.0 - - @backstage/config@1.2.0 - - @backstage/integration@1.15.1 - - @backstage/plugin-app-backend@0.3.77-next.2 - - @backstage/plugin-auth-backend@0.24.0-next.2 - - @backstage/plugin-auth-node@0.5.4-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.3 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.2 - - @backstage/plugin-catalog-node@1.14.0-next.2 - - @backstage/plugin-devtools-backend@0.4.2-next.2 - - @backstage/plugin-kubernetes-backend@0.19.0-next.3 - - @backstage/plugin-permission-backend@0.5.51-next.2 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-permission-node@0.8.5-next.2 - - @backstage/plugin-proxy-backend@0.5.8-next.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2-next.3 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.3 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.2-next.3 - - @backstage/plugin-search-backend@1.7.0-next.3 - - @backstage/plugin-search-backend-module-catalog@0.2.5-next.3 - - @backstage/plugin-search-backend-module-elasticsearch@1.6.2-next.3 - - @backstage/plugin-search-backend-module-explore@0.2.5-next.3 - - @backstage/plugin-search-backend-module-pg@0.5.38-next.3 - - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.3 - - @backstage/plugin-search-backend-node@1.3.5-next.3 - - @backstage/plugin-signals-backend@0.2.3-next.3 - - @backstage/plugin-signals-node@0.1.14-next.3 - - @backstage/plugin-techdocs-backend@1.11.2-next.3 - -## 0.2.104-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-client@1.8.0-next.1 - - @backstage/plugin-catalog-backend@1.28.0-next.2 - - @backstage/plugin-search-backend@1.7.0-next.2 - - @backstage/plugin-kubernetes-backend@0.19.0-next.2 - - @backstage/backend-defaults@0.5.3-next.2 - - @backstage/plugin-events-backend@0.3.16-next.2 - - @backstage/plugin-events-node@0.4.5-next.2 - - @backstage/plugin-auth-backend@0.24.0-next.2 - - @backstage/plugin-auth-node@0.5.4-next.2 - - @backstage/plugin-catalog-node@1.14.0-next.2 - - @backstage/plugin-scaffolder-backend@1.27.0-next.2 - - @backstage/plugin-search-backend-module-catalog@0.2.5-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.2 - - @backstage/plugin-techdocs-backend@1.11.2-next.2 - - @backstage/backend-plugin-api@1.0.2-next.2 - - @backstage/catalog-model@1.7.0 - - @backstage/config@1.2.0 - - @backstage/integration@1.15.1 - - @backstage/plugin-app-backend@0.3.77-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.2 - - @backstage/plugin-devtools-backend@0.4.2-next.2 - - @backstage/plugin-permission-backend@0.5.51-next.2 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-permission-node@0.8.5-next.2 - - @backstage/plugin-proxy-backend@0.5.8-next.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2-next.2 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.2-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.6.2-next.2 - - @backstage/plugin-search-backend-module-explore@0.2.5-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.38-next.2 - - @backstage/plugin-search-backend-node@1.3.5-next.2 - - @backstage/plugin-signals-backend@0.2.3-next.2 - - @backstage/plugin-signals-node@0.1.14-next.2 - -## 0.2.104-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.19.0-next.1 - - @backstage/plugin-scaffolder-backend@1.27.0-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.2-next.1 - - @backstage/backend-defaults@0.5.3-next.1 - - @backstage/backend-plugin-api@1.0.2-next.1 - - @backstage/catalog-client@1.8.0-next.0 - - @backstage/catalog-model@1.7.0 - - @backstage/config@1.2.0 - - @backstage/integration@1.15.1 - - @backstage/plugin-app-backend@0.3.77-next.1 - - @backstage/plugin-auth-backend@0.24.0-next.1 - - @backstage/plugin-auth-node@0.5.4-next.1 - - @backstage/plugin-catalog-backend@1.27.2-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.1 - - @backstage/plugin-catalog-node@1.14.0-next.1 - - @backstage/plugin-devtools-backend@0.4.2-next.1 - - @backstage/plugin-events-backend@0.3.16-next.1 - - @backstage/plugin-events-node@0.4.4-next.1 - - @backstage/plugin-permission-backend@0.5.51-next.1 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-permission-node@0.8.5-next.1 - - @backstage/plugin-proxy-backend@0.5.8-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2-next.1 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.1 - - @backstage/plugin-search-backend@1.6.2-next.1 - - @backstage/plugin-search-backend-module-catalog@0.2.5-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.6.2-next.1 - - @backstage/plugin-search-backend-module-explore@0.2.5-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.38-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.1 - - @backstage/plugin-search-backend-node@1.3.5-next.1 - - @backstage/plugin-signals-backend@0.2.3-next.1 - - @backstage/plugin-signals-node@0.1.14-next.1 - - @backstage/plugin-techdocs-backend@1.11.2-next.1 - -## 0.2.104-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-events-node@0.4.3-next.0 - - @backstage/plugin-search-backend-module-catalog@0.2.5-next.0 - - @backstage/plugin-scaffolder-backend@1.26.3-next.0 - - @backstage/plugin-auth-backend@0.24.0-next.0 - - @backstage/plugin-events-backend@0.3.15-next.0 - - @backstage/plugin-auth-node@0.5.4-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.6.2-next.0 - - @backstage/plugin-search-backend-module-explore@0.2.5-next.0 - - @backstage/plugin-catalog-node@1.14.0-next.0 - - @backstage/backend-defaults@0.5.3-next.0 - - @backstage/plugin-signals-backend@0.2.3-next.0 - - @backstage/catalog-client@1.8.0-next.0 - - @backstage/backend-plugin-api@1.0.2-next.0 - - @backstage/catalog-model@1.7.0 - - @backstage/config@1.2.0 - - @backstage/integration@1.15.1 - - @backstage/plugin-app-backend@0.3.77-next.0 - - @backstage/plugin-catalog-backend@1.27.2-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.0 - - @backstage/plugin-devtools-backend@0.4.2-next.0 - - @backstage/plugin-kubernetes-backend@0.18.8-next.0 - - @backstage/plugin-permission-backend@0.5.51-next.0 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-permission-node@0.8.5-next.0 - - @backstage/plugin-proxy-backend@0.5.8-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.2-next.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.1-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.2-next.0 - - @backstage/plugin-search-backend@1.6.2-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.38-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.0 - - @backstage/plugin-search-backend-node@1.3.5-next.0 - - @backstage/plugin-signals-node@0.1.14-next.0 - - @backstage/plugin-techdocs-backend@1.11.2-next.0 - -## 0.2.103 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-module-elasticsearch@1.6.0 - - @backstage/plugin-search-backend-module-catalog@0.2.3 - - @backstage/plugin-search-backend-module-techdocs@0.3.0 - - @backstage/plugin-scaffolder-backend@1.26.0 - - @backstage/backend-defaults@0.5.1 - - @backstage/plugin-search-backend@1.6.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.0 - - @backstage/plugin-auth-node@0.5.3 - - @backstage/plugin-app-backend@0.3.76 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1 - - @backstage/plugin-search-backend-module-explore@0.2.3 - - @backstage/plugin-search-backend-module-pg@0.5.36 - - @backstage/plugin-search-backend-node@1.3.3 - - @backstage/plugin-kubernetes-backend@0.18.7 - - @backstage/plugin-permission-backend@0.5.50 - - @backstage/plugin-devtools-backend@0.4.1 - - @backstage/plugin-techdocs-backend@1.11.0 - - @backstage/plugin-catalog-backend@1.27.0 - - @backstage/plugin-permission-node@0.8.4 - - @backstage/plugin-signals-backend@0.2.1 - - @backstage/plugin-events-backend@0.3.13 - - @backstage/plugin-proxy-backend@0.5.7 - - @backstage/plugin-auth-backend@0.23.1 - - @backstage/plugin-signals-node@0.1.12 - - @backstage/plugin-events-node@0.4.1 - - @backstage/plugin-catalog-node@1.13.1 - - @backstage/integration@1.15.1 - - @backstage/catalog-client@1.7.1 - - @backstage/backend-plugin-api@1.0.1 - - @backstage/catalog-model@1.7.0 - - @backstage/config@1.2.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1 - - @backstage/plugin-permission-common@0.8.1 - -## 0.2.103-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.5.1-next.2 - - @backstage/plugin-scaffolder-backend@1.26.0-next.2 - - @backstage/plugin-search-backend@1.5.18-next.2 - - @backstage/plugin-auth-node@0.5.3-next.1 - - @backstage/plugin-app-backend@0.3.76-next.1 - - @backstage/plugin-catalog-node@1.13.1-next.1 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.6.0-next.2 - - @backstage/integration@1.15.1-next.1 - - @backstage/plugin-catalog-backend@1.26.2-next.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.1-next.2 - - @backstage/plugin-search-backend-module-explore@0.2.3-next.2 - - @backstage/catalog-client@1.7.1-next.0 - - @backstage/plugin-techdocs-backend@1.10.14-next.2 - - @backstage/backend-plugin-api@1.0.1-next.1 - - @backstage/catalog-model@1.7.0 - - @backstage/config@1.2.0 - - @backstage/plugin-auth-backend@0.23.1-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.1 - - @backstage/plugin-devtools-backend@0.4.1-next.1 - - @backstage/plugin-events-backend@0.3.13-next.1 - - @backstage/plugin-events-node@0.4.1-next.1 - - @backstage/plugin-kubernetes-backend@0.18.7-next.1 - - @backstage/plugin-permission-backend@0.5.50-next.1 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-permission-node@0.8.4-next.1 - - @backstage/plugin-proxy-backend@0.5.7-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.1-next.2 - - @backstage/plugin-search-backend-module-catalog@0.2.3-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.5.7-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.36-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.2 - - @backstage/plugin-search-backend-node@1.3.3-next.2 - - @backstage/plugin-signals-backend@0.2.1-next.1 - - @backstage/plugin-signals-node@0.1.12-next.1 - -## 0.2.103-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.26.0-next.1 - - @backstage/plugin-catalog-backend@1.26.2-next.1 - - @backstage/backend-defaults@0.5.1-next.1 - - @backstage/integration@1.15.1-next.0 - - @backstage/backend-plugin-api@1.0.1-next.0 - - @backstage/catalog-client@1.7.0 - - @backstage/catalog-model@1.7.0 - - @backstage/config@1.2.0 - - @backstage/plugin-app-backend@0.3.75-next.0 - - @backstage/plugin-auth-backend@0.23.1-next.0 - - @backstage/plugin-auth-node@0.5.3-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0 - - @backstage/plugin-catalog-node@1.13.1-next.0 - - @backstage/plugin-devtools-backend@0.4.1-next.0 - - @backstage/plugin-events-backend@0.3.13-next.0 - - @backstage/plugin-events-node@0.4.1-next.0 - - @backstage/plugin-kubernetes-backend@0.18.7-next.0 - - @backstage/plugin-permission-backend@0.5.50-next.0 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-permission-node@0.8.4-next.0 - - @backstage/plugin-proxy-backend@0.5.7-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.1-next.1 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.1-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.1-next.1 - - @backstage/plugin-search-backend@1.5.18-next.1 - - @backstage/plugin-search-backend-module-catalog@0.2.3-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.5.7-next.1 - - @backstage/plugin-search-backend-module-explore@0.2.3-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.36-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.1 - - @backstage/plugin-search-backend-node@1.3.3-next.1 - - @backstage/plugin-signals-backend@0.2.1-next.0 - - @backstage/plugin-signals-node@0.1.12-next.0 - - @backstage/plugin-techdocs-backend@1.10.14-next.1 - -## 0.2.103-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-module-elasticsearch@1.5.7-next.0 - - @backstage/plugin-scaffolder-backend@1.26.0-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.1-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.1-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.1-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0 - - @backstage/plugin-search-backend-module-catalog@0.2.3-next.0 - - @backstage/plugin-search-backend-module-explore@0.2.3-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.36-next.0 - - @backstage/plugin-search-backend-node@1.3.3-next.0 - - @backstage/plugin-kubernetes-backend@0.18.7-next.0 - - @backstage/plugin-permission-backend@0.5.50-next.0 - - @backstage/backend-defaults@0.5.1-next.0 - - @backstage/plugin-devtools-backend@0.4.1-next.0 - - @backstage/plugin-techdocs-backend@1.10.14-next.0 - - @backstage/plugin-catalog-backend@1.26.1-next.0 - - @backstage/plugin-permission-node@0.8.4-next.0 - - @backstage/plugin-signals-backend@0.2.1-next.0 - - @backstage/plugin-events-backend@0.3.13-next.0 - - @backstage/plugin-search-backend@1.5.18-next.0 - - @backstage/plugin-proxy-backend@0.5.7-next.0 - - @backstage/plugin-auth-backend@0.23.1-next.0 - - @backstage/plugin-signals-node@0.1.12-next.0 - - @backstage/plugin-app-backend@0.3.75-next.0 - - @backstage/plugin-events-node@0.4.1-next.0 - - @backstage/plugin-auth-node@0.5.3-next.0 - - @backstage/backend-plugin-api@1.0.1-next.0 - - @backstage/catalog-client@1.7.0 - - @backstage/catalog-model@1.7.0 - - @backstage/config@1.2.0 - - @backstage/integration@1.15.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 - - @backstage/plugin-catalog-node@1.13.1-next.0 - - @backstage/plugin-permission-common@0.8.1 - -## 0.2.102 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.5.0 - - @backstage/backend-common@0.25.0 - - @backstage/plugin-kubernetes-backend@0.18.6 - - @backstage/plugin-signals-backend@0.2.0 - - @backstage/plugin-signals-node@0.1.11 - - @backstage/plugin-techdocs-backend@1.10.13 - - @backstage/backend-plugin-api@1.0.0 - - @backstage/plugin-search-backend@1.5.17 - - @backstage/plugin-auth-node@0.5.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.0 - - @backstage/plugin-devtools-backend@0.4.0 - - @backstage/plugin-app-backend@0.3.74 - - @backstage/plugin-scaffolder-backend@1.25.0 - - @backstage/plugin-auth-backend@0.23.0 - - @backstage/catalog-model@1.7.0 - - @backstage/plugin-catalog-backend@1.26.0 - - @backstage/catalog-client@1.7.0 - - @backstage/plugin-search-backend-module-techdocs@0.2.2 - - @backstage/plugin-search-backend-module-catalog@0.2.2 - - @backstage/plugin-search-backend-module-explore@0.2.2 - - @backstage/plugin-permission-node@0.8.3 - - @backstage/plugin-catalog-node@1.13.0 - - @backstage/plugin-events-backend@0.3.12 - - @backstage/plugin-permission-backend@0.5.49 - - @backstage/plugin-proxy-backend@0.5.6 - - @backstage/plugin-search-backend-module-elasticsearch@1.5.6 - - @backstage/plugin-search-backend-module-pg@0.5.35 - - @backstage/integration@1.15.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0 - - @backstage/plugin-events-node@0.4.0 - - @backstage/config@1.2.0 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-search-backend-node@1.3.2 - -## 0.2.102-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.25.0-next.2 - - @backstage/backend-defaults@0.5.0-next.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.0-next.2 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.0-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.0-next.2 - - @backstage/plugin-devtools-backend@0.4.0-next.2 - - @backstage/plugin-scaffolder-backend@1.25.0-next.2 - - @backstage/plugin-auth-node@0.5.2-next.2 - - @backstage/plugin-auth-backend@0.23.0-next.2 - - @backstage/backend-plugin-api@1.0.0-next.2 - - @backstage/catalog-client@1.7.0-next.1 - - @backstage/plugin-catalog-backend@1.26.0-next.2 - - @backstage/plugin-app-backend@0.3.74-next.2 - - @backstage/integration@1.15.0-next.0 - - @backstage/plugin-events-backend@0.3.12-next.2 - - @backstage/plugin-kubernetes-backend@0.18.6-next.2 - - @backstage/plugin-permission-backend@0.5.49-next.2 - - @backstage/plugin-permission-node@0.8.3-next.2 - - @backstage/plugin-search-backend@1.5.17-next.2 - - @backstage/plugin-signals-backend@0.2.0-next.2 - - @backstage/plugin-techdocs-backend@1.10.13-next.2 - - @backstage/plugin-search-backend-module-explore@0.2.2-next.2 - - @backstage/catalog-model@1.6.0 - - @backstage/config@1.2.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0-next.2 - - @backstage/plugin-catalog-node@1.12.7-next.2 - - @backstage/plugin-events-node@0.4.0-next.2 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-proxy-backend@0.5.6-next.2 - - @backstage/plugin-search-backend-module-catalog@0.2.2-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.5.6-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.35-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.2.2-next.2 - - @backstage/plugin-search-backend-node@1.3.2-next.2 - - @backstage/plugin-signals-node@0.1.11-next.2 - -## 0.2.102-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.5.0-next.1 - - @backstage/backend-common@0.25.0-next.1 - - @backstage/plugin-auth-node@0.5.2-next.1 - - @backstage/catalog-client@1.6.7-next.0 - - @backstage/plugin-catalog-backend@1.25.3-next.1 - - @backstage/plugin-scaffolder-backend@1.25.0-next.1 - - @backstage/plugin-kubernetes-backend@0.18.6-next.1 - - @backstage/plugin-techdocs-backend@1.10.13-next.1 - - @backstage/backend-plugin-api@0.9.0-next.1 - - @backstage/catalog-model@1.6.0 - - @backstage/config@1.2.0 - - @backstage/integration@1.14.0 - - @backstage/plugin-app-backend@0.3.74-next.1 - - @backstage/plugin-auth-backend@0.23.0-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0-next.1 - - @backstage/plugin-catalog-node@1.12.7-next.1 - - @backstage/plugin-devtools-backend@0.4.0-next.1 - - @backstage/plugin-events-backend@0.3.12-next.1 - - @backstage/plugin-events-node@0.4.0-next.1 - - @backstage/plugin-permission-backend@0.5.49-next.1 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-permission-node@0.8.3-next.1 - - @backstage/plugin-proxy-backend@0.5.6-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.0-next.1 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.0-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.0-next.1 - - @backstage/plugin-search-backend@1.5.17-next.1 - - @backstage/plugin-search-backend-module-catalog@0.2.2-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.5.6-next.1 - - @backstage/plugin-search-backend-module-explore@0.2.2-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.35-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.2.2-next.1 - - @backstage/plugin-search-backend-node@1.3.2-next.1 - - @backstage/plugin-signals-backend@0.2.0-next.1 - - @backstage/plugin-signals-node@0.1.11-next.1 - -## 0.2.102-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-techdocs-backend@1.10.13-next.0 - - @backstage/backend-plugin-api@0.9.0-next.0 - - @backstage/plugin-search-backend@1.5.17-next.0 - - @backstage/plugin-kubernetes-backend@0.18.6-next.0 - - @backstage/plugin-scaffolder-backend@1.25.0-next.0 - - @backstage/plugin-app-backend@0.3.74-next.0 - - @backstage/plugin-signals-backend@0.2.0-next.0 - - @backstage/backend-defaults@0.5.0-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.2.2-next.0 - - @backstage/plugin-search-backend-module-catalog@0.2.2-next.0 - - @backstage/plugin-search-backend-module-explore@0.2.2-next.0 - - @backstage/plugin-permission-node@0.8.3-next.0 - - @backstage/plugin-auth-backend@0.23.0-next.0 - - @backstage/backend-common@0.25.0-next.0 - - @backstage/plugin-catalog-backend@1.25.3-next.0 - - @backstage/plugin-events-backend@0.3.12-next.0 - - @backstage/plugin-permission-backend@0.5.49-next.0 - - @backstage/plugin-proxy-backend@0.5.6-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.5.6-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.35-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0-next.0 - - @backstage/plugin-devtools-backend@0.4.0-next.0 - - @backstage/plugin-events-node@0.4.0-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.0-next.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.5.0-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.5.0-next.0 - - @backstage/plugin-auth-node@0.5.2-next.0 - - @backstage/plugin-catalog-node@1.12.7-next.0 - - @backstage/plugin-search-backend-node@1.3.2-next.0 - - @backstage/plugin-signals-node@0.1.11-next.0 - - @backstage/catalog-client@1.6.6 - - @backstage/catalog-model@1.6.0 - - @backstage/config@1.2.0 - - @backstage/integration@1.14.0 - - @backstage/plugin-permission-common@0.8.1 - -## 0.2.101 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.4.2 - - @backstage/backend-plugin-api@0.8.0 - - @backstage/backend-common@0.24.0 - - @backstage/plugin-catalog-backend@1.25.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.24 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.40 - - @backstage/plugin-search-backend-node@1.3.0 - - @backstage/plugin-scaffolder-backend@1.24.0 - - @backstage/plugin-techdocs-backend@1.10.10 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-search-backend-module-techdocs@0.2.0 - - @backstage/plugin-search-backend-module-explore@0.2.0 - - @backstage/plugin-kubernetes-backend@0.18.4 - - @backstage/plugin-permission-backend@0.5.47 - - @backstage/plugin-devtools-backend@0.3.9 - - @backstage/plugin-signals-backend@0.1.9 - - @backstage/plugin-proxy-backend@0.5.4 - - @backstage/plugin-auth-backend@0.22.10 - - @backstage/plugin-app-backend@0.3.72 - - @backstage/plugin-auth-node@0.5.0 - - @backstage/plugin-permission-node@0.8.1 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5 - - @backstage/plugin-search-backend-module-catalog@0.2.0 - - @backstage/plugin-search-backend@1.5.15 - - @backstage/plugin-catalog-node@1.12.5 - - @backstage/integration@1.14.0 - - @backstage/plugin-search-backend-module-pg@0.5.33 - - @backstage/catalog-model@1.6.0 - - @backstage/catalog-client@1.6.6 - - @backstage/config@1.2.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10 - - @backstage/plugin-events-backend@0.3.10 - - @backstage/plugin-events-node@0.3.9 - - @backstage/plugin-search-backend-module-elasticsearch@1.5.4 - - @backstage/plugin-signals-node@0.1.9 - -## 0.2.101-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5-next.3 - - @backstage/plugin-techdocs-backend@1.10.10-next.3 - - @backstage/backend-common@0.23.4-next.3 - - @backstage/catalog-model@1.6.0-next.0 - - @backstage/plugin-scaffolder-backend@1.23.1-next.3 - - @backstage/backend-tasks@0.5.28-next.3 - - @backstage/catalog-client@1.6.6-next.0 - - @backstage/config@1.2.0 - - @backstage/integration@1.14.0-next.0 - - @backstage/plugin-app-backend@0.3.72-next.3 - - @backstage/plugin-auth-backend@0.22.10-next.3 - - @backstage/plugin-auth-node@0.5.0-next.3 - - @backstage/plugin-catalog-backend@1.24.1-next.3 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.3 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.3 - - @backstage/plugin-catalog-node@1.12.5-next.3 - - @backstage/plugin-devtools-backend@0.3.9-next.3 - - @backstage/plugin-events-backend@0.3.10-next.3 - - @backstage/plugin-events-node@0.3.9-next.3 - - @backstage/plugin-kubernetes-backend@0.18.4-next.3 - - @backstage/plugin-permission-backend@0.5.47-next.3 - - @backstage/plugin-permission-common@0.8.1-next.1 - - @backstage/plugin-permission-node@0.8.1-next.3 - - @backstage/plugin-proxy-backend@0.5.4-next.3 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.24-next.3 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.40-next.3 - - @backstage/plugin-search-backend@1.5.15-next.3 - - @backstage/plugin-search-backend-module-catalog@0.1.29-next.3 - - @backstage/plugin-search-backend-module-elasticsearch@1.5.4-next.3 - - @backstage/plugin-search-backend-module-explore@0.1.29-next.3 - - @backstage/plugin-search-backend-module-pg@0.5.33-next.3 - - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.3 - - @backstage/plugin-search-backend-node@1.2.28-next.3 - - @backstage/plugin-signals-backend@0.1.9-next.3 - - @backstage/plugin-signals-node@0.1.9-next.3 - -## 0.2.101-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.23.1-next.2 - - @backstage/plugin-permission-common@0.8.1-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.24-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.29-next.2 - - @backstage/plugin-kubernetes-backend@0.18.4-next.2 - - @backstage/plugin-permission-backend@0.5.47-next.2 - - @backstage/plugin-devtools-backend@0.3.9-next.2 - - @backstage/plugin-techdocs-backend@1.10.10-next.2 - - @backstage/backend-common@0.23.4-next.2 - - @backstage/plugin-catalog-backend@1.24.1-next.2 - - @backstage/plugin-signals-backend@0.1.9-next.2 - - @backstage/plugin-proxy-backend@0.5.4-next.2 - - @backstage/plugin-auth-backend@0.22.10-next.2 - - @backstage/plugin-app-backend@0.3.72-next.2 - - @backstage/plugin-auth-node@0.5.0-next.2 - - @backstage/plugin-permission-node@0.8.1-next.2 - - @backstage/plugin-search-backend-node@1.2.28-next.2 - - @backstage/plugin-search-backend@1.5.15-next.2 - - @backstage/backend-tasks@0.5.28-next.2 - - @backstage/plugin-catalog-node@1.12.5-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.2 - - @backstage/plugin-events-backend@0.3.10-next.2 - - @backstage/plugin-events-node@0.3.9-next.2 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.40-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.29-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.5.4-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.33-next.2 - - @backstage/plugin-signals-node@0.1.9-next.2 - - @backstage/integration@1.14.0-next.0 - - @backstage/catalog-client@1.6.5 - - @backstage/catalog-model@1.5.0 - - @backstage/config@1.2.0 - -## 0.2.101-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-techdocs-backend@1.10.10-next.1 - - @backstage/plugin-permission-common@0.8.1-next.0 - - @backstage/plugin-catalog-backend@1.24.1-next.1 - - @backstage/plugin-permission-node@0.8.1-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.29-next.1 - - @backstage/plugin-scaffolder-backend@1.23.1-next.1 - - @backstage/plugin-auth-backend@0.22.10-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.1 - - example-app@0.2.100-next.1 - - @backstage/backend-common@0.23.4-next.1 - - @backstage/integration@1.14.0-next.0 - - @backstage/plugin-app-backend@0.3.72-next.1 - - @backstage/plugin-devtools-backend@0.3.9-next.1 - - @backstage/plugin-proxy-backend@0.5.4-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.1 - - @backstage/plugin-catalog-node@1.12.5-next.1 - - @backstage/plugin-kubernetes-backend@0.18.4-next.1 - - @backstage/plugin-permission-backend@0.5.47-next.1 - - @backstage/plugin-search-backend@1.5.15-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.29-next.1 - - @backstage/plugin-search-backend-node@1.2.28-next.1 - - @backstage/backend-tasks@0.5.28-next.1 - - @backstage/catalog-client@1.6.5 - - @backstage/catalog-model@1.5.0 - - @backstage/config@1.2.0 - - @backstage/plugin-auth-node@0.4.18-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.1 - - @backstage/plugin-events-backend@0.3.10-next.1 - - @backstage/plugin-events-node@0.3.9-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.24-next.1 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.40-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.5.4-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.33-next.1 - - @backstage/plugin-signals-backend@0.1.9-next.1 - - @backstage/plugin-signals-node@0.1.9-next.1 - -## 0.2.101-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.23.4-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.40-next.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5-next.0 - - @backstage/plugin-catalog-backend@1.24.1-next.0 - - @backstage/plugin-catalog-node@1.12.5-next.0 - - @backstage/plugin-devtools-backend@0.3.9-next.0 - - @backstage/integration@1.14.0-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.33-next.0 - - example-app@0.2.100-next.0 - - @backstage/backend-tasks@0.5.28-next.0 - - @backstage/catalog-client@1.6.5 - - @backstage/catalog-model@1.5.0 - - @backstage/config@1.2.0 - - @backstage/plugin-app-backend@0.3.72-next.0 - - @backstage/plugin-auth-backend@0.22.10-next.0 - - @backstage/plugin-auth-node@0.4.18-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.0 - - @backstage/plugin-events-backend@0.3.10-next.0 - - @backstage/plugin-events-node@0.3.9-next.0 - - @backstage/plugin-kubernetes-backend@0.18.4-next.0 - - @backstage/plugin-permission-backend@0.5.47-next.0 - - @backstage/plugin-permission-common@0.8.0 - - @backstage/plugin-permission-node@0.8.1-next.0 - - @backstage/plugin-proxy-backend@0.5.4-next.0 - - @backstage/plugin-scaffolder-backend@1.23.1-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.24-next.0 - - @backstage/plugin-search-backend@1.5.15-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.29-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.5.4-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.29-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.0 - - @backstage/plugin-search-backend-node@1.2.28-next.0 - - @backstage/plugin-signals-backend@0.1.9-next.0 - - @backstage/plugin-signals-node@0.1.9-next.0 - - @backstage/plugin-techdocs-backend@1.10.10-next.0 - -## 0.2.100 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.23.3 - - @backstage/backend-tasks@0.5.27 - - @backstage/plugin-scaffolder-backend@1.23.0 - - @backstage/plugin-permission-common@0.8.0 - - @backstage/plugin-permission-backend@0.5.46 - - @backstage/plugin-permission-node@0.8.0 - - @backstage/plugin-techdocs-backend@1.10.9 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.4 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.39 - - @backstage/integration@1.13.0 - - @backstage/plugin-events-node@0.3.8 - - @backstage/plugin-auth-node@0.4.17 - - @backstage/plugin-search-backend@1.5.14 - - @backstage/plugin-catalog-backend@1.24.0 - - @backstage/plugin-app-backend@0.3.71 - - @backstage/plugin-auth-backend@0.22.9 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.20 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.9 - - @backstage/plugin-catalog-node@1.12.4 - - @backstage/plugin-devtools-backend@0.3.8 - - @backstage/plugin-events-backend@0.3.9 - - @backstage/plugin-kubernetes-backend@0.18.3 - - @backstage/plugin-proxy-backend@0.5.3 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.23 - - @backstage/plugin-search-backend-module-catalog@0.1.28 - - @backstage/plugin-search-backend-module-elasticsearch@1.5.3 - - @backstage/plugin-search-backend-module-explore@0.1.28 - - @backstage/plugin-search-backend-module-pg@0.5.32 - - @backstage/plugin-search-backend-module-techdocs@0.1.27 - - @backstage/plugin-search-backend-node@1.2.27 - - @backstage/plugin-signals-backend@0.1.8 - - @backstage/plugin-signals-node@0.1.8 - - example-app@0.2.99 - - @backstage/catalog-client@1.6.5 - - @backstage/catalog-model@1.5.0 - - @backstage/config@1.2.0 - -## 0.2.100-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.23.0-next.2 - - example-app@0.2.99-next.2 - -## 0.2.100-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-techdocs-backend@1.10.9-next.1 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.4-next.1 - - @backstage/plugin-catalog-backend@1.24.0-next.1 - - @backstage/backend-common@0.23.3-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.27-next.1 - - example-app@0.2.99-next.1 - - @backstage/backend-tasks@0.5.27-next.1 - - @backstage/catalog-client@1.6.5 - - @backstage/catalog-model@1.5.0 - - @backstage/config@1.2.0 - - @backstage/integration@1.13.0-next.0 - - @backstage/plugin-app-backend@0.3.71-next.1 - - @backstage/plugin-auth-backend@0.22.9-next.1 - - @backstage/plugin-auth-node@0.4.17-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.20-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.9-next.1 - - @backstage/plugin-catalog-node@1.12.4-next.1 - - @backstage/plugin-devtools-backend@0.3.8-next.1 - - @backstage/plugin-events-backend@0.3.9-next.1 - - @backstage/plugin-events-node@0.3.8-next.1 - - @backstage/plugin-kubernetes-backend@0.18.3-next.1 - - @backstage/plugin-permission-backend@0.5.46-next.1 - - @backstage/plugin-permission-common@0.7.14 - - @backstage/plugin-permission-node@0.7.33-next.1 - - @backstage/plugin-proxy-backend@0.5.3-next.1 - - @backstage/plugin-scaffolder-backend@1.23.0-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.23-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.39-next.1 - - @backstage/plugin-search-backend@1.5.14-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.28-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.5.3-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.28-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.32-next.1 - - @backstage/plugin-search-backend-node@1.2.27-next.1 - - @backstage/plugin-signals-backend@0.1.8-next.1 - - @backstage/plugin-signals-node@0.1.8-next.1 - -## 0.2.100-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.23.2-next.0 - - @backstage/backend-tasks@0.5.26-next.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.3-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.38-next.0 - - @backstage/integration@1.13.0-next.0 - - @backstage/plugin-scaffolder-backend@1.23.0-next.0 - - @backstage/plugin-app-backend@0.3.70-next.0 - - @backstage/plugin-auth-backend@0.22.8-next.0 - - @backstage/plugin-auth-node@0.4.16-next.0 - - @backstage/plugin-catalog-backend@1.23.2-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.19-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.8-next.0 - - @backstage/plugin-catalog-node@1.12.3-next.0 - - @backstage/plugin-devtools-backend@0.3.7-next.0 - - @backstage/plugin-events-backend@0.3.8-next.0 - - @backstage/plugin-events-node@0.3.7-next.0 - - @backstage/plugin-kubernetes-backend@0.18.2-next.0 - - @backstage/plugin-permission-backend@0.5.45-next.0 - - @backstage/plugin-permission-node@0.7.32-next.0 - - @backstage/plugin-proxy-backend@0.5.2-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.22-next.0 - - @backstage/plugin-search-backend@1.5.13-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.27-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.5.2-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.27-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.31-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.26-next.0 - - @backstage/plugin-search-backend-node@1.2.26-next.0 - - @backstage/plugin-signals-backend@0.1.7-next.0 - - @backstage/plugin-signals-node@0.1.7-next.0 - - @backstage/plugin-techdocs-backend@1.10.8-next.0 - - example-app@0.2.99-next.0 - - @backstage/catalog-client@1.6.5 - - @backstage/catalog-model@1.5.0 - - @backstage/config@1.2.0 - - @backstage/plugin-permission-common@0.7.14 - -## 0.2.99 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.23.0 - - @backstage/backend-tasks@0.5.24 - - @backstage/plugin-auth-node@0.4.14 - - @backstage/plugin-auth-backend@0.22.6 - - @backstage/plugin-techdocs-backend@1.10.6 - - @backstage/plugin-devtools-backend@0.3.5 - - @backstage/plugin-catalog-backend@1.23.0 - - @backstage/plugin-search-backend@1.5.10 - - @backstage/plugin-proxy-backend@0.5.0 - - @backstage/plugin-app-backend@0.3.68 - - @backstage/integration@1.12.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.20 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.17 - - @backstage/plugin-search-backend-module-elasticsearch@1.5.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.6 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.36 - - @backstage/plugin-search-backend-module-techdocs@0.1.24 - - @backstage/plugin-search-backend-module-catalog@0.1.25 - - @backstage/plugin-search-backend-module-explore@0.1.25 - - @backstage/plugin-search-backend-module-pg@0.5.28 - - @backstage/plugin-kubernetes-backend@0.18.0 - - @backstage/plugin-permission-backend@0.5.43 - - @backstage/plugin-scaffolder-backend@1.22.9 - - @backstage/plugin-signals-backend@0.1.5 - - @backstage/plugin-events-backend@0.3.6 - - @backstage/plugin-catalog-node@1.12.1 - - @backstage/plugin-search-backend-node@1.2.24 - - @backstage/plugin-events-node@0.3.5 - - @backstage/plugin-permission-node@0.7.30 - - @backstage/plugin-permission-common@0.7.14 - - @backstage/plugin-signals-node@0.1.5 - - example-app@0.2.98 - - @backstage/catalog-client@1.6.5 - - @backstage/catalog-model@1.5.0 - - @backstage/config@1.2.0 - -## 0.2.99-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-node@0.4.14-next.3 - - @backstage/integration@1.12.0-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.20-next.3 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.17-next.3 - - @backstage/plugin-search-backend-module-elasticsearch@1.4.2-next.3 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.6-next.3 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.1-next.3 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.36-next.3 - - @backstage/plugin-search-backend-module-techdocs@0.1.24-next.3 - - @backstage/plugin-search-backend-module-catalog@0.1.25-next.3 - - @backstage/plugin-search-backend-module-explore@0.1.25-next.3 - - @backstage/plugin-search-backend-module-pg@0.5.28-next.3 - - @backstage/plugin-search-backend-node@1.2.24-next.3 - - @backstage/plugin-kubernetes-backend@0.18.0-next.3 - - @backstage/plugin-permission-backend@0.5.43-next.3 - - @backstage/plugin-scaffolder-backend@1.22.8-next.3 - - @backstage/plugin-permission-common@0.7.14-next.0 - - @backstage/plugin-devtools-backend@0.3.5-next.3 - - @backstage/plugin-techdocs-backend@1.10.6-next.3 - - @backstage/plugin-catalog-backend@1.23.0-next.3 - - @backstage/plugin-permission-node@0.7.30-next.3 - - @backstage/plugin-signals-backend@0.1.5-next.3 - - @backstage/plugin-events-backend@0.3.6-next.3 - - @backstage/plugin-search-backend@1.5.10-next.3 - - @backstage/plugin-proxy-backend@0.5.0-next.3 - - @backstage/plugin-auth-backend@0.22.6-next.3 - - @backstage/plugin-catalog-node@1.12.1-next.2 - - @backstage/plugin-signals-node@0.1.5-next.3 - - @backstage/plugin-app-backend@0.3.68-next.3 - - @backstage/plugin-events-node@0.3.5-next.2 - - @backstage/backend-tasks@0.5.24-next.3 - - @backstage/backend-common@0.23.0-next.3 - - example-app@0.2.98-next.3 - - @backstage/catalog-client@1.6.5 - - @backstage/catalog-model@1.5.0 - - @backstage/config@1.2.0 - -## 0.2.99-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-techdocs-backend@1.10.6-next.2 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.1-next.2 - - @backstage/backend-common@0.23.0-next.2 - - @backstage/integration@1.12.0-next.0 - - @backstage/plugin-permission-node@0.7.30-next.2 - - example-app@0.2.98-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.24-next.2 - - @backstage/plugin-scaffolder-backend@1.22.8-next.2 - - @backstage/backend-tasks@0.5.24-next.2 - - @backstage/plugin-app-backend@0.3.68-next.2 - - @backstage/plugin-auth-backend@0.22.6-next.2 - - @backstage/plugin-auth-node@0.4.14-next.2 - - @backstage/plugin-catalog-backend@1.23.0-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.17-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.6-next.2 - - @backstage/plugin-catalog-node@1.12.1-next.1 - - @backstage/plugin-devtools-backend@0.3.5-next.2 - - @backstage/plugin-events-backend@0.3.6-next.2 - - @backstage/plugin-events-node@0.3.5-next.1 - - @backstage/plugin-kubernetes-backend@0.18.0-next.2 - - @backstage/plugin-permission-backend@0.5.43-next.2 - - @backstage/plugin-proxy-backend@0.5.0-next.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.20-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.36-next.2 - - @backstage/plugin-search-backend@1.5.10-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.25-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.4.2-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.25-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.28-next.2 - - @backstage/plugin-search-backend-node@1.2.24-next.2 - - @backstage/plugin-signals-backend@0.1.5-next.2 - - @backstage/plugin-signals-node@0.1.5-next.2 - - @backstage/catalog-client@1.6.5 - - @backstage/catalog-model@1.5.0 - - @backstage/config@1.2.0 - - @backstage/plugin-permission-common@0.7.13 - -## 0.2.99-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-tasks@0.5.24-next.1 - - @backstage/plugin-permission-node@0.7.30-next.1 - - @backstage/plugin-search-backend@1.5.10-next.1 - - @backstage/backend-common@0.23.0-next.1 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.1-next.1 - - @backstage/plugin-kubernetes-backend@0.18.0-next.1 - - @backstage/plugin-catalog-backend@1.23.0-next.1 - - @backstage/plugin-scaffolder-backend@1.22.8-next.1 - - @backstage/plugin-app-backend@0.3.68-next.1 - - @backstage/plugin-auth-backend@0.22.6-next.1 - - @backstage/plugin-auth-node@0.4.14-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.17-next.1 - - @backstage/plugin-catalog-node@1.12.1-next.0 - - @backstage/plugin-devtools-backend@0.3.5-next.1 - - @backstage/plugin-events-backend@0.3.6-next.1 - - @backstage/plugin-events-node@0.3.5-next.0 - - @backstage/plugin-permission-backend@0.5.43-next.1 - - @backstage/plugin-proxy-backend@0.5.0-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.20-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.36-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.25-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.4.2-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.25-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.28-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.24-next.1 - - @backstage/plugin-search-backend-node@1.2.24-next.1 - - @backstage/plugin-signals-backend@0.1.5-next.1 - - @backstage/plugin-techdocs-backend@1.10.6-next.1 - - example-app@0.2.98-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.6-next.1 - - @backstage/plugin-signals-node@0.1.5-next.1 - -## 0.2.99-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-tasks@0.5.24-next.0 - - @backstage/backend-common@0.22.1-next.0 - - @backstage/plugin-devtools-backend@0.3.5-next.0 - - @backstage/plugin-techdocs-backend@1.10.6-next.0 - - @backstage/plugin-catalog-backend@1.23.0-next.0 - - @backstage/plugin-search-backend@1.5.10-next.0 - - @backstage/plugin-proxy-backend@0.5.0-next.0 - - @backstage/plugin-auth-backend@0.22.6-next.0 - - @backstage/plugin-app-backend@0.3.68-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.4.2-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.28-next.0 - - @backstage/plugin-search-backend-node@1.2.24-next.0 - - @backstage/plugin-signals-backend@0.1.5-next.0 - - @backstage/plugin-events-node@0.3.5-next.0 - - @backstage/plugin-scaffolder-backend@1.22.8-next.0 - - @backstage/plugin-kubernetes-backend@0.17.2-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.25-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.25-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.24-next.0 - - example-app@0.2.98-next.0 - - @backstage/plugin-auth-node@0.4.14-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.6-next.0 - - @backstage/plugin-events-backend@0.3.6-next.0 - - @backstage/plugin-permission-backend@0.5.43-next.0 - - @backstage/plugin-permission-node@0.7.30-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.20-next.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.1-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.36-next.0 - - @backstage/plugin-signals-node@0.1.5-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.17-next.0 - - @backstage/plugin-catalog-node@1.12.1-next.0 - - @backstage/catalog-client@1.6.5 - - @backstage/catalog-model@1.5.0 - - @backstage/config@1.2.0 - - @backstage/integration@1.11.0 - - @backstage/plugin-permission-common@0.7.13 - -## 0.2.98 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-module-elasticsearch@1.4.1 - - @backstage/plugin-catalog-node@1.12.0 - - @backstage/plugin-scaffolder-backend@1.22.6 - - @backstage/plugin-catalog-backend@1.22.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.5 - - @backstage/plugin-search-backend-module-catalog@0.1.24 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.0 - - @backstage/catalog-model@1.5.0 - - @backstage/backend-common@0.22.0 - - @backstage/plugin-search-backend-module-pg@0.5.27 - - @backstage/backend-tasks@0.5.23 - - @backstage/plugin-auth-backend@0.22.5 - - @backstage/plugin-app-backend@0.3.66 - - @backstage/plugin-devtools-backend@0.3.4 - - @backstage/plugin-signals-backend@0.1.4 - - @backstage/plugin-search-backend-node@1.2.22 - - @backstage/plugin-search-backend@1.5.8 - - @backstage/plugin-techdocs-backend@1.10.5 - - @backstage/plugin-events-node@0.3.4 - - @backstage/plugin-search-backend-module-explore@0.1.24 - - @backstage/plugin-auth-node@0.4.13 - - @backstage/integration@1.11.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.23 - - example-app@0.2.97 - - @backstage/catalog-client@1.6.5 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.16 - - @backstage/plugin-events-backend@0.3.5 - - @backstage/plugin-kubernetes-backend@0.17.1 - - @backstage/plugin-permission-backend@0.5.42 - - @backstage/plugin-permission-node@0.7.29 - - @backstage/plugin-proxy-backend@0.4.16 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.19 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.35 - - @backstage/plugin-signals-node@0.1.4 - -## 0.2.98-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-node@1.12.0-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.5-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.24-next.2 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.4.0-next.2 - - @backstage/plugin-catalog-backend@1.22.0-next.2 - - @backstage/backend-common@0.22.0-next.2 - - @backstage/plugin-devtools-backend@0.3.4-next.2 - - @backstage/plugin-scaffolder-backend@1.22.6-next.2 - - @backstage/plugin-signals-backend@0.1.4-next.2 - - @backstage/plugin-auth-backend@0.22.5-next.2 - - @backstage/plugin-techdocs-backend@1.10.5-next.2 - - @backstage/plugin-events-node@0.3.4-next.2 - - @backstage/integration@1.11.0-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.23-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.16-next.2 - - @backstage/plugin-kubernetes-backend@0.17.1-next.2 - - @backstage/plugin-search-backend@1.5.8-next.2 - - example-app@0.2.97-next.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.19-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.35-next.2 - -## 0.2.98-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.5-next.1 - - @backstage/backend-common@0.22.0-next.1 - - @backstage/plugin-catalog-backend@1.22.0-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.16-next.1 - - @backstage/plugin-scaffolder-backend@1.22.5-next.1 - - example-app@0.2.97-next.1 - - @backstage/plugin-search-backend@1.5.8-next.1 - - @backstage/plugin-app-backend@0.3.66-next.1 - - @backstage/plugin-kubernetes-backend@0.17.1-next.1 - - @backstage/backend-tasks@0.5.23-next.1 - - @backstage/plugin-auth-backend@0.22.5-next.1 - - @backstage/plugin-auth-node@0.4.13-next.1 - - @backstage/plugin-devtools-backend@0.3.4-next.1 - - @backstage/plugin-events-backend@0.3.5-next.1 - - @backstage/plugin-events-node@0.3.4-next.1 - - @backstage/plugin-permission-backend@0.5.42-next.1 - - @backstage/plugin-permission-node@0.7.29-next.1 - - @backstage/plugin-proxy-backend@0.4.16-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.19-next.1 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.3.4-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.35-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.24-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.4.1-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.24-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.27-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.23-next.1 - - @backstage/plugin-search-backend-node@1.2.22-next.1 - - @backstage/plugin-signals-backend@0.1.4-next.1 - - @backstage/plugin-signals-node@0.1.4-next.1 - - @backstage/plugin-techdocs-backend@1.10.5-next.1 - - @backstage/plugin-catalog-node@1.11.2-next.1 - -## 0.2.98-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.22.0-next.0 - - @backstage/plugin-scaffolder-backend@1.22.5-next.0 - - @backstage/catalog-model@1.5.0-next.0 - - @backstage/plugin-search-backend-node@1.2.22-next.0 - - @backstage/plugin-search-backend@1.5.8-next.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.3.4-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.23-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.23-next.0 - - @backstage/plugin-auth-backend@0.22.5-next.0 - - @backstage/plugin-auth-node@0.4.13-next.0 - - @backstage/backend-common@0.21.8-next.0 - - example-app@0.2.97-next.0 - - @backstage/plugin-app-backend@0.3.66-next.0 - - @backstage/plugin-kubernetes-backend@0.17.1-next.0 - - @backstage/catalog-client@1.6.5-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.16-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.5-next.0 - - @backstage/plugin-catalog-node@1.11.2-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.23-next.0 - - @backstage/plugin-techdocs-backend@1.10.5-next.0 - - @backstage/backend-tasks@0.5.23-next.0 - - @backstage/config@1.2.0 - - @backstage/integration@1.10.0 - - @backstage/plugin-devtools-backend@0.3.4-next.0 - - @backstage/plugin-events-backend@0.3.5-next.0 - - @backstage/plugin-events-node@0.3.4-next.0 - - @backstage/plugin-permission-backend@0.5.42-next.0 - - @backstage/plugin-permission-common@0.7.13 - - @backstage/plugin-permission-node@0.7.29-next.0 - - @backstage/plugin-proxy-backend@0.4.16-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.19-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.35-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.4.1-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.27-next.0 - - @backstage/plugin-signals-backend@0.1.4-next.0 - - @backstage/plugin-signals-node@0.1.4-next.0 - -## 0.2.97 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-module-pg@0.5.26 - - @backstage/plugin-badges-backend@0.4.0 - - @backstage/plugin-kubernetes-backend@0.17.0 - - @backstage/backend-common@0.21.7 - - @backstage/plugin-azure-devops-backend@0.6.4 - - @backstage/plugin-techdocs-backend@1.10.4 - - @backstage/plugin-permission-node@0.7.28 - - @backstage/plugin-auth-backend@0.22.4 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.3.3 - - @backstage/plugin-catalog-backend@1.21.1 - - @backstage/plugin-events-backend@0.3.4 - - @backstage/plugin-tech-insights-node@0.6.0 - - @backstage/plugin-search-backend@1.5.7 - - @backstage/plugin-todo-backend@0.3.16 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.49 - - @backstage/plugin-search-backend-module-techdocs@0.1.22 - - @backstage/plugin-search-backend-module-explore@0.1.21 - - @backstage/plugin-entity-feedback-backend@0.2.14 - - @backstage/plugin-code-coverage-backend@0.2.31 - - @backstage/plugin-tech-insights-backend@0.5.31 - - @backstage/plugin-search-backend-node@1.2.21 - - @backstage/plugin-lighthouse-backend@0.4.10 - - @backstage/plugin-permission-backend@0.5.41 - - @backstage/plugin-devtools-backend@0.3.3 - - @backstage/plugin-linguist-backend@0.5.15 - - @backstage/plugin-playlist-backend@0.3.21 - - @backstage/plugin-explore-backend@0.0.27 - - @backstage/plugin-jenkins-backend@0.4.4 - - @backstage/backend-tasks@0.5.22 - - @backstage/plugin-kafka-backend@0.3.15 - - @backstage/plugin-nomad-backend@0.1.19 - - @backstage/plugin-adr-backend@0.4.14 - - @backstage/plugin-app-backend@0.3.65 - - @backstage/plugin-auth-node@0.4.12 - - @backstage/plugin-signals-backend@0.1.3 - - @backstage/plugin-proxy-backend@0.4.15 - - @backstage/plugin-scaffolder-backend@1.22.4 - - @backstage/catalog-client@1.6.4 - - @backstage/integration@1.10.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.4.0 - - example-app@0.2.96 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.4 - - @backstage/plugin-events-node@0.3.3 - - @backstage/plugin-rollbar-backend@0.1.62 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.18 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.34 - - @backstage/plugin-search-backend-module-catalog@0.1.22 - - @backstage/plugin-signals-node@0.1.3 - - @backstage/plugin-catalog-node@1.11.1 - - @backstage/catalog-model@1.4.5 - - @backstage/config@1.2.0 - - @backstage/plugin-azure-sites-common@0.1.3 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.15 - - @backstage/plugin-permission-common@0.7.13 - -## 0.2.97-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.17.0-next.1 - - @backstage/backend-common@0.21.7-next.1 - - @backstage/plugin-azure-devops-backend@0.6.4-next.1 - - @backstage/plugin-techdocs-backend@1.10.4-next.1 - - @backstage/plugin-events-backend@0.3.4-next.1 - - @backstage/plugin-auth-backend@0.22.4-next.1 - - @backstage/plugin-auth-node@0.4.12-next.1 - - @backstage/plugin-proxy-backend@0.4.15-next.1 - - @backstage/plugin-scaffolder-backend@1.22.4-next.1 - - @backstage/plugin-catalog-backend@1.21.1-next.1 - - @backstage/catalog-client@1.6.4-next.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.3.3-next.1 - - @backstage/plugin-app-backend@0.3.65-next.1 - - @backstage/backend-tasks@0.5.22-next.1 - - @backstage/plugin-adr-backend@0.4.14-next.1 - - @backstage/plugin-badges-backend@0.3.14-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.4-next.1 - - @backstage/plugin-code-coverage-backend@0.2.31-next.1 - - @backstage/plugin-devtools-backend@0.3.3-next.1 - - @backstage/plugin-entity-feedback-backend@0.2.14-next.1 - - @backstage/plugin-events-node@0.3.3-next.1 - - @backstage/plugin-explore-backend@0.0.27-next.1 - - @backstage/plugin-jenkins-backend@0.4.4-next.1 - - @backstage/plugin-kafka-backend@0.3.15-next.1 - - @backstage/plugin-lighthouse-backend@0.4.10-next.1 - - @backstage/plugin-linguist-backend@0.5.15-next.1 - - @backstage/plugin-nomad-backend@0.1.19-next.1 - - @backstage/plugin-permission-backend@0.5.41-next.1 - - @backstage/plugin-permission-node@0.7.28-next.1 - - @backstage/plugin-playlist-backend@0.3.21-next.1 - - @backstage/plugin-rollbar-backend@0.1.62-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.18-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.34-next.1 - - @backstage/plugin-search-backend@1.5.7-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.22-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.20-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.21-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.26-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.22-next.1 - - @backstage/plugin-search-backend-node@1.2.21-next.1 - - @backstage/plugin-signals-backend@0.1.3-next.1 - - @backstage/plugin-signals-node@0.1.3-next.1 - - @backstage/plugin-tech-insights-backend@0.5.31-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.49-next.1 - - @backstage/plugin-tech-insights-node@0.5.3-next.1 - - @backstage/plugin-todo-backend@0.3.16-next.1 - - example-app@0.2.96-next.1 - - @backstage/catalog-model@1.4.5 - - @backstage/config@1.2.0 - - @backstage/integration@1.10.0-next.0 - - @backstage/plugin-azure-sites-common@0.1.3 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.15-next.1 - - @backstage/plugin-catalog-node@1.11.1-next.1 - - @backstage/plugin-permission-common@0.7.13 - -## 0.2.97-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-techdocs-backend@1.10.4-next.0 - - @backstage/plugin-catalog-backend@1.21.1-next.0 - - @backstage/plugin-kubernetes-backend@0.16.4-next.0 - - @backstage/plugin-signals-backend@0.1.3-next.0 - - @backstage/backend-common@0.21.7-next.0 - - @backstage/integration@1.10.0-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.22-next.0 - - @backstage/plugin-scaffolder-backend@1.22.4-next.0 - - @backstage/plugin-app-backend@0.3.65-next.0 - - example-app@0.2.96-next.0 - - @backstage/backend-tasks@0.5.22-next.0 - - @backstage/catalog-client@1.6.3 - - @backstage/catalog-model@1.4.5 - - @backstage/config@1.2.0 - - @backstage/plugin-adr-backend@0.4.14-next.0 - - @backstage/plugin-auth-backend@0.22.4-next.0 - - @backstage/plugin-auth-node@0.4.12-next.0 - - @backstage/plugin-azure-devops-backend@0.6.4-next.0 - - @backstage/plugin-azure-sites-common@0.1.3 - - @backstage/plugin-badges-backend@0.3.14-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.15-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.4-next.0 - - @backstage/plugin-catalog-node@1.11.1-next.0 - - @backstage/plugin-code-coverage-backend@0.2.31-next.0 - - @backstage/plugin-devtools-backend@0.3.3-next.0 - - @backstage/plugin-entity-feedback-backend@0.2.14-next.0 - - @backstage/plugin-events-backend@0.3.3-next.0 - - @backstage/plugin-events-node@0.3.3-next.0 - - @backstage/plugin-explore-backend@0.0.27-next.0 - - @backstage/plugin-jenkins-backend@0.4.4-next.0 - - @backstage/plugin-kafka-backend@0.3.15-next.0 - - @backstage/plugin-lighthouse-backend@0.4.10-next.0 - - @backstage/plugin-linguist-backend@0.5.15-next.0 - - @backstage/plugin-nomad-backend@0.1.19-next.0 - - @backstage/plugin-permission-backend@0.5.41-next.0 - - @backstage/plugin-permission-common@0.7.13 - - @backstage/plugin-permission-node@0.7.28-next.0 - - @backstage/plugin-playlist-backend@0.3.21-next.0 - - @backstage/plugin-proxy-backend@0.4.15-next.0 - - @backstage/plugin-rollbar-backend@0.1.62-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.18-next.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.3.3-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.34-next.0 - - @backstage/plugin-search-backend@1.5.7-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.22-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.20-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.21-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.26-next.0 - - @backstage/plugin-search-backend-node@1.2.21-next.0 - - @backstage/plugin-signals-node@0.1.3-next.0 - - @backstage/plugin-tech-insights-backend@0.5.31-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.49-next.0 - - @backstage/plugin-tech-insights-node@0.5.3-next.0 - - @backstage/plugin-todo-backend@0.3.16-next.0 - -## 0.2.96 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.21.0 - - @backstage/plugin-catalog-node@1.11.0 - - @backstage/plugin-kubernetes-backend@0.16.3 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.3 - - @backstage/plugin-permission-backend@0.5.40 - - @backstage/plugin-proxy-backend@0.4.14 - - @backstage/plugin-scaffolder-backend@1.22.3 - - @backstage/catalog-client@1.6.3 - - @backstage/plugin-jenkins-backend@0.4.3 - - @backstage/plugin-auth-backend@0.22.3 - - @backstage/plugin-auth-node@0.4.11 - - @backstage/backend-common@0.21.6 - - @backstage/plugin-azure-devops-backend@0.6.3 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.14 - - @backstage/plugin-lighthouse-backend@0.4.9 - - @backstage/plugin-linguist-backend@0.5.14 - - @backstage/plugin-search-backend-module-catalog@0.1.21 - - @backstage/plugin-search-backend-module-techdocs@0.1.21 - - @backstage/plugin-todo-backend@0.3.15 - - example-app@0.2.95 - - @backstage/plugin-app-backend@0.3.64 - - @backstage/plugin-adr-backend@0.4.13 - - @backstage/plugin-badges-backend@0.3.13 - - @backstage/plugin-code-coverage-backend@0.2.30 - - @backstage/plugin-entity-feedback-backend@0.2.13 - - @backstage/plugin-playlist-backend@0.3.20 - - @backstage/plugin-tech-insights-backend@0.5.30 - - @backstage/plugin-techdocs-backend@1.10.3 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.3.2 - - @backstage/plugin-permission-node@0.7.27 - - @backstage/plugin-signals-backend@0.1.2 - - @backstage/plugin-signals-node@0.1.2 - - @backstage/backend-tasks@0.5.21 - - @backstage/plugin-devtools-backend@0.3.2 - - @backstage/plugin-events-backend@0.3.2 - - @backstage/plugin-events-node@0.3.2 - - @backstage/plugin-explore-backend@0.0.26 - - @backstage/plugin-kafka-backend@0.3.14 - - @backstage/plugin-nomad-backend@0.1.18 - - @backstage/plugin-rollbar-backend@0.1.61 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.17 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.33 - - @backstage/plugin-search-backend@1.5.6 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.19 - - @backstage/plugin-search-backend-module-explore@0.1.20 - - @backstage/plugin-search-backend-module-pg@0.5.25 - - @backstage/plugin-search-backend-node@1.2.20 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.48 - - @backstage/plugin-tech-insights-node@0.5.2 - - @backstage/catalog-model@1.4.5 - - @backstage/config@1.2.0 - - @backstage/integration@1.9.1 - - @backstage/plugin-azure-sites-common@0.1.3 - - @backstage/plugin-permission-common@0.7.13 - -## 0.2.95 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.20.0 - - @backstage/plugin-catalog-node@1.10.0 - - @backstage/plugin-kubernetes-backend@0.16.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.2 - - @backstage/plugin-permission-backend@0.5.39 - - @backstage/catalog-client@1.6.2 - - @backstage/backend-common@0.21.5 - - @backstage/plugin-auth-backend@0.22.2 - - @backstage/plugin-azure-devops-backend@0.6.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.13 - - @backstage/plugin-jenkins-backend@0.4.2 - - @backstage/plugin-lighthouse-backend@0.4.8 - - @backstage/plugin-linguist-backend@0.5.13 - - @backstage/plugin-scaffolder-backend@1.22.2 - - @backstage/plugin-search-backend-module-catalog@0.1.20 - - @backstage/plugin-search-backend-module-techdocs@0.1.20 - - @backstage/plugin-todo-backend@0.3.14 - - example-app@0.2.94 - - @backstage/plugin-app-backend@0.3.63 - - @backstage/plugin-adr-backend@0.4.12 - - @backstage/plugin-auth-node@0.4.10 - - @backstage/plugin-badges-backend@0.3.12 - - @backstage/plugin-code-coverage-backend@0.2.29 - - @backstage/plugin-entity-feedback-backend@0.2.12 - - @backstage/plugin-playlist-backend@0.3.19 - - @backstage/plugin-tech-insights-backend@0.5.29 - - @backstage/plugin-techdocs-backend@1.10.2 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.3.1 - - @backstage/backend-tasks@0.5.20 - - @backstage/plugin-devtools-backend@0.3.1 - - @backstage/plugin-events-backend@0.3.1 - - @backstage/plugin-events-node@0.3.1 - - @backstage/plugin-explore-backend@0.0.25 - - @backstage/plugin-kafka-backend@0.3.13 - - @backstage/plugin-nomad-backend@0.1.17 - - @backstage/plugin-permission-node@0.7.26 - - @backstage/plugin-proxy-backend@0.4.13 - - @backstage/plugin-rollbar-backend@0.1.60 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.16 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.32 - - @backstage/plugin-search-backend@1.5.5 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.18 - - @backstage/plugin-search-backend-module-explore@0.1.19 - - @backstage/plugin-search-backend-module-pg@0.5.24 - - @backstage/plugin-search-backend-node@1.2.19 - - @backstage/plugin-signals-backend@0.1.1 - - @backstage/plugin-signals-node@0.1.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.47 - - @backstage/plugin-tech-insights-node@0.5.1 - - @backstage/catalog-model@1.4.5 - - @backstage/config@1.2.0 - - @backstage/integration@1.9.1 - - @backstage/plugin-azure-sites-common@0.1.3 - - @backstage/plugin-permission-common@0.7.13 - -## 0.2.94 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.19.0 - - @backstage/plugin-catalog-node@1.9.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.1 - - @backstage/plugin-permission-backend@0.5.38 - - @backstage/plugin-auth-backend@0.22.1 - - @backstage/plugin-azure-devops-backend@0.6.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.12 - - @backstage/plugin-jenkins-backend@0.4.1 - - @backstage/plugin-kubernetes-backend@0.16.1 - - @backstage/plugin-lighthouse-backend@0.4.7 - - @backstage/plugin-linguist-backend@0.5.12 - - @backstage/plugin-scaffolder-backend@1.22.1 - - @backstage/plugin-search-backend-module-catalog@0.1.19 - - @backstage/plugin-search-backend-module-techdocs@0.1.19 - - @backstage/plugin-todo-backend@0.3.13 - - @backstage/plugin-techdocs-backend@1.10.1 - -## 0.2.93 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-events-backend@0.3.0 - - @backstage/plugin-events-node@0.3.0 - - @backstage/plugin-scaffolder-backend@1.22.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.31 - - @backstage/plugin-linguist-backend@0.5.11 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.0 - - @backstage/plugin-catalog-backend@1.18.0 - - @backstage/plugin-code-coverage-backend@0.2.28 - - @backstage/plugin-devtools-backend@0.3.0 - - @backstage/plugin-jenkins-backend@0.4.0 - - @backstage/plugin-search-backend@1.5.4 - - @backstage/backend-common@0.21.4 - - @backstage/integration@1.9.1 - - @backstage/plugin-auth-node@0.4.9 - - @backstage/plugin-lighthouse-backend@0.4.6 - - @backstage/config@1.2.0 - - @backstage/plugin-azure-devops-backend@0.6.0 - - @backstage/plugin-permission-backend@0.5.37 - - @backstage/plugin-signals-backend@0.1.0 - - @backstage/plugin-nomad-backend@0.1.16 - - @backstage/plugin-entity-feedback-backend@0.2.11 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.17 - - @backstage/plugin-search-backend-module-pg@0.5.23 - - @backstage/plugin-signals-node@0.1.0 - - @backstage/plugin-playlist-backend@0.3.18 - - @backstage/plugin-auth-backend@0.22.0 - - @backstage/plugin-techdocs-backend@1.10.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.15 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.3.0 - - @backstage/plugin-permission-common@0.7.13 - - @backstage/plugin-search-backend-module-techdocs@0.1.18 - - @backstage/plugin-search-backend-module-catalog@0.1.18 - - @backstage/plugin-search-backend-module-explore@0.1.18 - - @backstage/plugin-catalog-node@1.8.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.46 - - @backstage/catalog-client@1.6.1 - - @backstage/plugin-kubernetes-backend@0.16.0 - - @backstage/plugin-adr-backend@0.4.11 - - @backstage/plugin-proxy-backend@0.4.12 - - @backstage/backend-tasks@0.5.19 - - @backstage/plugin-search-backend-node@1.2.18 - - @backstage/plugin-tech-insights-backend@0.5.28 - - @backstage/plugin-app-backend@0.3.62 - - @backstage/plugin-permission-node@0.7.25 - - @backstage/plugin-todo-backend@0.3.12 - - @backstage/plugin-tech-insights-node@0.5.0 - - @backstage/plugin-badges-backend@0.3.11 - - example-app@0.2.93 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.11 - - @backstage/plugin-explore-backend@0.0.24 - - @backstage/plugin-rollbar-backend@0.1.59 - - @backstage/plugin-kafka-backend@0.3.12 - - @backstage/catalog-model@1.4.5 - - @backstage/plugin-azure-sites-common@0.1.3 - -## 0.2.93-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.22.0-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.31-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.11-next.2 - - @backstage/plugin-catalog-backend@1.18.0-next.2 - - @backstage/plugin-code-coverage-backend@0.2.28-next.2 - - @backstage/plugin-devtools-backend@0.3.0-next.2 - - @backstage/plugin-jenkins-backend@0.4.0-next.2 - - @backstage/plugin-search-backend@1.5.4-next.2 - - @backstage/integration@1.9.1-next.2 - - @backstage/plugin-techdocs-backend@1.10.0-next.2 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.3.0-next.2 - - @backstage/plugin-signals-node@0.1.0-next.2 - - @backstage/catalog-client@1.6.1-next.1 - - @backstage/plugin-linguist-backend@0.5.11-next.2 - - @backstage/plugin-kubernetes-backend@0.16.0-next.2 - - @backstage/plugin-todo-backend@0.3.12-next.2 - - @backstage/plugin-signals-backend@0.1.0-next.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.15-next.2 - - @backstage/backend-common@0.21.4-next.2 - - @backstage/plugin-adr-backend@0.4.11-next.2 - - @backstage/plugin-azure-devops-backend@0.6.0-next.2 - - example-app@0.2.93-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.18-next.2 - - @backstage/plugin-auth-backend@0.22.0-next.2 - - @backstage/plugin-app-backend@0.3.62-next.2 - - @backstage/plugin-auth-node@0.4.9-next.2 - - @backstage/plugin-badges-backend@0.3.11-next.2 - - @backstage/plugin-catalog-node@1.8.0-next.2 - - @backstage/plugin-entity-feedback-backend@0.2.11-next.2 - - @backstage/plugin-lighthouse-backend@0.4.6-next.2 - - @backstage/plugin-playlist-backend@0.3.18-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.18-next.2 - - @backstage/plugin-tech-insights-backend@0.5.28-next.2 - - @backstage/backend-tasks@0.5.19-next.2 - - @backstage/catalog-model@1.4.5-next.0 - - @backstage/config@1.2.0-next.1 - - @backstage/plugin-azure-sites-common@0.1.3-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.11-next.2 - - @backstage/plugin-events-backend@0.3.0-next.2 - - @backstage/plugin-events-node@0.3.0-next.2 - - @backstage/plugin-explore-backend@0.0.24-next.2 - - @backstage/plugin-kafka-backend@0.3.12-next.2 - - @backstage/plugin-nomad-backend@0.1.16-next.2 - - @backstage/plugin-permission-backend@0.5.37-next.2 - - @backstage/plugin-permission-common@0.7.13-next.1 - - @backstage/plugin-permission-node@0.7.25-next.2 - - @backstage/plugin-proxy-backend@0.4.12-next.2 - - @backstage/plugin-rollbar-backend@0.1.59-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.17-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.18-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.23-next.2 - - @backstage/plugin-search-backend-node@1.2.18-next.2 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.46-next.2 - - @backstage/plugin-tech-insights-node@0.5.0-next.2 - -## 0.2.93-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/config@1.2.0-next.1 - - @backstage/plugin-entity-feedback-backend@0.2.11-next.1 - - @backstage/plugin-scaffolder-backend@1.22.0-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.17-next.1 - - @backstage/plugin-app-backend@0.3.62-next.1 - - @backstage/plugin-signals-backend@0.1.0-next.1 - - @backstage/plugin-signals-node@0.1.0-next.1 - - @backstage/plugin-azure-devops-backend@0.6.0-next.1 - - @backstage/plugin-kubernetes-backend@0.16.0-next.1 - - example-app@0.2.93-next.1 - - @backstage/backend-common@0.21.4-next.1 - - @backstage/backend-tasks@0.5.19-next.1 - - @backstage/integration@1.9.1-next.1 - - @backstage/plugin-adr-backend@0.4.11-next.1 - - @backstage/plugin-auth-backend@0.22.0-next.1 - - @backstage/plugin-auth-node@0.4.9-next.1 - - @backstage/plugin-badges-backend@0.3.11-next.1 - - @backstage/plugin-catalog-backend@1.18.0-next.1 - - @backstage/plugin-code-coverage-backend@0.2.28-next.1 - - @backstage/plugin-devtools-backend@0.3.0-next.1 - - @backstage/plugin-events-backend@0.3.0-next.1 - - @backstage/plugin-explore-backend@0.0.24-next.1 - - @backstage/plugin-jenkins-backend@0.4.0-next.1 - - @backstage/plugin-kafka-backend@0.3.12-next.1 - - @backstage/plugin-lighthouse-backend@0.4.6-next.1 - - @backstage/plugin-linguist-backend@0.5.11-next.1 - - @backstage/plugin-nomad-backend@0.1.16-next.1 - - @backstage/plugin-permission-backend@0.5.37-next.1 - - @backstage/plugin-permission-common@0.7.13-next.1 - - @backstage/plugin-permission-node@0.7.25-next.1 - - @backstage/plugin-playlist-backend@0.3.18-next.1 - - @backstage/plugin-proxy-backend@0.4.12-next.1 - - @backstage/plugin-rollbar-backend@0.1.59-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.15-next.1 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.2.17-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.31-next.1 - - @backstage/plugin-search-backend@1.5.4-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.18-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.18-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.23-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.18-next.1 - - @backstage/plugin-search-backend-node@1.2.18-next.1 - - @backstage/plugin-tech-insights-backend@0.5.28-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.46-next.1 - - @backstage/plugin-tech-insights-node@0.5.0-next.1 - - @backstage/plugin-techdocs-backend@1.9.7-next.1 - - @backstage/plugin-todo-backend@0.3.12-next.1 - - @backstage/catalog-client@1.6.1-next.0 - - @backstage/catalog-model@1.4.5-next.0 - - @backstage/plugin-azure-sites-common@0.1.3-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.11-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.11-next.1 - - @backstage/plugin-catalog-node@1.8.0-next.1 - - @backstage/plugin-events-node@0.3.0-next.1 - -## 0.2.93-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-events-backend@0.3.0-next.0 - - @backstage/plugin-events-node@0.3.0-next.0 - - @backstage/plugin-linguist-backend@0.5.10-next.0 - - @backstage/backend-common@0.21.3-next.0 - - @backstage/plugin-auth-node@0.4.8-next.0 - - @backstage/plugin-lighthouse-backend@0.4.5-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.16-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.22-next.0 - - @backstage/plugin-playlist-backend@0.3.17-next.0 - - @backstage/plugin-code-coverage-backend@0.2.27-next.0 - - @backstage/plugin-entity-feedback-backend@0.2.10-next.0 - - @backstage/plugin-catalog-backend@1.18.0-next.0 - - @backstage/plugin-auth-backend@0.22.0-next.0 - - @backstage/plugin-jenkins-backend@0.4.0-next.0 - - @backstage/plugin-azure-devops-backend@0.6.0-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.14-next.0 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.2.16-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.30-next.0 - - @backstage/plugin-scaffolder-backend@1.22.0-next.0 - - @backstage/plugin-permission-common@0.7.13-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.17-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.17-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.17-next.0 - - @backstage/plugin-catalog-node@1.8.0-next.0 - - @backstage/plugin-kubernetes-backend@0.16.0-next.0 - - @backstage/plugin-adr-backend@0.4.10-next.0 - - @backstage/plugin-proxy-backend@0.4.11-next.0 - - @backstage/backend-tasks@0.5.18-next.0 - - @backstage/plugin-search-backend-node@1.2.17-next.0 - - @backstage/plugin-signals-backend@0.0.4-next.0 - - @backstage/plugin-signals-node@0.0.4-next.0 - - @backstage/plugin-tech-insights-backend@0.5.27-next.0 - - @backstage/plugin-search-backend@1.5.3-next.0 - - @backstage/plugin-devtools-backend@0.3.0-next.0 - - @backstage/plugin-permission-node@0.7.24-next.0 - - @backstage/plugin-tech-insights-node@0.5.0-next.0 - - @backstage/plugin-badges-backend@0.3.10-next.0 - - @backstage/plugin-permission-backend@0.5.36-next.0 - - @backstage/plugin-app-backend@0.3.61-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.10-next.0 - - @backstage/plugin-explore-backend@0.0.23-next.0 - - @backstage/plugin-rollbar-backend@0.1.58-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.45-next.0 - - @backstage/plugin-techdocs-backend@1.9.6-next.0 - - @backstage/plugin-kafka-backend@0.3.11-next.0 - - @backstage/plugin-nomad-backend@0.1.15-next.0 - - @backstage/plugin-todo-backend@0.3.11-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.10-next.0 - - example-app@0.2.93-next.0 - - @backstage/catalog-client@1.6.1-next.0 - - @backstage/catalog-model@1.4.5-next.0 - - @backstage/config@1.1.2-next.0 - - @backstage/integration@1.9.1-next.0 - - @backstage/plugin-azure-sites-common@0.1.3-next.0 - -## 0.2.92 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.21.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.27 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.7 - - @backstage/plugin-scaffolder-backend@1.21.0 - - @backstage/plugin-badges-backend@0.3.7 - - @backstage/plugin-azure-devops-backend@0.5.2 - - @backstage/plugin-explore-backend@0.0.20 - - @backstage/plugin-auth-backend@0.21.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.42 - - @backstage/plugin-auth-node@0.4.4 - - @backstage/plugin-entity-feedback-backend@0.2.7 - - @backstage/plugin-lighthouse-backend@0.4.2 - - @backstage/plugin-devtools-backend@0.2.7 - - @backstage/plugin-linguist-backend@0.5.7 - - @backstage/plugin-adr-backend@0.4.7 - - @backstage/plugin-kubernetes-backend@0.15.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.11 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.2.13 - - @backstage/plugin-signals-backend@0.0.1 - - @backstage/plugin-signals-node@0.0.1 - - @backstage/plugin-tech-insights-backend@0.5.24 - - @backstage/plugin-tech-insights-node@0.4.16 - - @backstage/plugin-search-backend-module-techdocs@0.1.14 - - @backstage/plugin-search-backend-module-catalog@0.1.14 - - @backstage/plugin-search-backend-module-explore@0.1.14 - - @backstage/plugin-code-coverage-backend@0.2.24 - - @backstage/plugin-playlist-backend@0.3.14 - - @backstage/plugin-catalog-backend@1.17.0 - - @backstage/plugin-jenkins-backend@0.3.4 - - @backstage/plugin-rollbar-backend@0.1.55 - - @backstage/backend-tasks@0.5.15 - - @backstage/plugin-events-backend@0.2.19 - - @backstage/plugin-nomad-backend@0.1.12 - - @backstage/plugin-app-backend@0.3.58 - - @backstage/catalog-model@1.4.4 - - @backstage/integration@1.9.0 - - @backstage/catalog-client@1.6.0 - - @backstage/plugin-search-backend@1.5.0 - - @backstage/plugin-todo-backend@0.3.8 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.7 - - @backstage/plugin-techdocs-backend@1.9.3 - - @backstage/plugin-catalog-node@1.7.0 - - @backstage/plugin-azure-sites-common@0.1.2 - - example-app@0.2.92 - - @backstage/plugin-kafka-backend@0.3.8 - - @backstage/plugin-permission-backend@0.5.33 - - @backstage/plugin-permission-node@0.7.21 - - @backstage/plugin-proxy-backend@0.4.8 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.13 - - @backstage/plugin-search-backend-module-pg@0.5.19 - - @backstage/plugin-search-backend-node@1.2.14 - - @backstage/config@1.1.1 - - @backstage/plugin-events-node@0.2.19 - - @backstage/plugin-permission-common@0.7.12 - - @backstage/plugin-search-common@1.2.10 - -## 0.2.92-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.21.0-next.3 - - @backstage/plugin-badges-backend@0.3.7-next.3 - - @backstage/plugin-kubernetes-backend@0.15.0-next.3 - - @backstage/plugin-scaffolder-backend-module-gitlab@0.2.13-next.3 - - @backstage/integration@1.9.0-next.1 - - @backstage/backend-tasks@0.5.15-next.3 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.7-next.3 - - @backstage/plugin-signals-backend@0.0.1-next.3 - - @backstage/plugin-signals-node@0.0.1-next.3 - - @backstage/plugin-catalog-backend@1.17.0-next.3 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.11-next.3 - - @backstage/plugin-app-backend@0.3.58-next.3 - - @backstage/plugin-auth-backend@0.21.0-next.3 - - @backstage/plugin-catalog-node@1.6.2-next.3 - - @backstage/plugin-adr-backend@0.4.7-next.3 - - @backstage/plugin-auth-node@0.4.4-next.3 - - @backstage/plugin-azure-devops-backend@0.5.2-next.3 - - @backstage/plugin-code-coverage-backend@0.2.24-next.3 - - @backstage/plugin-devtools-backend@0.2.7-next.3 - - @backstage/plugin-entity-feedback-backend@0.2.7-next.3 - - @backstage/plugin-events-backend@0.2.19-next.3 - - @backstage/plugin-explore-backend@0.0.20-next.3 - - @backstage/plugin-jenkins-backend@0.3.4-next.3 - - @backstage/plugin-kafka-backend@0.3.8-next.3 - - @backstage/plugin-lighthouse-backend@0.4.2-next.3 - - @backstage/plugin-linguist-backend@0.5.7-next.3 - - @backstage/plugin-nomad-backend@0.1.12-next.3 - - @backstage/plugin-permission-backend@0.5.33-next.3 - - @backstage/plugin-permission-node@0.7.21-next.3 - - @backstage/plugin-playlist-backend@0.3.14-next.3 - - @backstage/plugin-proxy-backend@0.4.8-next.3 - - @backstage/plugin-rollbar-backend@0.1.55-next.3 - - @backstage/plugin-scaffolder-backend@1.21.0-next.3 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.27-next.3 - - @backstage/plugin-search-backend@1.5.0-next.3 - - @backstage/plugin-search-backend-module-catalog@0.1.14-next.3 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.13-next.3 - - @backstage/plugin-search-backend-module-explore@0.1.14-next.3 - - @backstage/plugin-search-backend-module-pg@0.5.19-next.3 - - @backstage/plugin-search-backend-module-techdocs@0.1.14-next.3 - - @backstage/plugin-search-backend-node@1.2.14-next.3 - - @backstage/plugin-tech-insights-backend@0.5.24-next.3 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.42-next.3 - - @backstage/plugin-tech-insights-node@0.4.16-next.3 - - @backstage/plugin-techdocs-backend@1.9.3-next.3 - - @backstage/plugin-todo-backend@0.3.8-next.3 - - example-app@0.2.92-next.3 - - @backstage/catalog-client@1.6.0-next.1 - - @backstage/catalog-model@1.4.4-next.0 - - @backstage/config@1.1.1 - - @backstage/plugin-azure-sites-common@0.1.2-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.7-next.3 - - @backstage/plugin-events-node@0.2.19-next.3 - - @backstage/plugin-permission-common@0.7.12 - - @backstage/plugin-search-common@1.2.10 - -## 0.2.92-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.21.0-next.2 - - @backstage/plugin-auth-backend@0.21.0-next.2 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.42-next.2 - - @backstage/backend-common@0.21.0-next.2 - - @backstage/plugin-signals-backend@0.0.1-next.2 - - @backstage/plugin-signals-node@0.0.1-next.2 - - @backstage/plugin-kubernetes-backend@0.15.0-next.2 - - @backstage/plugin-tech-insights-backend@0.5.24-next.2 - - @backstage/plugin-tech-insights-node@0.4.16-next.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.11-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.7-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.27-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.14-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.14-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.14-next.2 - - @backstage/plugin-entity-feedback-backend@0.2.7-next.2 - - @backstage/plugin-code-coverage-backend@0.2.24-next.2 - - @backstage/plugin-azure-devops-backend@0.5.2-next.2 - - @backstage/plugin-lighthouse-backend@0.4.2-next.2 - - @backstage/plugin-devtools-backend@0.2.7-next.2 - - @backstage/plugin-linguist-backend@0.5.7-next.2 - - @backstage/plugin-playlist-backend@0.3.14-next.2 - - @backstage/plugin-catalog-backend@1.17.0-next.2 - - @backstage/plugin-explore-backend@0.0.20-next.2 - - @backstage/plugin-jenkins-backend@0.3.4-next.2 - - @backstage/plugin-rollbar-backend@0.1.55-next.2 - - @backstage/backend-tasks@0.5.15-next.2 - - @backstage/plugin-badges-backend@0.3.7-next.2 - - @backstage/plugin-events-backend@0.2.19-next.2 - - @backstage/plugin-nomad-backend@0.1.12-next.2 - - @backstage/plugin-adr-backend@0.4.7-next.2 - - @backstage/plugin-app-backend@0.3.58-next.2 - - @backstage/plugin-auth-node@0.4.4-next.2 - - example-app@0.2.92-next.2 - - @backstage/plugin-todo-backend@0.3.8-next.2 - - @backstage/plugin-kafka-backend@0.3.8-next.2 - - @backstage/plugin-permission-backend@0.5.33-next.2 - - @backstage/plugin-permission-node@0.7.21-next.2 - - @backstage/plugin-proxy-backend@0.4.8-next.2 - - @backstage/plugin-search-backend@1.5.0-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.13-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.19-next.2 - - @backstage/plugin-search-backend-node@1.2.14-next.2 - - @backstage/plugin-techdocs-backend@1.9.3-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.7-next.2 - - @backstage/plugin-catalog-node@1.6.2-next.2 - - @backstage/plugin-events-node@0.2.19-next.2 - - @backstage/config@1.1.1 - - @backstage/catalog-client@1.6.0-next.1 - - @backstage/catalog-model@1.4.4-next.0 - - @backstage/integration@1.9.0-next.0 - - @backstage/plugin-azure-sites-common@0.1.2-next.0 - - @backstage/plugin-permission-common@0.7.12 - - @backstage/plugin-search-common@1.2.10 - -## 0.2.92-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.21.0-next.1 - - @backstage/plugin-azure-devops-backend@0.5.2-next.1 - - @backstage/catalog-model@1.4.4-next.0 - - @backstage/catalog-client@1.6.0-next.1 - - @backstage/plugin-catalog-backend@1.17.0-next.1 - - @backstage/backend-common@0.21.0-next.1 - - @backstage/plugin-auth-backend@0.20.4-next.1 - - @backstage/integration@1.9.0-next.0 - - @backstage/plugin-azure-sites-common@0.1.2-next.0 - - example-app@0.2.92-next.1 - - @backstage/backend-tasks@0.5.15-next.1 - - @backstage/config@1.1.1 - - @backstage/plugin-adr-backend@0.4.7-next.1 - - @backstage/plugin-app-backend@0.3.58-next.1 - - @backstage/plugin-auth-node@0.4.4-next.1 - - @backstage/plugin-badges-backend@0.3.7-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.7-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.7-next.1 - - @backstage/plugin-catalog-node@1.6.2-next.1 - - @backstage/plugin-code-coverage-backend@0.2.24-next.1 - - @backstage/plugin-devtools-backend@0.2.7-next.1 - - @backstage/plugin-entity-feedback-backend@0.2.7-next.1 - - @backstage/plugin-events-backend@0.2.19-next.1 - - @backstage/plugin-events-node@0.2.19-next.1 - - @backstage/plugin-explore-backend@0.0.20-next.1 - - @backstage/plugin-jenkins-backend@0.3.4-next.1 - - @backstage/plugin-kafka-backend@0.3.8-next.1 - - @backstage/plugin-kubernetes-backend@0.14.2-next.1 - - @backstage/plugin-lighthouse-backend@0.4.2-next.1 - - @backstage/plugin-linguist-backend@0.5.7-next.1 - - @backstage/plugin-nomad-backend@0.1.12-next.1 - - @backstage/plugin-permission-backend@0.5.33-next.1 - - @backstage/plugin-permission-common@0.7.12 - - @backstage/plugin-permission-node@0.7.21-next.1 - - @backstage/plugin-playlist-backend@0.3.14-next.1 - - @backstage/plugin-proxy-backend@0.4.8-next.1 - - @backstage/plugin-rollbar-backend@0.1.55-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.11-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.27-next.1 - - @backstage/plugin-search-backend@1.5.0-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.14-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.13-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.14-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.19-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.14-next.1 - - @backstage/plugin-search-backend-node@1.2.14-next.1 - - @backstage/plugin-search-common@1.2.10 - - @backstage/plugin-signals-backend@0.0.1-next.1 - - @backstage/plugin-signals-node@0.0.1-next.1 - - @backstage/plugin-tech-insights-backend@0.5.24-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.42-next.1 - - @backstage/plugin-tech-insights-node@0.4.16-next.1 - - @backstage/plugin-techdocs-backend@1.9.3-next.1 - - @backstage/plugin-todo-backend@0.3.8-next.1 - -## 0.2.92-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend-module-rails@0.4.27-next.0 - - @backstage/plugin-azure-devops-backend@0.5.2-next.0 - - @backstage/plugin-explore-backend@0.0.20-next.0 - - @backstage/plugin-auth-backend@0.20.4-next.0 - - @backstage/backend-common@0.21.0-next.0 - - @backstage/plugin-kubernetes-backend@0.14.2-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.11-next.0 - - @backstage/plugin-catalog-backend@1.17.0-next.0 - - @backstage/plugin-search-backend@1.5.0-next.0 - - @backstage/plugin-todo-backend@0.3.8-next.0 - - @backstage/catalog-client@1.6.0-next.0 - - @backstage/plugin-signals-backend@0.0.1-next.0 - - @backstage/plugin-signals-node@0.0.1-next.0 - - @backstage/plugin-scaffolder-backend@1.21.0-next.0 - - @backstage/plugin-app-backend@0.3.58-next.0 - - example-app@0.2.92-next.0 - - @backstage/backend-tasks@0.5.15-next.0 - - @backstage/plugin-auth-node@0.4.4-next.0 - - @backstage/plugin-badges-backend@0.3.7-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.7-next.0 - - @backstage/plugin-catalog-node@1.6.2-next.0 - - @backstage/plugin-entity-feedback-backend@0.2.7-next.0 - - @backstage/plugin-events-backend@0.2.19-next.0 - - @backstage/plugin-linguist-backend@0.5.7-next.0 - - @backstage/plugin-permission-node@0.7.21-next.0 - - @backstage/plugin-playlist-backend@0.3.14-next.0 - - @backstage/plugin-proxy-backend@0.4.8-next.0 - - @backstage/plugin-rollbar-backend@0.1.55-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.14-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.14-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.19-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.14-next.0 - - @backstage/plugin-tech-insights-backend@0.5.24-next.0 - - @backstage/plugin-techdocs-backend@1.9.3-next.0 - - @backstage/plugin-adr-backend@0.4.7-next.0 - - @backstage/plugin-azure-sites-backend@0.1.20-next.0 - - @backstage/plugin-code-coverage-backend@0.2.24-next.0 - - @backstage/plugin-devtools-backend@0.2.7-next.0 - - @backstage/plugin-jenkins-backend@0.3.4-next.0 - - @backstage/plugin-kafka-backend@0.3.8-next.0 - - @backstage/plugin-lighthouse-backend@0.4.2-next.0 - - @backstage/plugin-nomad-backend@0.1.12-next.0 - - @backstage/plugin-permission-backend@0.5.33-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.13-next.0 - - @backstage/plugin-search-backend-node@1.2.14-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.42-next.0 - - @backstage/plugin-tech-insights-node@0.4.16-next.0 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/integration@1.8.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.7-next.0 - - @backstage/plugin-events-node@0.2.19-next.0 - - @backstage/plugin-permission-common@0.7.12 - - @backstage/plugin-search-common@1.2.10 - -## 0.2.91 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.20.3 - - @backstage/backend-common@0.20.1 - - @backstage/plugin-scaffolder-backend@1.20.0 - - @backstage/catalog-client@1.5.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.10 - - @backstage/plugin-events-backend@0.2.18 - - @backstage/plugin-search-backend-module-techdocs@0.1.13 - - @backstage/plugin-search-backend-module-catalog@0.1.13 - - @backstage/plugin-search-backend-module-explore@0.1.13 - - @backstage/plugin-azure-devops-backend@0.5.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.6 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.41 - - @backstage/plugin-entity-feedback-backend@0.2.6 - - @backstage/plugin-code-coverage-backend@0.2.23 - - @backstage/plugin-azure-sites-backend@0.1.19 - - @backstage/plugin-tech-insights-node@0.4.15 - - @backstage/plugin-devtools-backend@0.2.6 - - @backstage/plugin-linguist-backend@0.5.6 - - @backstage/plugin-playlist-backend@0.3.13 - - @backstage/plugin-techdocs-backend@1.9.2 - - @backstage/plugin-explore-backend@0.0.19 - - @backstage/plugin-jenkins-backend@0.3.3 - - @backstage/plugin-badges-backend@0.3.6 - - @backstage/plugin-search-backend@1.4.9 - - @backstage/plugin-kafka-backend@0.3.7 - - @backstage/plugin-nomad-backend@0.1.11 - - @backstage/plugin-catalog-node@1.6.1 - - @backstage/plugin-todo-backend@0.3.7 - - @backstage/plugin-adr-backend@0.4.6 - - @backstage/plugin-app-backend@0.3.57 - - @backstage/plugin-permission-backend@0.5.32 - - @backstage/plugin-permission-common@0.7.12 - - @backstage/plugin-permission-node@0.7.20 - - @backstage/plugin-catalog-backend@1.16.1 - - example-app@0.2.91 - - @backstage/backend-tasks@0.5.14 - - @backstage/plugin-auth-node@0.4.3 - - @backstage/plugin-kubernetes-backend@0.14.1 - - @backstage/plugin-lighthouse-backend@0.4.1 - - @backstage/plugin-proxy-backend@0.4.7 - - @backstage/plugin-rollbar-backend@0.1.54 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.26 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.12 - - @backstage/plugin-search-backend-module-pg@0.5.18 - - @backstage/plugin-search-backend-node@1.2.13 - - @backstage/plugin-tech-insights-backend@0.5.23 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/integration@1.8.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.6 - - @backstage/plugin-events-node@0.2.18 - - @backstage/plugin-search-common@1.2.10 - -## 0.2.91-next.2 - -### Patch Changes - -- Updated dependencies - - example-app@0.2.91-next.2 - - @backstage/backend-common@0.20.1-next.2 - - @backstage/plugin-adr-backend@0.4.6-next.2 - - @backstage/plugin-app-backend@0.3.57-next.2 - - @backstage/plugin-auth-backend@0.20.3-next.2 - - @backstage/plugin-auth-node@0.4.3-next.2 - - @backstage/plugin-azure-devops-backend@0.5.1-next.2 - - @backstage/plugin-badges-backend@0.3.6-next.2 - - @backstage/plugin-catalog-backend@1.16.1-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.6-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.6-next.2 - - @backstage/plugin-catalog-node@1.6.1-next.2 - - @backstage/plugin-code-coverage-backend@0.2.23-next.2 - - @backstage/plugin-devtools-backend@0.2.6-next.2 - - @backstage/plugin-entity-feedback-backend@0.2.6-next.2 - - @backstage/plugin-events-backend@0.2.18-next.2 - - @backstage/plugin-events-node@0.2.18-next.2 - - @backstage/plugin-jenkins-backend@0.3.3-next.2 - - @backstage/plugin-kafka-backend@0.3.7-next.2 - - @backstage/plugin-kubernetes-backend@0.14.1-next.2 - - @backstage/plugin-lighthouse-backend@0.4.1-next.2 - - @backstage/plugin-linguist-backend@0.5.6-next.2 - - @backstage/plugin-nomad-backend@0.1.11-next.2 - - @backstage/plugin-permission-backend@0.5.32-next.2 - - @backstage/plugin-permission-node@0.7.20-next.2 - - @backstage/plugin-playlist-backend@0.3.13-next.2 - - @backstage/plugin-proxy-backend@0.4.7-next.2 - - @backstage/plugin-scaffolder-backend@1.19.3-next.2 - - @backstage/plugin-search-backend@1.4.9-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.13-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.12-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.13-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.18-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.13-next.2 - - @backstage/plugin-search-backend-node@1.2.13-next.2 - - @backstage/plugin-techdocs-backend@1.9.2-next.2 - - @backstage/plugin-todo-backend@0.3.7-next.2 - - @backstage/backend-tasks@0.5.14-next.2 - - @backstage/plugin-azure-sites-backend@0.1.19-next.2 - - @backstage/plugin-explore-backend@0.0.19-next.2 - - @backstage/plugin-rollbar-backend@0.1.54-next.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.10-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.26-next.2 - - @backstage/plugin-tech-insights-backend@0.5.23-next.2 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.41-next.2 - - @backstage/plugin-tech-insights-node@0.4.15-next.2 - -## 0.2.91-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.10-next.1 - - example-app@0.2.91-next.1 - - @backstage/backend-common@0.20.1-next.1 - - @backstage/integration@1.8.0 - - @backstage/plugin-app-backend@0.3.57-next.1 - - @backstage/plugin-devtools-backend@0.2.6-next.1 - - @backstage/plugin-proxy-backend@0.4.7-next.1 - - @backstage/config@1.1.1 - - @backstage/plugin-kubernetes-backend@0.14.1-next.1 - - @backstage/backend-tasks@0.5.14-next.1 - - @backstage/plugin-adr-backend@0.4.6-next.1 - - @backstage/plugin-auth-backend@0.20.3-next.1 - - @backstage/plugin-auth-node@0.4.3-next.1 - - @backstage/plugin-azure-devops-backend@0.5.1-next.1 - - @backstage/plugin-azure-sites-backend@0.1.19-next.1 - - @backstage/plugin-badges-backend@0.3.6-next.1 - - @backstage/plugin-catalog-backend@1.16.1-next.1 - - @backstage/plugin-code-coverage-backend@0.2.23-next.1 - - @backstage/plugin-entity-feedback-backend@0.2.6-next.1 - - @backstage/plugin-events-backend@0.2.18-next.1 - - @backstage/plugin-explore-backend@0.0.19-next.1 - - @backstage/plugin-jenkins-backend@0.3.3-next.1 - - @backstage/plugin-kafka-backend@0.3.7-next.1 - - @backstage/plugin-lighthouse-backend@0.4.1-next.1 - - @backstage/plugin-linguist-backend@0.5.6-next.1 - - @backstage/plugin-nomad-backend@0.1.11-next.1 - - @backstage/plugin-permission-backend@0.5.32-next.1 - - @backstage/plugin-permission-node@0.7.20-next.1 - - @backstage/plugin-playlist-backend@0.3.13-next.1 - - @backstage/plugin-rollbar-backend@0.1.54-next.1 - - @backstage/plugin-scaffolder-backend@1.19.3-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.26-next.1 - - @backstage/plugin-search-backend@1.4.9-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.13-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.12-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.13-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.18-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.13-next.1 - - @backstage/plugin-search-backend-node@1.2.13-next.1 - - @backstage/plugin-tech-insights-backend@0.5.23-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.41-next.1 - - @backstage/plugin-tech-insights-node@0.4.15-next.1 - - @backstage/plugin-techdocs-backend@1.9.2-next.1 - - @backstage/plugin-todo-backend@0.3.7-next.1 - - @backstage/catalog-client@1.5.2-next.0 - - @backstage/catalog-model@1.4.3 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.6-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.6-next.1 - - @backstage/plugin-catalog-node@1.6.1-next.1 - - @backstage/plugin-events-node@0.2.18-next.1 - - @backstage/plugin-permission-common@0.7.11 - - @backstage/plugin-search-common@1.2.9 - -## 0.2.91-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.20.3-next.0 - - @backstage/backend-common@0.20.1-next.0 - - @backstage/plugin-scaffolder-backend@1.19.3-next.0 - - @backstage/catalog-client@1.5.2-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.13-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.13-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.13-next.0 - - @backstage/plugin-azure-devops-backend@0.5.1-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.10-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.6-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.41-next.0 - - @backstage/plugin-entity-feedback-backend@0.2.6-next.0 - - @backstage/plugin-code-coverage-backend@0.2.23-next.0 - - @backstage/plugin-azure-sites-backend@0.1.19-next.0 - - @backstage/plugin-tech-insights-node@0.4.15-next.0 - - @backstage/plugin-devtools-backend@0.2.6-next.0 - - @backstage/plugin-linguist-backend@0.5.6-next.0 - - @backstage/plugin-playlist-backend@0.3.13-next.0 - - @backstage/plugin-techdocs-backend@1.9.2-next.0 - - @backstage/plugin-explore-backend@0.0.19-next.0 - - @backstage/plugin-jenkins-backend@0.3.3-next.0 - - @backstage/plugin-badges-backend@0.3.6-next.0 - - @backstage/plugin-search-backend@1.4.9-next.0 - - @backstage/plugin-kafka-backend@0.3.7-next.0 - - @backstage/plugin-nomad-backend@0.1.11-next.0 - - @backstage/plugin-catalog-node@1.6.1-next.0 - - @backstage/plugin-todo-backend@0.3.7-next.0 - - @backstage/plugin-adr-backend@0.4.6-next.0 - - @backstage/plugin-app-backend@0.3.57-next.0 - - example-app@0.2.91-next.0 - - @backstage/backend-tasks@0.5.14-next.0 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/integration@1.8.0 - - @backstage/plugin-auth-node@0.4.3-next.0 - - @backstage/plugin-catalog-backend@1.16.1-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.6-next.0 - - @backstage/plugin-events-backend@0.2.18-next.0 - - @backstage/plugin-events-node@0.2.18-next.0 - - @backstage/plugin-kubernetes-backend@0.14.1-next.0 - - @backstage/plugin-lighthouse-backend@0.4.1-next.0 - - @backstage/plugin-permission-backend@0.5.32-next.0 - - @backstage/plugin-permission-common@0.7.11 - - @backstage/plugin-permission-node@0.7.20-next.0 - - @backstage/plugin-proxy-backend@0.4.7-next.0 - - @backstage/plugin-rollbar-backend@0.1.54-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.26-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.12-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.18-next.0 - - @backstage/plugin-search-backend-node@1.2.13-next.0 - - @backstage/plugin-search-common@1.2.9 - - @backstage/plugin-tech-insights-backend@0.5.23-next.0 - -## 0.2.90 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.20.1 - - @backstage/backend-common@0.20.0 - - @backstage/plugin-catalog-node@1.6.0 - - @backstage/plugin-techdocs-backend@1.9.1 - - @backstage/plugin-catalog-backend@1.16.0 - - @backstage/catalog-client@1.5.0 - - @backstage/plugin-azure-devops-backend@0.5.0 - - @backstage/plugin-scaffolder-backend@1.19.2 - - @backstage/backend-tasks@0.5.13 - - @backstage/plugin-lighthouse-backend@0.4.0 - - @backstage/plugin-kubernetes-backend@0.14.0 - - @backstage/integration@1.8.0 - - @backstage/plugin-azure-sites-backend@0.1.18 - - @backstage/plugin-auth-node@0.4.2 - - @backstage/plugin-permission-backend@0.5.31 - - @backstage/plugin-permission-common@0.7.11 - - @backstage/plugin-playlist-backend@0.3.12 - - @backstage/plugin-permission-node@0.7.19 - - @backstage/plugin-search-backend@1.4.8 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.11 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5 - - @backstage/plugin-search-backend-module-techdocs@0.1.12 - - @backstage/plugin-search-backend-module-catalog@0.1.12 - - @backstage/plugin-search-backend-module-explore@0.1.12 - - @backstage/plugin-search-backend-module-pg@0.5.17 - - @backstage/plugin-events-backend@0.2.17 - - example-app@0.2.90 - - @backstage/plugin-adr-backend@0.4.5 - - @backstage/plugin-app-backend@0.3.56 - - @backstage/plugin-badges-backend@0.3.5 - - @backstage/plugin-code-coverage-backend@0.2.22 - - @backstage/plugin-devtools-backend@0.2.5 - - @backstage/plugin-entity-feedback-backend@0.2.5 - - @backstage/plugin-explore-backend@0.0.18 - - @backstage/plugin-jenkins-backend@0.3.2 - - @backstage/plugin-kafka-backend@0.3.6 - - @backstage/plugin-linguist-backend@0.5.5 - - @backstage/plugin-nomad-backend@0.1.10 - - @backstage/plugin-proxy-backend@0.4.6 - - @backstage/plugin-rollbar-backend@0.1.53 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.9 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.25 - - @backstage/plugin-search-backend-node@1.2.12 - - @backstage/plugin-tech-insights-backend@0.5.22 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.40 - - @backstage/plugin-tech-insights-node@0.4.14 - - @backstage/plugin-todo-backend@0.3.6 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/plugin-events-node@0.2.17 - - @backstage/plugin-search-common@1.2.9 - -## 0.2.90-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-azure-devops-backend@0.5.0-next.3 - - @backstage/plugin-scaffolder-backend@1.19.2-next.3 - - @backstage/backend-common@0.20.0-next.3 - - example-app@0.2.90-next.4 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.9-next.3 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.25-next.3 - - @backstage/backend-tasks@0.5.13-next.3 - - @backstage/catalog-client@1.5.0-next.1 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/integration@1.8.0-next.1 - - @backstage/plugin-adr-backend@0.4.5-next.3 - - @backstage/plugin-app-backend@0.3.56-next.3 - - @backstage/plugin-auth-backend@0.20.1-next.3 - - @backstage/plugin-auth-node@0.4.2-next.3 - - @backstage/plugin-azure-sites-backend@0.1.18-next.3 - - @backstage/plugin-badges-backend@0.3.5-next.3 - - @backstage/plugin-catalog-backend@1.16.0-next.3 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5-next.3 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5-next.3 - - @backstage/plugin-catalog-node@1.6.0-next.3 - - @backstage/plugin-code-coverage-backend@0.2.22-next.3 - - @backstage/plugin-devtools-backend@0.2.5-next.3 - - @backstage/plugin-entity-feedback-backend@0.2.5-next.3 - - @backstage/plugin-events-backend@0.2.17-next.3 - - @backstage/plugin-events-node@0.2.17-next.3 - - @backstage/plugin-explore-backend@0.0.18-next.3 - - @backstage/plugin-jenkins-backend@0.3.2-next.3 - - @backstage/plugin-kafka-backend@0.3.6-next.3 - - @backstage/plugin-kubernetes-backend@0.14.0-next.3 - - @backstage/plugin-lighthouse-backend@0.4.0-next.3 - - @backstage/plugin-linguist-backend@0.5.5-next.3 - - @backstage/plugin-nomad-backend@0.1.10-next.3 - - @backstage/plugin-permission-backend@0.5.31-next.3 - - @backstage/plugin-permission-common@0.7.10 - - @backstage/plugin-permission-node@0.7.19-next.3 - - @backstage/plugin-playlist-backend@0.3.12-next.3 - - @backstage/plugin-proxy-backend@0.4.6-next.3 - - @backstage/plugin-rollbar-backend@0.1.53-next.3 - - @backstage/plugin-search-backend@1.4.8-next.3 - - @backstage/plugin-search-backend-module-catalog@0.1.12-next.3 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.11-next.3 - - @backstage/plugin-search-backend-module-explore@0.1.12-next.3 - - @backstage/plugin-search-backend-module-pg@0.5.17-next.3 - - @backstage/plugin-search-backend-module-techdocs@0.1.12-next.3 - - @backstage/plugin-search-backend-node@1.2.12-next.3 - - @backstage/plugin-search-common@1.2.8 - - @backstage/plugin-tech-insights-backend@0.5.22-next.3 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.40-next.3 - - @backstage/plugin-tech-insights-node@0.4.14-next.3 - - @backstage/plugin-techdocs-backend@1.9.1-next.3 - - @backstage/plugin-todo-backend@0.3.6-next.3 - -## 0.2.90-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-node@1.6.0-next.2 - - @backstage/plugin-catalog-backend@1.16.0-next.2 - - @backstage/plugin-auth-backend@0.20.1-next.2 - - @backstage/plugin-lighthouse-backend@0.4.0-next.2 - - @backstage/backend-common@0.20.0-next.2 - - @backstage/plugin-auth-node@0.4.2-next.2 - - @backstage/catalog-client@1.5.0-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.11-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.12-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.12-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.12-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.17-next.2 - - @backstage/plugin-events-backend@0.2.17-next.2 - - example-app@0.2.90-next.3 - - @backstage/backend-tasks@0.5.13-next.2 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/integration@1.8.0-next.1 - - @backstage/plugin-adr-backend@0.4.5-next.2 - - @backstage/plugin-app-backend@0.3.56-next.2 - - @backstage/plugin-azure-devops-backend@0.5.0-next.2 - - @backstage/plugin-azure-sites-backend@0.1.18-next.2 - - @backstage/plugin-badges-backend@0.3.5-next.2 - - @backstage/plugin-code-coverage-backend@0.2.22-next.2 - - @backstage/plugin-devtools-backend@0.2.5-next.2 - - @backstage/plugin-entity-feedback-backend@0.2.5-next.2 - - @backstage/plugin-events-node@0.2.17-next.2 - - @backstage/plugin-explore-backend@0.0.18-next.2 - - @backstage/plugin-jenkins-backend@0.3.2-next.2 - - @backstage/plugin-kafka-backend@0.3.6-next.2 - - @backstage/plugin-kubernetes-backend@0.14.0-next.2 - - @backstage/plugin-linguist-backend@0.5.5-next.2 - - @backstage/plugin-nomad-backend@0.1.10-next.2 - - @backstage/plugin-permission-backend@0.5.31-next.2 - - @backstage/plugin-permission-common@0.7.10 - - @backstage/plugin-permission-node@0.7.19-next.2 - - @backstage/plugin-playlist-backend@0.3.12-next.2 - - @backstage/plugin-proxy-backend@0.4.6-next.2 - - @backstage/plugin-rollbar-backend@0.1.53-next.2 - - @backstage/plugin-scaffolder-backend@1.19.2-next.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.9-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.25-next.2 - - @backstage/plugin-search-backend@1.4.8-next.2 - - @backstage/plugin-search-backend-node@1.2.12-next.2 - - @backstage/plugin-search-common@1.2.8 - - @backstage/plugin-tech-insights-backend@0.5.22-next.2 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.40-next.2 - - @backstage/plugin-tech-insights-node@0.4.14-next.2 - - @backstage/plugin-techdocs-backend@1.9.1-next.2 - - @backstage/plugin-todo-backend@0.3.6-next.2 - -## 0.2.90-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.20.1-next.1 - - @backstage/plugin-catalog-backend@1.15.1-next.1 - - @backstage/catalog-client@1.5.0-next.0 - - @backstage/plugin-azure-devops-backend@0.5.0-next.1 - - @backstage/plugin-kubernetes-backend@0.14.0-next.1 - - @backstage/integration@1.8.0-next.1 - - @backstage/plugin-azure-sites-backend@0.1.18-next.1 - - @backstage/backend-common@0.20.0-next.1 - - example-app@0.2.90-next.2 - - @backstage/backend-tasks@0.5.13-next.1 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/plugin-adr-backend@0.4.5-next.1 - - @backstage/plugin-app-backend@0.3.56-next.1 - - @backstage/plugin-auth-node@0.4.2-next.1 - - @backstage/plugin-badges-backend@0.3.5-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5-next.1 - - @backstage/plugin-catalog-node@1.5.1-next.1 - - @backstage/plugin-code-coverage-backend@0.2.22-next.1 - - @backstage/plugin-devtools-backend@0.2.5-next.1 - - @backstage/plugin-entity-feedback-backend@0.2.5-next.1 - - @backstage/plugin-events-backend@0.2.17-next.1 - - @backstage/plugin-events-node@0.2.17-next.1 - - @backstage/plugin-explore-backend@0.0.18-next.1 - - @backstage/plugin-jenkins-backend@0.3.2-next.1 - - @backstage/plugin-kafka-backend@0.3.6-next.1 - - @backstage/plugin-lighthouse-backend@0.3.5-next.1 - - @backstage/plugin-linguist-backend@0.5.5-next.1 - - @backstage/plugin-nomad-backend@0.1.10-next.1 - - @backstage/plugin-permission-backend@0.5.31-next.1 - - @backstage/plugin-permission-common@0.7.10 - - @backstage/plugin-permission-node@0.7.19-next.1 - - @backstage/plugin-playlist-backend@0.3.12-next.1 - - @backstage/plugin-proxy-backend@0.4.6-next.1 - - @backstage/plugin-rollbar-backend@0.1.53-next.1 - - @backstage/plugin-scaffolder-backend@1.19.2-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.9-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.25-next.1 - - @backstage/plugin-search-backend@1.4.8-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.12-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.11-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.12-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.17-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.12-next.1 - - @backstage/plugin-search-backend-node@1.2.12-next.1 - - @backstage/plugin-search-common@1.2.8 - - @backstage/plugin-tech-insights-backend@0.5.22-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.40-next.1 - - @backstage/plugin-tech-insights-node@0.4.14-next.1 - - @backstage/plugin-techdocs-backend@1.9.1-next.1 - - @backstage/plugin-todo-backend@0.3.6-next.1 - -## 0.2.90-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.20.0-next.0 - - @backstage/plugin-auth-backend@0.20.1-next.0 - - @backstage/backend-tasks@0.5.13-next.0 - - @backstage/plugin-scaffolder-backend@1.19.2-next.0 - - @backstage/plugin-kubernetes-backend@0.14.0-next.0 - - @backstage/plugin-azure-sites-backend@0.1.18-next.0 - - @backstage/integration@1.8.0-next.0 - - example-app@0.2.90-next.0 - - @backstage/plugin-adr-backend@0.4.5-next.0 - - @backstage/plugin-app-backend@0.3.56-next.0 - - @backstage/plugin-auth-node@0.4.2-next.0 - - @backstage/plugin-azure-devops-backend@0.4.5-next.0 - - @backstage/plugin-badges-backend@0.3.5-next.0 - - @backstage/plugin-catalog-backend@1.15.1-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5-next.0 - - @backstage/plugin-catalog-node@1.5.1-next.0 - - @backstage/plugin-code-coverage-backend@0.2.22-next.0 - - @backstage/plugin-devtools-backend@0.2.5-next.0 - - @backstage/plugin-entity-feedback-backend@0.2.5-next.0 - - @backstage/plugin-events-backend@0.2.17-next.0 - - @backstage/plugin-explore-backend@0.0.18-next.0 - - @backstage/plugin-jenkins-backend@0.3.2-next.0 - - @backstage/plugin-kafka-backend@0.3.6-next.0 - - @backstage/plugin-lighthouse-backend@0.3.5-next.0 - - @backstage/plugin-linguist-backend@0.5.5-next.0 - - @backstage/plugin-nomad-backend@0.1.10-next.0 - - @backstage/plugin-permission-backend@0.5.31-next.0 - - @backstage/plugin-permission-node@0.7.19-next.0 - - @backstage/plugin-playlist-backend@0.3.12-next.0 - - @backstage/plugin-proxy-backend@0.4.6-next.0 - - @backstage/plugin-rollbar-backend@0.1.53-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.9-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.25-next.0 - - @backstage/plugin-search-backend@1.4.8-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.12-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.11-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.12-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.17-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.12-next.0 - - @backstage/plugin-search-backend-node@1.2.12-next.0 - - @backstage/plugin-tech-insights-backend@0.5.22-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.40-next.0 - - @backstage/plugin-tech-insights-node@0.4.14-next.0 - - @backstage/plugin-techdocs-backend@1.9.1-next.0 - - @backstage/plugin-todo-backend@0.3.6-next.0 - - @backstage/catalog-client@1.4.6 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5-next.0 - - @backstage/plugin-events-node@0.2.17-next.0 - - @backstage/plugin-permission-common@0.7.10 - - @backstage/plugin-search-common@1.2.8 - -## 0.2.89 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.15.0 - - @backstage/plugin-catalog-node@1.5.0 - - @backstage/plugin-search-backend-module-pg@0.5.16 - - @backstage/plugin-kubernetes-backend@0.13.1 - - @backstage/plugin-search-backend-node@1.2.11 - - @backstage/integration@1.7.2 - - @backstage/plugin-auth-backend@0.20.0 - - @backstage/backend-common@0.19.9 - - @backstage/plugin-techdocs-backend@1.9.0 - - @backstage/plugin-code-coverage-backend@0.2.21 - - @backstage/plugin-scaffolder-backend@1.19.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.10 - - @backstage/plugin-search-backend@1.4.7 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.4 - - @backstage/plugin-entity-feedback-backend@0.2.4 - - @backstage/plugin-tech-insights-backend@0.5.21 - - @backstage/plugin-linguist-backend@0.5.4 - - @backstage/plugin-playlist-backend@0.3.11 - - @backstage/backend-tasks@0.5.12 - - @backstage/plugin-badges-backend@0.3.4 - - @backstage/plugin-app-backend@0.3.55 - - @backstage/plugin-search-backend-module-techdocs@0.1.11 - - @backstage/catalog-client@1.4.6 - - @backstage/plugin-permission-common@0.7.10 - - @backstage/plugin-jenkins-backend@0.3.1 - - @backstage/plugin-adr-backend@0.4.4 - - @backstage/plugin-kafka-backend@0.3.5 - - @backstage/plugin-proxy-backend@0.4.5 - - example-app@0.2.89 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4 - - @backstage/plugin-lighthouse-backend@0.3.4 - - @backstage/plugin-search-backend-module-catalog@0.1.11 - - @backstage/plugin-todo-backend@0.3.5 - - @backstage/plugin-devtools-backend@0.2.4 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/plugin-auth-node@0.4.1 - - @backstage/plugin-azure-devops-backend@0.4.4 - - @backstage/plugin-azure-sites-backend@0.1.17 - - @backstage/plugin-events-backend@0.2.16 - - @backstage/plugin-events-node@0.2.16 - - @backstage/plugin-explore-backend@0.0.17 - - @backstage/plugin-graphql-backend@0.2.1 - - @backstage/plugin-nomad-backend@0.1.9 - - @backstage/plugin-permission-backend@0.5.30 - - @backstage/plugin-permission-node@0.7.18 - - @backstage/plugin-rollbar-backend@0.1.52 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.8 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.24 - - @backstage/plugin-search-backend-module-explore@0.1.11 - - @backstage/plugin-search-common@1.2.8 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.39 - - @backstage/plugin-tech-insights-node@0.4.13 - -## 0.2.89-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.13.1-next.2 - - @backstage/plugin-scaffolder-backend@1.19.0-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.10-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.4-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.16-next.2 - - @backstage/plugin-entity-feedback-backend@0.2.4-next.2 - - @backstage/plugin-code-coverage-backend@0.2.21-next.2 - - @backstage/plugin-tech-insights-backend@0.5.21-next.2 - - @backstage/plugin-linguist-backend@0.5.4-next.2 - - @backstage/plugin-playlist-backend@0.3.11-next.2 - - @backstage/plugin-techdocs-backend@1.9.0-next.2 - - @backstage/backend-common@0.19.9-next.2 - - @backstage/plugin-catalog-backend@1.15.0-next.2 - - @backstage/backend-tasks@0.5.12-next.2 - - @backstage/plugin-badges-backend@0.3.4-next.2 - - @backstage/plugin-auth-backend@0.20.0-next.2 - - @backstage/plugin-app-backend@0.3.55-next.2 - - example-app@0.2.89-next.2 - - @backstage/plugin-adr-backend@0.4.4-next.2 - - @backstage/plugin-auth-node@0.4.1-next.2 - - @backstage/plugin-azure-devops-backend@0.4.4-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4-next.2 - - @backstage/plugin-catalog-node@1.5.0-next.2 - - @backstage/plugin-devtools-backend@0.2.4-next.2 - - @backstage/plugin-events-backend@0.2.16-next.2 - - @backstage/plugin-events-node@0.2.16-next.2 - - @backstage/plugin-jenkins-backend@0.3.1-next.2 - - @backstage/plugin-kafka-backend@0.3.5-next.2 - - @backstage/plugin-lighthouse-backend@0.3.4-next.2 - - @backstage/plugin-nomad-backend@0.1.9-next.2 - - @backstage/plugin-permission-backend@0.5.30-next.2 - - @backstage/plugin-permission-node@0.7.18-next.2 - - @backstage/plugin-proxy-backend@0.4.5-next.2 - - @backstage/plugin-search-backend@1.4.7-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.11-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.11-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.11-next.2 - - @backstage/plugin-search-backend-node@1.2.11-next.2 - - @backstage/plugin-todo-backend@0.3.5-next.2 - - @backstage/plugin-rollbar-backend@0.1.52-next.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.8-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.24-next.2 - - @backstage/plugin-azure-sites-backend@0.1.17-next.2 - - @backstage/plugin-explore-backend@0.0.17-next.2 - - @backstage/plugin-graphql-backend@0.2.1-next.2 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.39-next.2 - - @backstage/plugin-tech-insights-node@0.4.13-next.2 - -## 0.2.89-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.15.0-next.1 - - @backstage/plugin-catalog-node@1.5.0-next.1 - - @backstage/integration@1.7.2-next.0 - - @backstage/plugin-auth-backend@0.20.0-next.1 - - @backstage/plugin-techdocs-backend@1.9.0-next.1 - - @backstage/plugin-scaffolder-backend@1.19.0-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4-next.1 - - @backstage/plugin-jenkins-backend@0.3.1-next.1 - - @backstage/plugin-kubernetes-backend@0.13.1-next.1 - - @backstage/plugin-lighthouse-backend@0.3.4-next.1 - - @backstage/plugin-linguist-backend@0.5.4-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.11-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.11-next.1 - - @backstage/plugin-todo-backend@0.3.5-next.1 - - example-app@0.2.89-next.1 - - @backstage/backend-common@0.19.9-next.1 - - @backstage/plugin-adr-backend@0.4.4-next.1 - - @backstage/plugin-code-coverage-backend@0.2.21-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.8-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.24-next.1 - - @backstage/backend-tasks@0.5.12-next.1 - - @backstage/plugin-app-backend@0.3.55-next.1 - - @backstage/plugin-auth-node@0.4.1-next.1 - - @backstage/plugin-badges-backend@0.3.4-next.1 - - @backstage/plugin-entity-feedback-backend@0.2.4-next.1 - - @backstage/plugin-events-backend@0.2.16-next.1 - - @backstage/plugin-permission-node@0.7.18-next.1 - - @backstage/plugin-playlist-backend@0.3.11-next.1 - - @backstage/plugin-proxy-backend@0.4.5-next.1 - - @backstage/plugin-rollbar-backend@0.1.52-next.1 - - @backstage/plugin-search-backend@1.4.7-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.11-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.16-next.1 - - @backstage/plugin-tech-insights-backend@0.5.21-next.1 - - @backstage/plugin-azure-devops-backend@0.4.4-next.1 - - @backstage/plugin-azure-sites-backend@0.1.17-next.1 - - @backstage/plugin-devtools-backend@0.2.4-next.1 - - @backstage/plugin-explore-backend@0.0.17-next.1 - - @backstage/plugin-graphql-backend@0.2.1-next.1 - - @backstage/plugin-kafka-backend@0.3.5-next.1 - - @backstage/plugin-nomad-backend@0.1.9-next.1 - - @backstage/plugin-permission-backend@0.5.30-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.10-next.1 - - @backstage/plugin-search-backend-node@1.2.11-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.39-next.1 - - @backstage/plugin-tech-insights-node@0.4.13-next.1 - - @backstage/catalog-client@1.4.5 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.4-next.1 - - @backstage/plugin-events-node@0.2.16-next.1 - - @backstage/plugin-permission-common@0.7.9 - - @backstage/plugin-search-common@1.2.7 - -## 0.2.89-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-node@1.2.11-next.0 - - @backstage/plugin-techdocs-backend@1.8.1-next.0 - - @backstage/plugin-code-coverage-backend@0.2.21-next.0 - - @backstage/plugin-scaffolder-backend@1.19.0-next.0 - - @backstage/plugin-catalog-backend@1.15.0-next.0 - - @backstage/plugin-search-backend@1.4.7-next.0 - - @backstage/plugin-tech-insights-backend@0.5.21-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.11-next.0 - - @backstage/plugin-kafka-backend@0.3.5-next.0 - - @backstage/plugin-proxy-backend@0.4.5-next.0 - - @backstage/plugin-auth-backend@0.20.0-next.0 - - @backstage/backend-common@0.19.9-next.0 - - @backstage/integration@1.7.1 - - @backstage/plugin-app-backend@0.3.55-next.0 - - @backstage/plugin-devtools-backend@0.2.4-next.0 - - example-app@0.2.89-next.0 - - @backstage/backend-tasks@0.5.12-next.0 - - @backstage/catalog-client@1.4.5 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/plugin-adr-backend@0.4.4-next.0 - - @backstage/plugin-auth-node@0.4.1-next.0 - - @backstage/plugin-azure-devops-backend@0.4.4-next.0 - - @backstage/plugin-azure-sites-backend@0.1.17-next.0 - - @backstage/plugin-badges-backend@0.3.4-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.4-next.0 - - @backstage/plugin-catalog-node@1.4.8-next.0 - - @backstage/plugin-entity-feedback-backend@0.2.4-next.0 - - @backstage/plugin-events-backend@0.2.16-next.0 - - @backstage/plugin-events-node@0.2.16-next.0 - - @backstage/plugin-explore-backend@0.0.17-next.0 - - @backstage/plugin-graphql-backend@0.2.1-next.0 - - @backstage/plugin-jenkins-backend@0.3.1-next.0 - - @backstage/plugin-kubernetes-backend@0.13.1-next.0 - - @backstage/plugin-lighthouse-backend@0.3.4-next.0 - - @backstage/plugin-linguist-backend@0.5.4-next.0 - - @backstage/plugin-nomad-backend@0.1.9-next.0 - - @backstage/plugin-permission-backend@0.5.30-next.0 - - @backstage/plugin-permission-common@0.7.9 - - @backstage/plugin-permission-node@0.7.18-next.0 - - @backstage/plugin-playlist-backend@0.3.11-next.0 - - @backstage/plugin-rollbar-backend@0.1.52-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.8-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.24-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.11-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.10-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.11-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.16-next.0 - - @backstage/plugin-search-common@1.2.7 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.39-next.0 - - @backstage/plugin-tech-insights-node@0.4.13-next.0 - - @backstage/plugin-todo-backend@0.3.5-next.0 - -## 0.2.88 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-nomad-backend@0.1.8 - - @backstage/backend-tasks@0.5.11 - - @backstage/backend-common@0.19.8 - - @backstage/plugin-scaffolder-backend@1.18.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.9 - - @backstage/integration@1.7.1 - - @backstage/plugin-playlist-backend@0.3.10 - - @backstage/plugin-techdocs-backend@1.8.0 - - @backstage/plugin-auth-backend@0.19.3 - - @backstage/plugin-rollbar-backend@0.1.51 - - @backstage/plugin-catalog-backend@1.14.0 - - @backstage/plugin-catalog-node@1.4.7 - - @backstage/plugin-auth-node@0.4.0 - - @backstage/plugin-graphql-backend@0.2.0 - - @backstage/catalog-model@1.4.3 - - @backstage/plugin-badges-backend@0.3.3 - - @backstage/plugin-tech-insights-backend@0.5.20 - - @backstage/plugin-kubernetes-backend@0.13.0 - - @backstage/plugin-jenkins-backend@0.3.0 - - @backstage/plugin-code-coverage-backend@0.2.20 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.23 - - @backstage/plugin-search-backend@1.4.6 - - example-app@0.2.88 - - @backstage/plugin-lighthouse-backend@0.3.3 - - @backstage/plugin-linguist-backend@0.5.3 - - @backstage/plugin-search-backend-module-catalog@0.1.10 - - @backstage/plugin-search-backend-module-explore@0.1.10 - - @backstage/plugin-search-backend-module-techdocs@0.1.10 - - @backstage/plugin-search-backend-node@1.2.10 - - @backstage/plugin-tech-insights-node@0.4.12 - - @backstage/plugin-adr-backend@0.4.3 - - @backstage/plugin-app-backend@0.3.54 - - @backstage/plugin-azure-devops-backend@0.4.3 - - @backstage/plugin-azure-sites-backend@0.1.16 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.3 - - @backstage/plugin-devtools-backend@0.2.3 - - @backstage/plugin-entity-feedback-backend@0.2.3 - - @backstage/plugin-events-backend@0.2.15 - - @backstage/plugin-explore-backend@0.0.16 - - @backstage/plugin-kafka-backend@0.3.3 - - @backstage/plugin-permission-backend@0.5.29 - - @backstage/plugin-permission-node@0.7.17 - - @backstage/plugin-proxy-backend@0.4.3 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.7 - - @backstage/plugin-search-backend-module-pg@0.5.15 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.38 - - @backstage/plugin-todo-backend@0.3.4 - - @backstage/catalog-client@1.4.5 - - @backstage/config@1.1.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.3 - - @backstage/plugin-events-node@0.2.15 - - @backstage/plugin-permission-common@0.7.9 - - @backstage/plugin-search-common@1.2.7 - -## 0.2.88-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-nomad-backend@0.1.8-next.2 - - @backstage/backend-common@0.19.8-next.2 - - @backstage/plugin-scaffolder-backend@1.18.0-next.2 - - @backstage/plugin-techdocs-backend@1.8.0-next.2 - - @backstage/plugin-auth-node@0.4.0-next.2 - - @backstage/plugin-catalog-backend@1.14.0-next.2 - - @backstage/catalog-model@1.4.3-next.0 - - @backstage/integration@1.7.1-next.1 - - @backstage/plugin-kubernetes-backend@0.12.3-next.2 - - @backstage/plugin-jenkins-backend@0.2.9-next.2 - - @backstage/plugin-auth-backend@0.19.3-next.2 - - @backstage/backend-tasks@0.5.11-next.2 - - @backstage/plugin-adr-backend@0.4.3-next.2 - - @backstage/plugin-app-backend@0.3.54-next.2 - - @backstage/plugin-azure-devops-backend@0.4.3-next.2 - - @backstage/plugin-azure-sites-backend@0.1.16-next.2 - - @backstage/plugin-badges-backend@0.3.3-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.3-next.2 - - @backstage/plugin-catalog-node@1.4.7-next.2 - - @backstage/plugin-code-coverage-backend@0.2.20-next.2 - - @backstage/plugin-devtools-backend@0.2.3-next.2 - - @backstage/plugin-entity-feedback-backend@0.2.3-next.2 - - @backstage/plugin-events-backend@0.2.15-next.2 - - @backstage/plugin-explore-backend@0.0.16-next.2 - - @backstage/plugin-graphql-backend@0.1.44-next.2 - - @backstage/plugin-kafka-backend@0.3.3-next.2 - - @backstage/plugin-lighthouse-backend@0.3.3-next.2 - - @backstage/plugin-linguist-backend@0.5.3-next.2 - - @backstage/plugin-permission-backend@0.5.29-next.2 - - @backstage/plugin-permission-node@0.7.17-next.2 - - @backstage/plugin-playlist-backend@0.3.10-next.2 - - @backstage/plugin-proxy-backend@0.4.3-next.2 - - @backstage/plugin-rollbar-backend@0.1.51-next.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.7-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.23-next.2 - - @backstage/plugin-search-backend@1.4.6-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.10-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.9-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.10-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.15-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.10-next.2 - - @backstage/plugin-search-backend-node@1.2.10-next.2 - - @backstage/plugin-tech-insights-backend@0.5.20-next.2 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.38-next.2 - - @backstage/plugin-tech-insights-node@0.4.12-next.2 - - @backstage/plugin-todo-backend@0.3.4-next.2 - - example-app@0.2.88-next.2 - - @backstage/catalog-client@1.4.5-next.0 - - @backstage/config@1.1.1-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.3-next.2 - - @backstage/plugin-events-node@0.2.15-next.2 - - @backstage/plugin-permission-common@0.7.9-next.0 - - @backstage/plugin-search-common@1.2.7-next.0 - -## 0.2.88-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-tasks@0.5.10-next.1 - - @backstage/plugin-catalog-backend@1.14.0-next.1 - - @backstage/plugin-catalog-node@1.4.6-next.1 - - @backstage/backend-common@0.19.7-next.1 - - @backstage/plugin-scaffolder-backend@1.18.0-next.1 - - @backstage/plugin-badges-backend@0.3.2-next.1 - - @backstage/plugin-lighthouse-backend@0.3.2-next.1 - - @backstage/plugin-linguist-backend@0.5.2-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.9-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.9-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.9-next.1 - - @backstage/plugin-search-backend-node@1.2.9-next.1 - - @backstage/plugin-tech-insights-backend@0.5.19-next.1 - - @backstage/plugin-tech-insights-node@0.4.11-next.1 - - example-app@0.2.88-next.1 - - @backstage/plugin-auth-backend@0.19.2-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.2-next.1 - - @backstage/plugin-kubernetes-backend@0.12.2-next.1 - - @backstage/plugin-todo-backend@0.3.3-next.1 - - @backstage/plugin-adr-backend@0.4.2-next.1 - - @backstage/plugin-app-backend@0.3.53-next.1 - - @backstage/plugin-auth-node@0.3.2-next.1 - - @backstage/plugin-azure-devops-backend@0.4.2-next.1 - - @backstage/plugin-azure-sites-backend@0.1.15-next.1 - - @backstage/plugin-code-coverage-backend@0.2.19-next.1 - - @backstage/plugin-devtools-backend@0.2.2-next.1 - - @backstage/plugin-entity-feedback-backend@0.2.2-next.1 - - @backstage/plugin-events-backend@0.2.14-next.1 - - @backstage/plugin-explore-backend@0.0.15-next.1 - - @backstage/plugin-graphql-backend@0.1.43-next.1 - - @backstage/plugin-jenkins-backend@0.2.8-next.1 - - @backstage/plugin-kafka-backend@0.3.2-next.1 - - @backstage/plugin-nomad-backend@0.1.7-next.1 - - @backstage/plugin-permission-backend@0.5.28-next.1 - - @backstage/plugin-permission-node@0.7.16-next.1 - - @backstage/plugin-playlist-backend@0.3.9-next.1 - - @backstage/plugin-proxy-backend@0.4.2-next.1 - - @backstage/plugin-rollbar-backend@0.1.50-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.6-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.22-next.1 - - @backstage/plugin-search-backend@1.4.5-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.8-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.14-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.37-next.1 - - @backstage/plugin-techdocs-backend@1.7.2-next.1 - - @backstage/config@1.1.0 - - @backstage/catalog-client@1.4.4 - - @backstage/catalog-model@1.4.2 - - @backstage/integration@1.7.1-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.2-next.1 - - @backstage/plugin-events-node@0.2.14-next.1 - - @backstage/plugin-permission-common@0.7.8 - - @backstage/plugin-search-common@1.2.6 - -## 0.2.88-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-module-elasticsearch@1.3.8-next.0 - - @backstage/integration@1.7.1-next.0 - - @backstage/plugin-playlist-backend@0.3.9-next.0 - - @backstage/plugin-rollbar-backend@0.1.50-next.0 - - @backstage/plugin-catalog-backend@1.14.0-next.0 - - @backstage/plugin-tech-insights-backend@0.5.19-next.0 - - @backstage/plugin-code-coverage-backend@0.2.19-next.0 - - @backstage/plugin-auth-node@0.3.2-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.22-next.0 - - @backstage/backend-common@0.19.7-next.0 - - example-app@0.2.88-next.0 - - @backstage/plugin-adr-backend@0.4.2-next.0 - - @backstage/plugin-scaffolder-backend@1.17.3-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.6-next.0 - - @backstage/plugin-techdocs-backend@1.7.2-next.0 - - @backstage/plugin-todo-backend@0.3.3-next.0 - - @backstage/config@1.1.0 - - @backstage/backend-tasks@0.5.10-next.0 - - @backstage/catalog-client@1.4.4 - - @backstage/catalog-model@1.4.2 - - @backstage/plugin-app-backend@0.3.53-next.0 - - @backstage/plugin-auth-backend@0.19.2-next.0 - - @backstage/plugin-azure-devops-backend@0.4.2-next.0 - - @backstage/plugin-azure-sites-backend@0.1.15-next.0 - - @backstage/plugin-badges-backend@0.3.2-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.2-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.2-next.0 - - @backstage/plugin-catalog-node@1.4.6-next.0 - - @backstage/plugin-devtools-backend@0.2.2-next.0 - - @backstage/plugin-entity-feedback-backend@0.2.2-next.0 - - @backstage/plugin-events-backend@0.2.14-next.0 - - @backstage/plugin-events-node@0.2.14-next.0 - - @backstage/plugin-explore-backend@0.0.15-next.0 - - @backstage/plugin-graphql-backend@0.1.43-next.0 - - @backstage/plugin-jenkins-backend@0.2.8-next.0 - - @backstage/plugin-kafka-backend@0.3.2-next.0 - - @backstage/plugin-kubernetes-backend@0.12.2-next.0 - - @backstage/plugin-lighthouse-backend@0.3.2-next.0 - - @backstage/plugin-linguist-backend@0.5.2-next.0 - - @backstage/plugin-nomad-backend@0.1.7-next.0 - - @backstage/plugin-permission-backend@0.5.28-next.0 - - @backstage/plugin-permission-common@0.7.8 - - @backstage/plugin-permission-node@0.7.16-next.0 - - @backstage/plugin-proxy-backend@0.4.2-next.0 - - @backstage/plugin-search-backend@1.4.5-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.9-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.9-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.14-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.9-next.0 - - @backstage/plugin-search-backend-node@1.2.9-next.0 - - @backstage/plugin-search-common@1.2.6 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.37-next.0 - - @backstage/plugin-tech-insights-node@0.4.11-next.0 - -## 0.2.87 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-module-pg@0.5.12 - - @backstage/plugin-catalog-backend@1.13.0 - - @backstage/plugin-kubernetes-backend@0.12.0 - - @backstage/plugin-techdocs-backend@1.7.0 - - @backstage/plugin-auth-backend@0.19.0 - - @backstage/plugin-proxy-backend@0.4.0 - - @backstage/plugin-adr-backend@0.4.0 - - @backstage/plugin-azure-devops-backend@0.4.0 - - @backstage/plugin-badges-backend@0.3.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.0 - - @backstage/plugin-devtools-backend@0.2.0 - - @backstage/plugin-entity-feedback-backend@0.2.0 - - @backstage/plugin-kafka-backend@0.3.0 - - @backstage/plugin-lighthouse-backend@0.3.0 - - @backstage/plugin-linguist-backend@0.5.0 - - @backstage/plugin-todo-backend@0.3.0 - - @backstage/plugin-app-backend@0.3.51 - - @backstage/plugin-events-backend@0.2.12 - - @backstage/plugin-permission-backend@0.5.26 - - @backstage/plugin-scaffolder-backend@1.17.0 - - @backstage/plugin-search-backend@1.4.3 - - @backstage/plugin-search-backend-module-catalog@0.1.7 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.6 - - @backstage/plugin-search-backend-module-explore@0.1.7 - - @backstage/plugin-search-backend-module-techdocs@0.1.7 - - @backstage/plugin-code-coverage-backend@0.2.17 - - @backstage/backend-tasks@0.5.8 - - @backstage/backend-common@0.19.5 - - @backstage/plugin-auth-node@0.3.0 - - @backstage/config@1.1.0 - - @backstage/catalog-client@1.4.4 - - @backstage/catalog-model@1.4.2 - - @backstage/integration@1.7.0 - - @backstage/plugin-permission-common@0.7.8 - - @backstage/plugin-search-common@1.2.6 - - @backstage/plugin-permission-node@0.7.14 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.35 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.0 - - @backstage/plugin-tech-insights-backend@0.5.17 - - example-app@0.2.87 - - @backstage/plugin-catalog-node@1.4.4 - - @backstage/plugin-playlist-backend@0.3.7 - - @backstage/plugin-rollbar-backend@0.1.48 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.4 - - @backstage/plugin-azure-sites-backend@0.1.13 - - @backstage/plugin-events-node@0.2.12 - - @backstage/plugin-explore-backend@0.0.13 - - @backstage/plugin-graphql-backend@0.1.41 - - @backstage/plugin-jenkins-backend@0.2.6 - - @backstage/plugin-nomad-backend@0.1.5 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.20 - - @backstage/plugin-search-backend-node@1.2.7 - - @backstage/plugin-tech-insights-node@0.4.9 - -## 0.2.87-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-techdocs-backend@1.7.0-next.3 - - @backstage/plugin-proxy-backend@0.4.0-next.3 - - @backstage/plugin-adr-backend@0.4.0-next.3 - - @backstage/plugin-auth-backend@0.19.0-next.3 - - @backstage/plugin-azure-devops-backend@0.4.0-next.3 - - @backstage/plugin-badges-backend@0.3.0-next.3 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.0-next.3 - - @backstage/plugin-devtools-backend@0.2.0-next.3 - - @backstage/plugin-entity-feedback-backend@0.2.0-next.3 - - @backstage/plugin-kafka-backend@0.3.0-next.3 - - @backstage/plugin-lighthouse-backend@0.3.0-next.3 - - @backstage/plugin-linguist-backend@0.5.0-next.3 - - @backstage/plugin-todo-backend@0.3.0-next.3 - - @backstage/plugin-app-backend@0.3.51-next.3 - - @backstage/plugin-catalog-backend@1.13.0-next.3 - - @backstage/plugin-events-backend@0.2.12-next.3 - - @backstage/plugin-kubernetes-backend@0.11.6-next.3 - - @backstage/plugin-permission-backend@0.5.26-next.3 - - @backstage/plugin-scaffolder-backend@1.17.0-next.3 - - @backstage/plugin-search-backend@1.4.3-next.3 - - @backstage/plugin-search-backend-module-catalog@0.1.7-next.3 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.6-next.3 - - @backstage/plugin-search-backend-module-explore@0.1.7-next.3 - - @backstage/plugin-search-backend-module-pg@0.5.12-next.3 - - @backstage/plugin-search-backend-module-techdocs@0.1.7-next.3 - - @backstage/catalog-client@1.4.4-next.2 - - @backstage/catalog-model@1.4.2-next.2 - - @backstage/config@1.1.0-next.2 - - @backstage/integration@1.7.0-next.3 - - @backstage/plugin-permission-common@0.7.8-next.2 - - @backstage/plugin-search-common@1.2.6-next.2 - - @backstage/plugin-permission-node@0.7.14-next.3 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.0-next.0 - - example-app@0.2.87-next.3 - - @backstage/backend-common@0.19.5-next.3 - - @backstage/plugin-explore-backend@0.0.13-next.3 - - @backstage/backend-tasks@0.5.8-next.3 - - @backstage/plugin-auth-node@0.3.0-next.3 - - @backstage/plugin-azure-sites-backend@0.1.13-next.3 - - @backstage/plugin-catalog-node@1.4.4-next.3 - - @backstage/plugin-code-coverage-backend@0.2.17-next.3 - - @backstage/plugin-events-node@0.2.12-next.3 - - @backstage/plugin-graphql-backend@0.1.41-next.3 - - @backstage/plugin-jenkins-backend@0.2.6-next.3 - - @backstage/plugin-nomad-backend@0.1.5-next.3 - - @backstage/plugin-playlist-backend@0.3.7-next.3 - - @backstage/plugin-rollbar-backend@0.1.48-next.3 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.4-next.3 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.20-next.3 - - @backstage/plugin-search-backend-node@1.2.7-next.3 - - @backstage/plugin-tech-insights-backend@0.5.17-next.3 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.35-next.3 - - @backstage/plugin-tech-insights-node@0.4.9-next.3 - -## 0.2.87-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.16.6-next.2 - - @backstage/plugin-code-coverage-backend@0.2.17-next.2 - - @backstage/plugin-permission-backend@0.5.26-next.2 - - @backstage/plugin-catalog-backend@1.13.0-next.2 - - @backstage/plugin-badges-backend@0.2.6-next.2 - - @backstage/config@1.1.0-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.35-next.2 - - @backstage/plugin-tech-insights-backend@0.5.17-next.2 - - @backstage/backend-tasks@0.5.8-next.2 - - example-app@0.2.87-next.2 - - @backstage/backend-common@0.19.5-next.2 - - @backstage/plugin-app-backend@0.3.51-next.2 - - @backstage/plugin-auth-backend@0.18.9-next.2 - - @backstage/plugin-auth-node@0.3.0-next.2 - - @backstage/plugin-catalog-node@1.4.4-next.2 - - @backstage/plugin-entity-feedback-backend@0.1.9-next.2 - - @backstage/plugin-events-backend@0.2.12-next.2 - - @backstage/plugin-kubernetes-backend@0.11.6-next.2 - - @backstage/plugin-linguist-backend@0.4.3-next.2 - - @backstage/plugin-permission-node@0.7.14-next.2 - - @backstage/plugin-playlist-backend@0.3.7-next.2 - - @backstage/plugin-proxy-backend@0.3.3-next.2 - - @backstage/plugin-rollbar-backend@0.1.48-next.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.4-next.2 - - @backstage/plugin-search-backend@1.4.3-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.7-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.7-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.12-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.7-next.2 - - @backstage/plugin-techdocs-backend@1.7.0-next.2 - - @backstage/integration@1.7.0-next.2 - - @backstage/plugin-devtools-backend@0.1.6-next.2 - - @backstage/catalog-model@1.4.2-next.1 - - @backstage/plugin-adr-backend@0.3.9-next.2 - - @backstage/plugin-azure-devops-backend@0.3.30-next.2 - - @backstage/plugin-azure-sites-backend@0.1.13-next.2 - - @backstage/plugin-explore-backend@0.0.13-next.2 - - @backstage/plugin-graphql-backend@0.1.41-next.2 - - @backstage/plugin-jenkins-backend@0.2.6-next.2 - - @backstage/plugin-kafka-backend@0.2.44-next.2 - - @backstage/plugin-lighthouse-backend@0.2.7-next.2 - - @backstage/plugin-nomad-backend@0.1.5-next.2 - - @backstage/plugin-permission-common@0.7.8-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.20-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.6-next.2 - - @backstage/plugin-search-backend-node@1.2.7-next.2 - - @backstage/plugin-tech-insights-node@0.4.9-next.2 - - @backstage/plugin-todo-backend@0.2.3-next.2 - - @backstage/catalog-client@1.4.4-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.2.3-next.2 - - @backstage/plugin-events-node@0.2.12-next.2 - - @backstage/plugin-search-common@1.2.6-next.1 - -## 0.2.87-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-module-pg@0.5.12-next.1 - - @backstage/plugin-kubernetes-backend@0.11.6-next.1 - - @backstage/plugin-catalog-backend@1.13.0-next.1 - - @backstage/plugin-auth-backend@0.18.9-next.1 - - @backstage/config@1.1.0-next.0 - - @backstage/integration@1.7.0-next.1 - - @backstage/plugin-devtools-backend@0.1.6-next.1 - - @backstage/backend-tasks@0.5.8-next.1 - - @backstage/plugin-techdocs-backend@1.7.0-next.1 - - @backstage/plugin-scaffolder-backend@1.16.6-next.1 - - @backstage/plugin-code-coverage-backend@0.2.17-next.1 - - example-app@0.2.87-next.1 - - @backstage/backend-common@0.19.5-next.1 - - @backstage/catalog-model@1.4.2-next.0 - - @backstage/plugin-adr-backend@0.3.9-next.1 - - @backstage/plugin-app-backend@0.3.51-next.1 - - @backstage/plugin-auth-node@0.3.0-next.1 - - @backstage/plugin-azure-devops-backend@0.3.30-next.1 - - @backstage/plugin-azure-sites-backend@0.1.13-next.1 - - @backstage/plugin-badges-backend@0.2.6-next.1 - - @backstage/plugin-entity-feedback-backend@0.1.9-next.1 - - @backstage/plugin-events-backend@0.2.12-next.1 - - @backstage/plugin-explore-backend@0.0.13-next.1 - - @backstage/plugin-graphql-backend@0.1.41-next.1 - - @backstage/plugin-jenkins-backend@0.2.6-next.1 - - @backstage/plugin-kafka-backend@0.2.44-next.1 - - @backstage/plugin-lighthouse-backend@0.2.7-next.1 - - @backstage/plugin-linguist-backend@0.4.3-next.1 - - @backstage/plugin-nomad-backend@0.1.5-next.1 - - @backstage/plugin-permission-backend@0.5.26-next.1 - - @backstage/plugin-permission-common@0.7.8-next.0 - - @backstage/plugin-permission-node@0.7.14-next.1 - - @backstage/plugin-playlist-backend@0.3.7-next.1 - - @backstage/plugin-proxy-backend@0.3.3-next.1 - - @backstage/plugin-rollbar-backend@0.1.48-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.4-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.20-next.1 - - @backstage/plugin-search-backend@1.4.3-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.7-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.6-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.7-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.7-next.1 - - @backstage/plugin-search-backend-node@1.2.7-next.1 - - @backstage/plugin-tech-insights-backend@0.5.17-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.35-next.1 - - @backstage/plugin-tech-insights-node@0.4.9-next.1 - - @backstage/plugin-todo-backend@0.2.3-next.1 - - @backstage/plugin-catalog-node@1.4.4-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.2.3-next.1 - - @backstage/plugin-events-node@0.2.12-next.1 - - @backstage/catalog-client@1.4.4-next.0 - - @backstage/plugin-search-common@1.2.6-next.0 - -## 0.2.87-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.12.2-next.0 - - @backstage/plugin-auth-backend@0.18.8-next.0 - - @backstage/plugin-code-coverage-backend@0.2.16-next.0 - - @backstage/plugin-scaffolder-backend@1.16.3-next.0 - - @backstage/plugin-auth-node@0.3.0-next.0 - - @backstage/backend-common@0.19.4-next.0 - - @backstage/plugin-linguist-backend@0.4.2-next.0 - - @backstage/integration@1.7.0-next.0 - - @backstage/plugin-entity-feedback-backend@0.1.8-next.0 - - @backstage/plugin-tech-insights-backend@0.5.16-next.0 - - @backstage/backend-tasks@0.5.7-next.0 - - @backstage/plugin-app-backend@0.3.50-next.0 - - example-app@0.2.87-next.0 - - @backstage/catalog-client@1.4.3 - - @backstage/catalog-model@1.4.1 - - @backstage/config@1.0.8 - - @backstage/plugin-adr-backend@0.3.8-next.0 - - @backstage/plugin-azure-devops-backend@0.3.29-next.0 - - @backstage/plugin-azure-sites-backend@0.1.12-next.0 - - @backstage/plugin-badges-backend@0.2.5-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.2.2-next.0 - - @backstage/plugin-catalog-node@1.4.3-next.0 - - @backstage/plugin-devtools-backend@0.1.5-next.0 - - @backstage/plugin-events-backend@0.2.11-next.0 - - @backstage/plugin-events-node@0.2.11-next.0 - - @backstage/plugin-explore-backend@0.0.12-next.0 - - @backstage/plugin-graphql-backend@0.1.40-next.0 - - @backstage/plugin-jenkins-backend@0.2.5-next.0 - - @backstage/plugin-kafka-backend@0.2.43-next.0 - - @backstage/plugin-kubernetes-backend@0.11.5-next.0 - - @backstage/plugin-lighthouse-backend@0.2.6-next.0 - - @backstage/plugin-nomad-backend@0.1.4-next.0 - - @backstage/plugin-permission-backend@0.5.25-next.0 - - @backstage/plugin-permission-common@0.7.7 - - @backstage/plugin-permission-node@0.7.13-next.0 - - @backstage/plugin-playlist-backend@0.3.6-next.0 - - @backstage/plugin-proxy-backend@0.3.2-next.0 - - @backstage/plugin-rollbar-backend@0.1.47-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.3-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.19-next.0 - - @backstage/plugin-search-backend@1.4.2-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.5-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.11-next.0 - - @backstage/plugin-search-backend-node@1.2.6-next.0 - - @backstage/plugin-search-common@1.2.5 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.34-next.0 - - @backstage/plugin-tech-insights-node@0.4.8-next.0 - - @backstage/plugin-techdocs-backend@1.6.7-next.0 - - @backstage/plugin-todo-backend@0.2.2-next.0 - -## 0.2.86 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-module-elasticsearch@1.3.3 - - @backstage/plugin-search-backend-module-pg@0.5.9 - - @backstage/plugin-azure-devops-backend@0.3.27 - - @backstage/plugin-kubernetes-backend@0.11.3 - - @backstage/plugin-lighthouse-backend@0.2.4 - - @backstage/plugin-permission-backend@0.5.23 - - @backstage/plugin-scaffolder-backend@1.16.0 - - @backstage/plugin-devtools-backend@0.1.3 - - @backstage/plugin-techdocs-backend@1.6.5 - - @backstage/backend-common@0.19.2 - - @backstage/plugin-catalog-backend@1.12.0 - - @backstage/plugin-badges-backend@0.2.3 - - @backstage/plugin-events-backend@0.2.9 - - @backstage/plugin-search-backend@1.4.0 - - @backstage/plugin-kafka-backend@0.2.41 - - @backstage/plugin-proxy-backend@0.3.0 - - @backstage/plugin-todo-backend@0.2.0 - - @backstage/plugin-app-backend@0.3.48 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.1 - - @backstage/plugin-auth-backend@0.18.6 - - @backstage/plugin-explore-backend@0.0.10 - - @backstage/plugin-catalog-backend-module-unprocessed@0.2.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.17 - - @backstage/plugin-entity-feedback-backend@0.1.6 - - @backstage/plugin-code-coverage-backend@0.2.14 - - @backstage/plugin-search-backend-node@1.2.4 - - @backstage/plugin-linguist-backend@0.4.0 - - @backstage/plugin-playlist-backend@0.3.4 - - @backstage/plugin-jenkins-backend@0.2.3 - - @backstage/plugin-nomad-backend@0.1.2 - - @backstage/plugin-catalog-node@1.4.1 - - @backstage/plugin-events-node@0.2.9 - - @backstage/plugin-auth-node@0.2.17 - - @backstage/integration@1.6.0 - - @backstage/backend-tasks@0.5.5 - - example-app@0.2.86 - - @backstage/plugin-adr-backend@0.3.6 - - @backstage/plugin-azure-sites-backend@0.1.10 - - @backstage/plugin-graphql-backend@0.1.38 - - @backstage/plugin-permission-node@0.7.11 - - @backstage/plugin-rollbar-backend@0.1.45 - - @backstage/plugin-tech-insights-backend@0.5.14 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.32 - - @backstage/plugin-tech-insights-node@0.4.6 - - @backstage/catalog-client@1.4.3 - - @backstage/catalog-model@1.4.1 - - @backstage/config@1.0.8 - - @backstage/plugin-permission-common@0.7.7 - - @backstage/plugin-search-common@1.2.5 - -## 0.2.86-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.18.6-next.2 - - @backstage/plugin-scaffolder-backend@1.15.2-next.2 - - @backstage/plugin-explore-backend@0.0.10-next.2 - - @backstage/plugin-catalog-backend@1.12.0-next.2 - - @backstage/plugin-proxy-backend@0.3.0-next.2 - - @backstage/backend-tasks@0.5.5-next.2 - - @backstage/plugin-app-backend@0.3.48-next.2 - - @backstage/plugin-linguist-backend@0.4.0-next.2 - - @backstage/plugin-techdocs-backend@1.6.5-next.2 - - @backstage/backend-common@0.19.2-next.2 - - example-app@0.2.86-next.2 - - @backstage/plugin-adr-backend@0.3.6-next.2 - - @backstage/plugin-azure-devops-backend@0.3.27-next.2 - - @backstage/plugin-badges-backend@0.2.3-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.2.0-next.2 - - @backstage/plugin-catalog-node@1.4.1-next.2 - - @backstage/plugin-devtools-backend@0.1.3-next.2 - - @backstage/plugin-entity-feedback-backend@0.1.6-next.2 - - @backstage/plugin-events-backend@0.2.9-next.2 - - @backstage/plugin-events-node@0.2.9-next.2 - - @backstage/plugin-kafka-backend@0.2.41-next.2 - - @backstage/plugin-kubernetes-backend@0.11.3-next.2 - - @backstage/plugin-lighthouse-backend@0.2.4-next.2 - - @backstage/plugin-permission-backend@0.5.23-next.2 - - @backstage/plugin-permission-node@0.7.11-next.2 - - @backstage/plugin-search-backend@1.4.0-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.3-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.9-next.2 - - @backstage/plugin-search-backend-node@1.2.4-next.2 - - @backstage/plugin-todo-backend@0.2.0-next.2 - - @backstage/plugin-tech-insights-backend@0.5.14-next.2 - - @backstage/plugin-tech-insights-node@0.4.6-next.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.1-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.17-next.2 - - @backstage/plugin-auth-node@0.2.17-next.2 - - @backstage/plugin-azure-sites-backend@0.1.10-next.2 - - @backstage/plugin-code-coverage-backend@0.2.14-next.2 - - @backstage/plugin-graphql-backend@0.1.38-next.2 - - @backstage/plugin-jenkins-backend@0.2.3-next.2 - - @backstage/plugin-nomad-backend@0.1.2-next.2 - - @backstage/plugin-playlist-backend@0.3.4-next.2 - - @backstage/plugin-rollbar-backend@0.1.45-next.2 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.32-next.2 - -## 0.2.86-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-module-elasticsearch@1.3.3-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.9-next.1 - - @backstage/plugin-azure-devops-backend@0.3.27-next.1 - - @backstage/plugin-kubernetes-backend@0.11.3-next.1 - - @backstage/plugin-lighthouse-backend@0.2.4-next.1 - - @backstage/plugin-permission-backend@0.5.23-next.1 - - @backstage/plugin-scaffolder-backend@1.15.2-next.1 - - @backstage/plugin-devtools-backend@0.1.3-next.1 - - @backstage/plugin-techdocs-backend@1.6.5-next.1 - - @backstage/backend-common@0.19.2-next.1 - - @backstage/plugin-catalog-backend@1.12.0-next.1 - - @backstage/plugin-badges-backend@0.2.3-next.1 - - @backstage/plugin-events-backend@0.2.9-next.1 - - @backstage/plugin-search-backend@1.4.0-next.1 - - @backstage/plugin-kafka-backend@0.2.41-next.1 - - @backstage/plugin-proxy-backend@0.2.42-next.1 - - @backstage/plugin-todo-backend@0.2.0-next.1 - - @backstage/plugin-app-backend@0.3.48-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.1-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.2.0-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.17-next.1 - - @backstage/plugin-entity-feedback-backend@0.1.6-next.1 - - @backstage/plugin-code-coverage-backend@0.2.14-next.1 - - @backstage/plugin-search-backend-node@1.2.4-next.1 - - @backstage/plugin-linguist-backend@0.3.2-next.1 - - @backstage/plugin-playlist-backend@0.3.4-next.1 - - @backstage/plugin-explore-backend@0.0.10-next.1 - - @backstage/plugin-jenkins-backend@0.2.3-next.1 - - @backstage/plugin-nomad-backend@0.1.2-next.1 - - @backstage/plugin-catalog-node@1.4.1-next.1 - - @backstage/plugin-events-node@0.2.9-next.1 - - @backstage/plugin-auth-node@0.2.17-next.1 - - @backstage/plugin-auth-backend@0.18.6-next.1 - - @backstage/backend-tasks@0.5.5-next.1 - - @backstage/plugin-adr-backend@0.3.6-next.1 - - @backstage/plugin-azure-sites-backend@0.1.10-next.1 - - @backstage/plugin-graphql-backend@0.1.38-next.1 - - @backstage/plugin-permission-node@0.7.11-next.1 - - @backstage/plugin-rollbar-backend@0.1.45-next.1 - - @backstage/plugin-tech-insights-backend@0.5.14-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.32-next.1 - - @backstage/plugin-tech-insights-node@0.4.6-next.1 - - example-app@0.2.86-next.1 - - @backstage/integration@1.5.1 - - @backstage/catalog-client@1.4.3 - - @backstage/catalog-model@1.4.1 - - @backstage/config@1.0.8 - - @backstage/plugin-permission-common@0.7.7 - - @backstage/plugin-search-common@1.2.5 - -## 0.2.86-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-linguist-backend@0.3.2-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.2.0-next.0 - - @backstage/plugin-search-backend-node@1.2.4-next.0 - - @backstage/plugin-todo-backend@0.2.0-next.0 - - @backstage/plugin-catalog-backend@1.12.0-next.0 - - @backstage/plugin-search-backend@1.4.0-next.0 - - example-app@0.2.86-next.0 - - @backstage/backend-common@0.19.2-next.0 - - @backstage/backend-tasks@0.5.5-next.0 - - @backstage/catalog-client@1.4.3 - - @backstage/catalog-model@1.4.1 - - @backstage/config@1.0.8 - - @backstage/integration@1.5.1 - - @backstage/plugin-adr-backend@0.3.6-next.0 - - @backstage/plugin-app-backend@0.3.48-next.0 - - @backstage/plugin-auth-backend@0.18.6-next.0 - - @backstage/plugin-auth-node@0.2.17-next.0 - - @backstage/plugin-azure-devops-backend@0.3.27-next.0 - - @backstage/plugin-azure-sites-backend@0.1.10-next.0 - - @backstage/plugin-badges-backend@0.2.3-next.0 - - @backstage/plugin-catalog-node@1.4.1-next.0 - - @backstage/plugin-code-coverage-backend@0.2.14-next.0 - - @backstage/plugin-devtools-backend@0.1.3-next.0 - - @backstage/plugin-entity-feedback-backend@0.1.6-next.0 - - @backstage/plugin-events-backend@0.2.9-next.0 - - @backstage/plugin-events-node@0.2.9-next.0 - - @backstage/plugin-explore-backend@0.0.10-next.0 - - @backstage/plugin-graphql-backend@0.1.38-next.0 - - @backstage/plugin-jenkins-backend@0.2.3-next.0 - - @backstage/plugin-kafka-backend@0.2.41-next.0 - - @backstage/plugin-kubernetes-backend@0.11.3-next.0 - - @backstage/plugin-lighthouse-backend@0.2.4-next.0 - - @backstage/plugin-nomad-backend@0.1.2-next.0 - - @backstage/plugin-permission-backend@0.5.23-next.0 - - @backstage/plugin-permission-common@0.7.7 - - @backstage/plugin-permission-node@0.7.11-next.0 - - @backstage/plugin-playlist-backend@0.3.4-next.0 - - @backstage/plugin-proxy-backend@0.2.42-next.0 - - @backstage/plugin-rollbar-backend@0.1.45-next.0 - - @backstage/plugin-scaffolder-backend@1.15.2-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.1-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.17-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.3-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.9-next.0 - - @backstage/plugin-search-common@1.2.5 - - @backstage/plugin-tech-insights-backend@0.5.14-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.32-next.0 - - @backstage/plugin-tech-insights-node@0.4.6-next.0 - - @backstage/plugin-techdocs-backend@1.6.5-next.0 - -## 0.2.85 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.11.2 - - @backstage/plugin-badges-backend@0.2.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.0 - - @backstage/plugin-devtools-backend@0.1.2 - - @backstage/plugin-tech-insights-backend@0.5.13 - - @backstage/backend-common@0.19.1 - - @backstage/plugin-scaffolder-backend@1.15.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.1.1 - - @backstage/plugin-azure-devops-backend@0.3.26 - - @backstage/plugin-linguist-backend@0.3.1 - - @backstage/plugin-adr-backend@0.3.5 - - @backstage/plugin-lighthouse-backend@0.2.3 - - @backstage/plugin-entity-feedback-backend@0.1.5 - - @backstage/plugin-catalog-backend@1.11.0 - - @backstage/plugin-catalog-node@1.4.0 - - @backstage/plugin-auth-backend@0.18.5 - - example-app@0.2.85 - - @backstage/backend-tasks@0.5.4 - - @backstage/catalog-client@1.4.3 - - @backstage/catalog-model@1.4.1 - - @backstage/config@1.0.8 - - @backstage/integration@1.5.1 - - @backstage/plugin-app-backend@0.3.47 - - @backstage/plugin-auth-node@0.2.16 - - @backstage/plugin-azure-sites-backend@0.1.9 - - @backstage/plugin-code-coverage-backend@0.2.13 - - @backstage/plugin-events-backend@0.2.8 - - @backstage/plugin-events-node@0.2.8 - - @backstage/plugin-explore-backend@0.0.9 - - @backstage/plugin-graphql-backend@0.1.37 - - @backstage/plugin-jenkins-backend@0.2.2 - - @backstage/plugin-kafka-backend@0.2.40 - - @backstage/plugin-nomad-backend@0.1.1 - - @backstage/plugin-permission-backend@0.5.22 - - @backstage/plugin-permission-common@0.7.7 - - @backstage/plugin-permission-node@0.7.10 - - @backstage/plugin-playlist-backend@0.3.3 - - @backstage/plugin-proxy-backend@0.2.41 - - @backstage/plugin-rollbar-backend@0.1.44 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.16 - - @backstage/plugin-search-backend@1.3.3 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.2 - - @backstage/plugin-search-backend-module-pg@0.5.8 - - @backstage/plugin-search-backend-node@1.2.3 - - @backstage/plugin-search-common@1.2.5 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.31 - - @backstage/plugin-tech-insights-node@0.4.5 - - @backstage/plugin-techdocs-backend@1.6.4 - - @backstage/plugin-todo-backend@0.1.44 - -## 0.2.85-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.0-next.1 - - @backstage/plugin-devtools-backend@0.1.2-next.2 - - @backstage/plugin-tech-insights-backend@0.5.13-next.1 - - @backstage/plugin-scaffolder-backend@1.15.1-next.1 - - @backstage/plugin-kubernetes-backend@0.11.2-next.2 - - @backstage/plugin-adr-backend@0.3.5-next.1 - - example-app@0.2.85-next.2 - - @backstage/backend-common@0.19.1-next.0 - - @backstage/backend-tasks@0.5.4-next.0 - - @backstage/catalog-client@1.4.3-next.0 - - @backstage/catalog-model@1.4.1-next.0 - - @backstage/config@1.0.8 - - @backstage/integration@1.5.1-next.0 - - @backstage/plugin-app-backend@0.3.47-next.0 - - @backstage/plugin-auth-backend@0.18.5-next.1 - - @backstage/plugin-auth-node@0.2.16-next.0 - - @backstage/plugin-azure-devops-backend@0.3.26-next.1 - - @backstage/plugin-azure-sites-backend@0.1.9-next.0 - - @backstage/plugin-badges-backend@0.2.2-next.1 - - @backstage/plugin-catalog-backend@1.11.0-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.1.1-next.0 - - @backstage/plugin-catalog-node@1.4.0-next.0 - - @backstage/plugin-code-coverage-backend@0.2.13-next.0 - - @backstage/plugin-entity-feedback-backend@0.1.5-next.0 - - @backstage/plugin-events-backend@0.2.8-next.0 - - @backstage/plugin-events-node@0.2.8-next.0 - - @backstage/plugin-explore-backend@0.0.9-next.0 - - @backstage/plugin-graphql-backend@0.1.37-next.0 - - @backstage/plugin-jenkins-backend@0.2.2-next.0 - - @backstage/plugin-kafka-backend@0.2.40-next.0 - - @backstage/plugin-lighthouse-backend@0.2.3-next.0 - - @backstage/plugin-linguist-backend@0.3.1-next.1 - - @backstage/plugin-nomad-backend@0.1.1-next.0 - - @backstage/plugin-permission-backend@0.5.22-next.0 - - @backstage/plugin-permission-common@0.7.7-next.0 - - @backstage/plugin-permission-node@0.7.10-next.0 - - @backstage/plugin-playlist-backend@0.3.3-next.0 - - @backstage/plugin-proxy-backend@0.2.41-next.0 - - @backstage/plugin-rollbar-backend@0.1.44-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.16-next.1 - - @backstage/plugin-search-backend@1.3.3-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.2-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.8-next.0 - - @backstage/plugin-search-backend-node@1.2.3-next.0 - - @backstage/plugin-search-common@1.2.5-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.31-next.0 - - @backstage/plugin-tech-insights-node@0.4.5-next.0 - - @backstage/plugin-techdocs-backend@1.6.4-next.0 - - @backstage/plugin-todo-backend@0.1.44-next.0 - -## 0.2.85-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.11.2-next.1 - - @backstage/plugin-badges-backend@0.2.2-next.1 - - @backstage/plugin-azure-devops-backend@0.3.26-next.1 - - @backstage/plugin-devtools-backend@0.1.2-next.1 - - @backstage/plugin-linguist-backend@0.3.1-next.1 - - @backstage/plugin-auth-backend@0.18.5-next.1 - - example-app@0.2.85-next.1 - - @backstage/config@1.0.8 - -## 0.2.85-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.1-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.1.1-next.0 - - @backstage/plugin-entity-feedback-backend@0.1.5-next.0 - - @backstage/plugin-catalog-backend@1.11.0-next.0 - - @backstage/plugin-catalog-node@1.4.0-next.0 - - @backstage/plugin-kubernetes-backend@0.11.2-next.0 - - example-app@0.2.85-next.0 - - @backstage/backend-tasks@0.5.4-next.0 - - @backstage/catalog-client@1.4.3-next.0 - - @backstage/catalog-model@1.4.1-next.0 - - @backstage/config@1.0.8 - - @backstage/integration@1.5.1-next.0 - - @backstage/plugin-adr-backend@0.3.5-next.0 - - @backstage/plugin-app-backend@0.3.47-next.0 - - @backstage/plugin-auth-backend@0.18.5-next.0 - - @backstage/plugin-auth-node@0.2.16-next.0 - - @backstage/plugin-azure-devops-backend@0.3.26-next.0 - - @backstage/plugin-azure-sites-backend@0.1.9-next.0 - - @backstage/plugin-badges-backend@0.2.2-next.0 - - @backstage/plugin-code-coverage-backend@0.2.13-next.0 - - @backstage/plugin-devtools-backend@0.1.2-next.0 - - @backstage/plugin-events-backend@0.2.8-next.0 - - @backstage/plugin-events-node@0.2.8-next.0 - - @backstage/plugin-explore-backend@0.0.9-next.0 - - @backstage/plugin-graphql-backend@0.1.37-next.0 - - @backstage/plugin-jenkins-backend@0.2.2-next.0 - - @backstage/plugin-kafka-backend@0.2.40-next.0 - - @backstage/plugin-lighthouse-backend@0.2.3-next.0 - - @backstage/plugin-linguist-backend@0.3.1-next.0 - - @backstage/plugin-nomad-backend@0.1.1-next.0 - - @backstage/plugin-permission-backend@0.5.22-next.0 - - @backstage/plugin-permission-common@0.7.7-next.0 - - @backstage/plugin-permission-node@0.7.10-next.0 - - @backstage/plugin-playlist-backend@0.3.3-next.0 - - @backstage/plugin-proxy-backend@0.2.41-next.0 - - @backstage/plugin-rollbar-backend@0.1.44-next.0 - - @backstage/plugin-scaffolder-backend@1.15.1-next.0 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.1.4-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.16-next.0 - - @backstage/plugin-search-backend@1.3.3-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.2-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.8-next.0 - - @backstage/plugin-search-backend-node@1.2.3-next.0 - - @backstage/plugin-search-common@1.2.5-next.0 - - @backstage/plugin-tech-insights-backend@0.5.13-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.31-next.0 - - @backstage/plugin-tech-insights-node@0.4.5-next.0 - - @backstage/plugin-techdocs-backend@1.6.4-next.0 - - @backstage/plugin-todo-backend@0.1.44-next.0 - -## 0.2.84 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.0 - - @backstage/catalog-client@1.4.2 - - @backstage/plugin-jenkins-backend@0.2.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.1.3 - - @backstage/plugin-devtools-backend@0.1.1 - - @backstage/plugin-scaffolder-backend@1.15.0 - - @backstage/plugin-nomad-backend@0.1.0 - - @backstage/plugin-azure-sites-backend@0.1.8 - - @backstage/plugin-kubernetes-backend@0.11.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.1.0 - - @backstage/plugin-badges-backend@0.2.1 - - @backstage/plugin-catalog-backend@1.10.0 - - @backstage/integration@1.5.0 - - @backstage/plugin-search-backend@1.3.2 - - @backstage/plugin-explore-backend@0.0.8 - - @backstage/catalog-model@1.4.0 - - @backstage/plugin-auth-backend@0.18.4 - - @backstage/plugin-adr-backend@0.3.4 - - @backstage/plugin-code-coverage-backend@0.2.12 - - @backstage/plugin-proxy-backend@0.2.40 - - @backstage/plugin-linguist-backend@0.3.0 - - @backstage/plugin-search-backend-module-pg@0.5.7 - - example-app@0.2.84 - - @backstage/backend-tasks@0.5.3 - - @backstage/plugin-app-backend@0.3.46 - - @backstage/plugin-auth-node@0.2.15 - - @backstage/plugin-azure-devops-backend@0.3.25 - - @backstage/plugin-catalog-node@1.3.7 - - @backstage/plugin-entity-feedback-backend@0.1.4 - - @backstage/plugin-events-backend@0.2.7 - - @backstage/plugin-graphql-backend@0.1.36 - - @backstage/plugin-kafka-backend@0.2.39 - - @backstage/plugin-lighthouse-backend@0.2.2 - - @backstage/plugin-permission-backend@0.5.21 - - @backstage/plugin-permission-node@0.7.9 - - @backstage/plugin-playlist-backend@0.3.2 - - @backstage/plugin-rollbar-backend@0.1.43 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.15 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.1 - - @backstage/plugin-search-backend-node@1.2.2 - - @backstage/plugin-tech-insights-backend@0.5.12 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.30 - - @backstage/plugin-tech-insights-node@0.4.4 - - @backstage/plugin-techdocs-backend@1.6.3 - - @backstage/plugin-todo-backend@0.1.43 - - @backstage/config@1.0.8 - - @backstage/plugin-events-node@0.2.7 - - @backstage/plugin-permission-common@0.7.6 - - @backstage/plugin-search-common@1.2.4 - -## 0.2.84-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.15.0-next.3 - - @backstage/plugin-kubernetes-backend@0.11.1-next.3 - - @backstage/backend-common@0.19.0-next.2 - - @backstage/catalog-model@1.4.0-next.1 - - @backstage/plugin-catalog-backend@1.10.0-next.2 - - example-app@0.2.84-next.3 - - @backstage/backend-tasks@0.5.3-next.2 - - @backstage/catalog-client@1.4.2-next.2 - - @backstage/config@1.0.7 - - @backstage/integration@1.5.0-next.0 - - @backstage/plugin-adr-backend@0.3.4-next.2 - - @backstage/plugin-app-backend@0.3.46-next.2 - - @backstage/plugin-auth-backend@0.18.4-next.3 - - @backstage/plugin-auth-node@0.2.15-next.2 - - @backstage/plugin-azure-devops-backend@0.3.25-next.2 - - @backstage/plugin-azure-sites-backend@0.1.8-next.2 - - @backstage/plugin-badges-backend@0.2.1-next.3 - - @backstage/plugin-catalog-backend-module-unprocessed@0.1.0-next.1 - - @backstage/plugin-catalog-node@1.3.7-next.2 - - @backstage/plugin-code-coverage-backend@0.2.12-next.3 - - @backstage/plugin-devtools-backend@0.1.1-next.2 - - @backstage/plugin-entity-feedback-backend@0.1.4-next.2 - - @backstage/plugin-events-backend@0.2.7-next.2 - - @backstage/plugin-events-node@0.2.7-next.2 - - @backstage/plugin-explore-backend@0.0.8-next.2 - - @backstage/plugin-graphql-backend@0.1.36-next.2 - - @backstage/plugin-jenkins-backend@0.2.1-next.2 - - @backstage/plugin-kafka-backend@0.2.39-next.2 - - @backstage/plugin-lighthouse-backend@0.2.2-next.2 - - @backstage/plugin-linguist-backend@0.3.0-next.2 - - @backstage/plugin-permission-backend@0.5.21-next.2 - - @backstage/plugin-permission-common@0.7.6-next.0 - - @backstage/plugin-permission-node@0.7.9-next.2 - - @backstage/plugin-playlist-backend@0.3.2-next.2 - - @backstage/plugin-proxy-backend@0.2.40-next.2 - - @backstage/plugin-rollbar-backend@0.1.43-next.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.1.3-next.3 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.15-next.3 - - @backstage/plugin-search-backend@1.3.2-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.1-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.7-next.2 - - @backstage/plugin-search-backend-node@1.2.2-next.2 - - @backstage/plugin-search-common@1.2.4-next.0 - - @backstage/plugin-tech-insights-backend@0.5.12-next.2 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.30-next.2 - - @backstage/plugin-tech-insights-node@0.4.4-next.2 - - @backstage/plugin-techdocs-backend@1.6.3-next.2 - - @backstage/plugin-todo-backend@0.1.43-next.2 - -## 0.2.84-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.11.1-next.2 - - @backstage/plugin-badges-backend@0.2.1-next.2 - - @backstage/plugin-scaffolder-backend@1.15.0-next.2 - - @backstage/plugin-auth-backend@0.18.4-next.2 - - @backstage/plugin-code-coverage-backend@0.2.12-next.2 - - example-app@0.2.84-next.2 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.1.3-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.15-next.2 - - @backstage/config@1.0.7 - -## 0.2.84-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.0-next.1 - - @backstage/plugin-jenkins-backend@0.2.1-next.1 - - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.1.3-next.1 - - @backstage/plugin-devtools-backend@0.1.1-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.1.0-next.0 - - @backstage/plugin-catalog-backend@1.9.2-next.1 - - @backstage/integration@1.5.0-next.0 - - @backstage/plugin-adr-backend@0.3.4-next.1 - - @backstage/plugin-proxy-backend@0.2.40-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.7-next.1 - - @backstage/catalog-model@1.4.0-next.0 - - @backstage/plugin-scaffolder-backend@1.15.0-next.1 - - @backstage/backend-tasks@0.5.3-next.1 - - @backstage/plugin-app-backend@0.3.46-next.1 - - @backstage/plugin-auth-backend@0.18.4-next.1 - - @backstage/plugin-auth-node@0.2.15-next.1 - - @backstage/plugin-azure-devops-backend@0.3.25-next.1 - - @backstage/plugin-azure-sites-backend@0.1.8-next.1 - - @backstage/plugin-badges-backend@0.2.1-next.1 - - @backstage/plugin-catalog-node@1.3.7-next.1 - - @backstage/plugin-code-coverage-backend@0.2.12-next.1 - - @backstage/plugin-entity-feedback-backend@0.1.4-next.1 - - @backstage/plugin-events-backend@0.2.7-next.1 - - @backstage/plugin-explore-backend@0.0.8-next.1 - - @backstage/plugin-graphql-backend@0.1.36-next.1 - - @backstage/plugin-kafka-backend@0.2.39-next.1 - - @backstage/plugin-kubernetes-backend@0.11.1-next.1 - - @backstage/plugin-lighthouse-backend@0.2.2-next.1 - - @backstage/plugin-linguist-backend@0.3.0-next.1 - - @backstage/plugin-permission-backend@0.5.21-next.1 - - @backstage/plugin-permission-node@0.7.9-next.1 - - @backstage/plugin-playlist-backend@0.3.2-next.1 - - @backstage/plugin-rollbar-backend@0.1.43-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.15-next.1 - - @backstage/plugin-search-backend@1.3.2-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.1-next.1 - - @backstage/plugin-search-backend-node@1.2.2-next.1 - - @backstage/plugin-tech-insights-backend@0.5.12-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.30-next.1 - - @backstage/plugin-tech-insights-node@0.4.4-next.1 - - @backstage/plugin-techdocs-backend@1.6.3-next.1 - - @backstage/plugin-todo-backend@0.1.43-next.1 - - example-app@0.2.84-next.1 - - @backstage/catalog-client@1.4.2-next.1 - - @backstage/plugin-permission-common@0.7.6-next.0 - - @backstage/plugin-events-node@0.2.7-next.1 - - @backstage/config@1.0.7 - - @backstage/plugin-search-common@1.2.4-next.0 - -## 0.2.84-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-client@1.4.2-next.0 - - @backstage/plugin-scaffolder-backend@1.14.1-next.0 - - @backstage/plugin-jenkins-backend@0.2.1-next.0 - - @backstage/plugin-linguist-backend@0.3.0-next.0 - - @backstage/plugin-devtools-backend@0.1.1-next.0 - - @backstage/plugin-adr-backend@0.3.4-next.0 - - @backstage/plugin-auth-backend@0.18.4-next.0 - - @backstage/plugin-badges-backend@0.2.1-next.0 - - @backstage/plugin-catalog-backend@1.9.2-next.0 - - @backstage/plugin-catalog-node@1.3.7-next.0 - - @backstage/plugin-code-coverage-backend@0.2.12-next.0 - - @backstage/plugin-entity-feedback-backend@0.1.4-next.0 - - @backstage/plugin-kubernetes-backend@0.11.1-next.0 - - @backstage/plugin-lighthouse-backend@0.2.2-next.0 - - @backstage/plugin-playlist-backend@0.3.2-next.0 - - @backstage/plugin-tech-insights-backend@0.5.12-next.0 - - @backstage/plugin-techdocs-backend@1.6.3-next.0 - - @backstage/plugin-todo-backend@0.1.43-next.0 - - example-app@0.2.84-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.15-next.0 - - @backstage/backend-common@0.18.6-next.0 - - @backstage/integration@1.4.5 - - @backstage/plugin-app-backend@0.3.46-next.0 - - @backstage/plugin-explore-backend@0.0.8-next.0 - - @backstage/config@1.0.7 - - @backstage/backend-tasks@0.5.3-next.0 - - @backstage/catalog-model@1.3.0 - - @backstage/plugin-auth-node@0.2.15-next.0 - - @backstage/plugin-azure-devops-backend@0.3.25-next.0 - - @backstage/plugin-azure-sites-backend@0.1.8-next.0 - - @backstage/plugin-events-backend@0.2.7-next.0 - - @backstage/plugin-events-node@0.2.7-next.0 - - @backstage/plugin-graphql-backend@0.1.36-next.0 - - @backstage/plugin-kafka-backend@0.2.39-next.0 - - @backstage/plugin-permission-backend@0.5.21-next.0 - - @backstage/plugin-permission-common@0.7.5 - - @backstage/plugin-permission-node@0.7.9-next.0 - - @backstage/plugin-proxy-backend@0.2.40-next.0 - - @backstage/plugin-rollbar-backend@0.1.43-next.0 - - @backstage/plugin-search-backend@1.3.2-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.1-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.7-next.0 - - @backstage/plugin-search-backend-node@1.2.2-next.0 - - @backstage/plugin-search-common@1.2.3 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.30-next.0 - - @backstage/plugin-tech-insights-node@0.4.4-next.0 - -## 0.2.83 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.14.0 - - @backstage/plugin-devtools-backend@0.1.0 - - @backstage/plugin-catalog-backend@1.9.1 - - @backstage/backend-common@0.18.5 - - @backstage/plugin-kubernetes-backend@0.11.0 - - @backstage/plugin-auth-backend@0.18.3 - - @backstage/plugin-badges-backend@0.2.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.0 - - @backstage/integration@1.4.5 - - @backstage/plugin-todo-backend@0.1.42 - - @backstage/plugin-jenkins-backend@0.2.0 - - @backstage/plugin-azure-sites-backend@0.1.7 - - @backstage/plugin-permission-node@0.7.8 - - @backstage/plugin-search-backend@1.3.1 - - example-app@0.2.83 - - @backstage/backend-tasks@0.5.2 - - @backstage/plugin-app-backend@0.3.45 - - @backstage/plugin-auth-node@0.2.14 - - @backstage/plugin-catalog-node@1.3.6 - - @backstage/plugin-entity-feedback-backend@0.1.3 - - @backstage/plugin-events-backend@0.2.6 - - @backstage/plugin-playlist-backend@0.3.1 - - @backstage/plugin-rollbar-backend@0.1.42 - - @backstage/plugin-search-backend-module-pg@0.5.6 - - @backstage/plugin-tech-insights-backend@0.5.11 - - @backstage/plugin-techdocs-backend@1.6.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.14 - - @backstage/plugin-adr-backend@0.3.3 - - @backstage/plugin-azure-devops-backend@0.3.24 - - @backstage/plugin-code-coverage-backend@0.2.11 - - @backstage/plugin-explore-backend@0.0.7 - - @backstage/plugin-graphql-backend@0.1.35 - - @backstage/plugin-kafka-backend@0.2.38 - - @backstage/plugin-lighthouse-backend@0.2.1 - - @backstage/plugin-linguist-backend@0.2.2 - - @backstage/plugin-permission-backend@0.5.20 - - @backstage/plugin-proxy-backend@0.2.39 - - @backstage/plugin-search-backend-node@1.2.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.29 - - @backstage/plugin-tech-insights-node@0.4.3 - - @backstage/catalog-client@1.4.1 - - @backstage/catalog-model@1.3.0 - - @backstage/config@1.0.7 - - @backstage/plugin-events-node@0.2.6 - - @backstage/plugin-permission-common@0.7.5 - - @backstage/plugin-search-common@1.2.3 - -## 0.2.83-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-devtools-backend@0.1.0-next.0 - - @backstage/plugin-catalog-backend@1.9.1-next.2 - - @backstage/plugin-badges-backend@0.2.0-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.3.0-next.2 - - @backstage/plugin-kubernetes-backend@0.11.0-next.2 - - @backstage/plugin-auth-backend@0.18.3-next.2 - - @backstage/plugin-search-backend@1.3.1-next.2 - - example-app@0.2.83-next.2 - - @backstage/plugin-scaffolder-backend@1.13.2-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.14-next.2 - - @backstage/config@1.0.7 - -## 0.2.83-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.5-next.1 - - @backstage/plugin-kubernetes-backend@0.11.0-next.1 - - @backstage/plugin-catalog-backend@1.9.1-next.1 - - @backstage/plugin-jenkins-backend@0.1.35-next.1 - - @backstage/plugin-scaffolder-backend@1.13.2-next.1 - - example-app@0.2.83-next.1 - - @backstage/backend-tasks@0.5.2-next.1 - - @backstage/plugin-adr-backend@0.3.3-next.1 - - @backstage/plugin-app-backend@0.3.45-next.1 - - @backstage/plugin-auth-backend@0.18.3-next.1 - - @backstage/plugin-auth-node@0.2.14-next.1 - - @backstage/plugin-azure-devops-backend@0.3.24-next.1 - - @backstage/plugin-azure-sites-backend@0.1.7-next.1 - - @backstage/plugin-badges-backend@0.1.39-next.1 - - @backstage/plugin-catalog-node@1.3.6-next.1 - - @backstage/plugin-code-coverage-backend@0.2.11-next.1 - - @backstage/plugin-entity-feedback-backend@0.1.3-next.1 - - @backstage/plugin-events-backend@0.2.6-next.1 - - @backstage/plugin-explore-backend@0.0.7-next.1 - - @backstage/plugin-graphql-backend@0.1.35-next.1 - - @backstage/plugin-kafka-backend@0.2.38-next.1 - - @backstage/plugin-lighthouse-backend@0.2.1-next.1 - - @backstage/plugin-linguist-backend@0.2.2-next.1 - - @backstage/plugin-permission-backend@0.5.20-next.1 - - @backstage/plugin-permission-node@0.7.8-next.1 - - @backstage/plugin-playlist-backend@0.3.1-next.1 - - @backstage/plugin-proxy-backend@0.2.39-next.1 - - @backstage/plugin-rollbar-backend@0.1.42-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.14-next.1 - - @backstage/plugin-search-backend@1.3.1-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.2.1-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.6-next.1 - - @backstage/plugin-search-backend-node@1.2.1-next.1 - - @backstage/plugin-tech-insights-backend@0.5.11-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.29-next.1 - - @backstage/plugin-tech-insights-node@0.4.3-next.1 - - @backstage/plugin-techdocs-backend@1.6.2-next.1 - - @backstage/plugin-todo-backend@0.1.42-next.1 - - @backstage/config@1.0.7 - - @backstage/plugin-events-node@0.2.6-next.1 - -## 0.2.83-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.5-next.0 - - @backstage/integration@1.4.5-next.0 - - @backstage/plugin-permission-node@0.7.8-next.0 - - @backstage/plugin-scaffolder-backend@1.13.2-next.0 - - @backstage/plugin-kubernetes-backend@0.11.0-next.0 - - @backstage/backend-tasks@0.5.2-next.0 - - @backstage/plugin-app-backend@0.3.45-next.0 - - @backstage/plugin-auth-backend@0.18.3-next.0 - - @backstage/plugin-auth-node@0.2.14-next.0 - - @backstage/plugin-catalog-backend@1.9.1-next.0 - - @backstage/plugin-catalog-node@1.3.6-next.0 - - @backstage/plugin-entity-feedback-backend@0.1.3-next.0 - - @backstage/plugin-events-backend@0.2.6-next.0 - - @backstage/plugin-playlist-backend@0.3.1-next.0 - - @backstage/plugin-rollbar-backend@0.1.42-next.0 - - @backstage/plugin-search-backend@1.3.1-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.6-next.0 - - @backstage/plugin-tech-insights-backend@0.5.11-next.0 - - @backstage/plugin-techdocs-backend@1.6.2-next.0 - - example-app@0.2.83-next.0 - - @backstage/plugin-adr-backend@0.3.3-next.0 - - @backstage/plugin-azure-devops-backend@0.3.24-next.0 - - @backstage/plugin-azure-sites-backend@0.1.7-next.0 - - @backstage/plugin-badges-backend@0.1.39-next.0 - - @backstage/plugin-code-coverage-backend@0.2.11-next.0 - - @backstage/plugin-explore-backend@0.0.7-next.0 - - @backstage/plugin-graphql-backend@0.1.35-next.0 - - @backstage/plugin-jenkins-backend@0.1.35-next.0 - - @backstage/plugin-kafka-backend@0.2.38-next.0 - - @backstage/plugin-lighthouse-backend@0.2.1-next.0 - - @backstage/plugin-linguist-backend@0.2.2-next.0 - - @backstage/plugin-permission-backend@0.5.20-next.0 - - @backstage/plugin-proxy-backend@0.2.39-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.14-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.2.1-next.0 - - @backstage/plugin-search-backend-node@1.2.1-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.29-next.0 - - @backstage/plugin-tech-insights-node@0.4.3-next.0 - - @backstage/plugin-todo-backend@0.1.42-next.0 - - @backstage/catalog-client@1.4.1 - - @backstage/catalog-model@1.3.0 - - @backstage/config@1.0.7 - - @backstage/plugin-events-node@0.2.6-next.0 - - @backstage/plugin-permission-common@0.7.5 - - @backstage/plugin-search-common@1.2.3 - -## 0.2.82 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.10.0 - - @backstage/backend-common@0.18.4 - - @backstage/plugin-scaffolder-backend@1.13.0 - - @backstage/plugin-catalog-backend@1.9.0 - - @backstage/plugin-code-coverage-backend@0.2.10 - - @backstage/catalog-client@1.4.1 - - @backstage/plugin-permission-node@0.7.7 - - @backstage/plugin-permission-backend@0.5.19 - - @backstage/plugin-entity-feedback-backend@0.1.2 - - @backstage/plugin-rollbar-backend@0.1.41 - - @backstage/plugin-search-backend@1.3.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.2.0 - - @backstage/plugin-search-backend-module-pg@0.5.5 - - @backstage/plugin-auth-backend@0.18.2 - - @backstage/plugin-lighthouse-backend@0.2.0 - - @backstage/plugin-permission-common@0.7.5 - - @backstage/plugin-playlist-backend@0.3.0 - - @backstage/backend-tasks@0.5.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.28 - - @backstage/plugin-adr-backend@0.3.2 - - @backstage/plugin-graphql-backend@0.1.34 - - @backstage/catalog-model@1.3.0 - - @backstage/plugin-techdocs-backend@1.6.1 - - @backstage/plugin-explore-backend@0.0.6 - - @backstage/plugin-events-backend@0.2.5 - - @backstage/plugin-search-backend-node@1.2.0 - - @backstage/integration@1.4.4 - - example-app@0.2.82 - - @backstage/plugin-app-backend@0.3.44 - - @backstage/plugin-auth-node@0.2.13 - - @backstage/plugin-azure-devops-backend@0.3.23 - - @backstage/plugin-azure-sites-backend@0.1.6 - - @backstage/plugin-badges-backend@0.1.38 - - @backstage/plugin-catalog-node@1.3.5 - - @backstage/plugin-jenkins-backend@0.1.34 - - @backstage/plugin-kafka-backend@0.2.37 - - @backstage/plugin-linguist-backend@0.2.1 - - @backstage/plugin-proxy-backend@0.2.38 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.12 - - @backstage/plugin-tech-insights-backend@0.5.10 - - @backstage/plugin-tech-insights-node@0.4.2 - - @backstage/plugin-todo-backend@0.1.41 - - @backstage/config@1.0.7 - - @backstage/plugin-events-node@0.2.5 - - @backstage/plugin-search-common@1.2.3 - -## 0.2.82-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.10.0-next.3 - - @backstage/plugin-catalog-backend@1.9.0-next.3 - - @backstage/plugin-code-coverage-backend@0.2.10-next.3 - - @backstage/plugin-lighthouse-backend@0.2.0-next.3 - - @backstage/plugin-auth-backend@0.18.2-next.3 - - @backstage/plugin-scaffolder-backend@1.13.0-next.3 - - @backstage/plugin-search-backend-module-elasticsearch@1.2.0-next.3 - - @backstage/catalog-model@1.3.0-next.0 - - @backstage/plugin-events-backend@0.2.5-next.3 - - example-app@0.2.82-next.3 - - @backstage/backend-common@0.18.4-next.2 - - @backstage/backend-tasks@0.5.1-next.2 - - @backstage/catalog-client@1.4.1-next.1 - - @backstage/config@1.0.7 - - @backstage/integration@1.4.4-next.0 - - @backstage/plugin-adr-backend@0.3.2-next.3 - - @backstage/plugin-app-backend@0.3.44-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.3 - - @backstage/plugin-catalog-node@1.3.5-next.3 - - @backstage/plugin-entity-feedback-backend@0.1.2-next.3 - - @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.3 - - @backstage/plugin-jenkins-backend@0.1.34-next.3 - - @backstage/plugin-kafka-backend@0.2.37-next.3 - - @backstage/plugin-linguist-backend@0.2.1-next.3 - - @backstage/plugin-permission-backend@0.5.19-next.2 - - @backstage/plugin-permission-common@0.7.5-next.0 - - @backstage/plugin-permission-node@0.7.7-next.2 - - @backstage/plugin-playlist-backend@0.2.7-next.3 - - @backstage/plugin-proxy-backend@0.2.38-next.2 - - @backstage/plugin-rollbar-backend@0.1.41-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.12-next.3 - - @backstage/plugin-search-backend@1.3.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.3 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.28-next.2 - - @backstage/plugin-tech-insights-node@0.4.2-next.2 - - @backstage/plugin-techdocs-backend@1.6.1-next.3 - - @backstage/plugin-todo-backend@0.1.41-next.3 - -## 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 - -- Updated dependencies - - @backstage/plugin-search-backend@1.3.0-next.1 - - @backstage/plugin-scaffolder-backend@1.13.0-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.2.0-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.5-next.1 - - @backstage/plugin-permission-node@0.7.7-next.1 - - @backstage/plugin-permission-backend@0.5.19-next.1 - - @backstage/plugin-permission-common@0.7.5-next.0 - - @backstage/plugin-playlist-backend@0.2.7-next.1 - - @backstage/plugin-catalog-backend@1.8.1-next.1 - - @backstage/backend-tasks@0.5.1-next.1 - - @backstage/plugin-adr-backend@0.3.2-next.1 - - @backstage/plugin-kubernetes-backend@0.10.0-next.1 - - @backstage/plugin-techdocs-backend@1.6.1-next.1 - - @backstage/plugin-explore-backend@0.0.6-next.1 - - @backstage/plugin-search-backend-node@1.2.0-next.1 - - @backstage/integration@1.4.4-next.0 - - @backstage/plugin-auth-backend@0.18.2-next.1 - - example-app@0.2.82-next.1 - - @backstage/backend-common@0.18.4-next.1 - - @backstage/catalog-client@1.4.0 - - @backstage/catalog-model@1.2.1 - - @backstage/config@1.0.7 - - @backstage/plugin-app-backend@0.3.44-next.1 - - @backstage/plugin-auth-node@0.2.13-next.1 - - @backstage/plugin-azure-devops-backend@0.3.23-next.1 - - @backstage/plugin-azure-sites-backend@0.1.6-next.1 - - @backstage/plugin-badges-backend@0.1.38-next.1 - - @backstage/plugin-catalog-node@1.3.5-next.1 - - @backstage/plugin-code-coverage-backend@0.2.10-next.1 - - @backstage/plugin-entity-feedback-backend@0.1.2-next.1 - - @backstage/plugin-events-backend@0.2.5-next.1 - - @backstage/plugin-events-node@0.2.5-next.1 - - @backstage/plugin-graphql-backend@0.1.34-next.1 - - @backstage/plugin-jenkins-backend@0.1.34-next.1 - - @backstage/plugin-kafka-backend@0.2.37-next.1 - - @backstage/plugin-lighthouse-backend@0.1.2-next.1 - - @backstage/plugin-linguist-backend@0.2.1-next.1 - - @backstage/plugin-proxy-backend@0.2.38-next.1 - - @backstage/plugin-rollbar-backend@0.1.41-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.12-next.1 - - @backstage/plugin-search-common@1.2.3-next.0 - - @backstage/plugin-tech-insights-backend@0.5.10-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.28-next.1 - - @backstage/plugin-tech-insights-node@0.4.2-next.1 - - @backstage/plugin-todo-backend@0.1.41-next.1 - -## 0.2.82-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.12.1-next.0 - - @backstage/plugin-kubernetes-backend@0.10.0-next.0 - - @backstage/plugin-entity-feedback-backend@0.1.2-next.0 - - @backstage/plugin-auth-backend@0.18.2-next.0 - - @backstage/plugin-catalog-backend@1.8.1-next.0 - - @backstage/plugin-graphql-backend@0.1.34-next.0 - - @backstage/backend-common@0.18.4-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.12-next.0 - - example-app@0.2.82-next.0 - - @backstage/config@1.0.7 - - @backstage/integration@1.4.3 - - @backstage/backend-tasks@0.5.1-next.0 - - @backstage/catalog-client@1.4.0 - - @backstage/catalog-model@1.2.1 - - @backstage/plugin-adr-backend@0.3.2-next.0 - - @backstage/plugin-app-backend@0.3.44-next.0 - - @backstage/plugin-auth-node@0.2.13-next.0 - - @backstage/plugin-azure-devops-backend@0.3.23-next.0 - - @backstage/plugin-azure-sites-backend@0.1.6-next.0 - - @backstage/plugin-badges-backend@0.1.38-next.0 - - @backstage/plugin-catalog-node@1.3.5-next.0 - - @backstage/plugin-code-coverage-backend@0.2.10-next.0 - - @backstage/plugin-events-backend@0.2.5-next.0 - - @backstage/plugin-events-node@0.2.5-next.0 - - @backstage/plugin-explore-backend@0.0.6-next.0 - - @backstage/plugin-jenkins-backend@0.1.34-next.0 - - @backstage/plugin-kafka-backend@0.2.37-next.0 - - @backstage/plugin-lighthouse-backend@0.1.2-next.0 - - @backstage/plugin-linguist-backend@0.2.1-next.0 - - @backstage/plugin-permission-backend@0.5.19-next.0 - - @backstage/plugin-permission-common@0.7.4 - - @backstage/plugin-permission-node@0.7.7-next.0 - - @backstage/plugin-playlist-backend@0.2.7-next.0 - - @backstage/plugin-proxy-backend@0.2.38-next.0 - - @backstage/plugin-rollbar-backend@0.1.41-next.0 - - @backstage/plugin-search-backend@1.2.5-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.1.5-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.5-next.0 - - @backstage/plugin-search-backend-node@1.1.5-next.0 - - @backstage/plugin-search-common@1.2.2 - - @backstage/plugin-tech-insights-backend@0.5.10-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.28-next.0 - - @backstage/plugin-tech-insights-node@0.4.2-next.0 - - @backstage/plugin-techdocs-backend@1.6.1-next.0 - - @backstage/plugin-todo-backend@0.1.41-next.0 - -## 0.2.81 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.12.0 - - @backstage/plugin-catalog-backend@1.8.0 - - @backstage/catalog-client@1.4.0 - - @backstage/plugin-todo-backend@0.1.40 - - @backstage/plugin-permission-node@0.7.6 - - @backstage/plugin-search-backend-module-elasticsearch@1.1.4 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.27 - - @backstage/plugin-auth-node@0.2.12 - - @backstage/plugin-techdocs-backend@1.6.0 - - @backstage/backend-tasks@0.5.0 - - @backstage/plugin-tech-insights-backend@0.5.9 - - @backstage/plugin-adr-backend@0.3.1 - - @backstage/plugin-auth-backend@0.18.1 - - @backstage/backend-common@0.18.3 - - @backstage/plugin-linguist-backend@0.2.0 - - @backstage/plugin-catalog-node@1.3.4 - - @backstage/catalog-model@1.2.1 - - @backstage/plugin-events-backend@0.2.4 - - @backstage/plugin-app-backend@0.3.43 - - @backstage/plugin-events-node@0.2.4 - - @backstage/integration@1.4.3 - - @backstage/plugin-azure-devops-backend@0.3.22 - - @backstage/plugin-azure-sites-backend@0.1.5 - - @backstage/plugin-code-coverage-backend@0.2.9 - - @backstage/plugin-entity-feedback-backend@0.1.1 - - @backstage/plugin-explore-backend@0.0.5 - - @backstage/plugin-graphql-backend@0.1.33 - - @backstage/plugin-jenkins-backend@0.1.33 - - @backstage/plugin-kubernetes-backend@0.9.4 - - @backstage/plugin-permission-backend@0.5.18 - - @backstage/plugin-permission-common@0.7.4 - - @backstage/plugin-playlist-backend@0.2.6 - - @backstage/plugin-proxy-backend@0.2.37 - - @backstage/plugin-rollbar-backend@0.1.40 - - @backstage/plugin-lighthouse-backend@0.1.1 - - @backstage/config@1.0.7 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.11 - - @backstage/plugin-badges-backend@0.1.37 - - example-app@0.2.81 - - @backstage/plugin-search-backend@1.2.4 - - @backstage/plugin-kafka-backend@0.2.36 - - @backstage/plugin-search-backend-module-pg@0.5.4 - - @backstage/plugin-search-backend-node@1.1.4 - - @backstage/plugin-search-common@1.2.2 - - @backstage/plugin-tech-insights-node@0.4.1 - -## 0.2.81-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.12.0-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.1.4-next.2 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.27-next.2 - - @backstage/plugin-auth-node@0.2.12-next.2 - - @backstage/backend-tasks@0.5.0-next.2 - - @backstage/plugin-adr-backend@0.3.1-next.2 - - @backstage/backend-common@0.18.3-next.2 - - @backstage/plugin-linguist-backend@0.2.0-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.11-next.2 - - example-app@0.2.81-next.2 - - @backstage/plugin-techdocs-backend@1.5.4-next.2 - - @backstage/plugin-auth-backend@0.18.1-next.2 - - @backstage/plugin-entity-feedback-backend@0.1.1-next.2 - - @backstage/plugin-jenkins-backend@0.1.33-next.2 - - @backstage/plugin-kubernetes-backend@0.9.4-next.2 - - @backstage/plugin-permission-backend@0.5.18-next.2 - - @backstage/plugin-permission-node@0.7.6-next.2 - - @backstage/plugin-playlist-backend@0.2.6-next.2 - - @backstage/plugin-search-backend@1.2.4-next.2 - - @backstage/plugin-lighthouse-backend@0.1.1-next.2 - - @backstage/plugin-search-backend-node@1.1.4-next.2 - - @backstage/plugin-tech-insights-backend@0.5.9-next.2 - - @backstage/plugin-tech-insights-node@0.4.1-next.2 - - @backstage/plugin-app-backend@0.3.43-next.2 - - @backstage/plugin-azure-devops-backend@0.3.22-next.2 - - @backstage/plugin-azure-sites-backend@0.1.5-next.2 - - @backstage/plugin-badges-backend@0.1.37-next.2 - - @backstage/plugin-catalog-backend@1.8.0-next.2 - - @backstage/plugin-catalog-node@1.3.4-next.2 - - @backstage/plugin-code-coverage-backend@0.2.9-next.2 - - @backstage/plugin-events-backend@0.2.4-next.2 - - @backstage/plugin-explore-backend@0.0.5-next.2 - - @backstage/plugin-graphql-backend@0.1.33-next.2 - - @backstage/plugin-kafka-backend@0.2.36-next.2 - - @backstage/plugin-proxy-backend@0.2.37-next.2 - - @backstage/plugin-rollbar-backend@0.1.40-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.4-next.2 - - @backstage/plugin-todo-backend@0.1.40-next.2 - - @backstage/plugin-events-node@0.2.4-next.2 - - @backstage/config@1.0.7-next.0 - - @backstage/integration@1.4.3-next.0 - -## 0.2.81-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.12.0-next.1 - - @backstage/plugin-permission-node@0.7.6-next.1 - - @backstage/plugin-techdocs-backend@1.5.4-next.1 - - @backstage/plugin-auth-backend@0.18.1-next.1 - - @backstage/backend-common@0.18.3-next.1 - - @backstage/catalog-client@1.4.0-next.1 - - @backstage/integration@1.4.3-next.0 - - @backstage/plugin-adr-backend@0.3.1-next.1 - - @backstage/plugin-app-backend@0.3.43-next.1 - - @backstage/plugin-auth-node@0.2.12-next.1 - - @backstage/plugin-azure-devops-backend@0.3.22-next.1 - - @backstage/plugin-azure-sites-backend@0.1.5-next.1 - - @backstage/plugin-catalog-backend@1.8.0-next.1 - - @backstage/plugin-code-coverage-backend@0.2.9-next.1 - - @backstage/plugin-entity-feedback-backend@0.1.1-next.1 - - @backstage/plugin-explore-backend@0.0.5-next.1 - - @backstage/plugin-graphql-backend@0.1.33-next.1 - - @backstage/plugin-jenkins-backend@0.1.33-next.1 - - @backstage/plugin-kubernetes-backend@0.9.4-next.1 - - @backstage/plugin-linguist-backend@0.2.0-next.1 - - @backstage/plugin-permission-backend@0.5.18-next.1 - - @backstage/plugin-permission-common@0.7.4-next.0 - - @backstage/plugin-playlist-backend@0.2.6-next.1 - - @backstage/plugin-proxy-backend@0.2.37-next.1 - - @backstage/plugin-rollbar-backend@0.1.40-next.1 - - @backstage/plugin-todo-backend@0.1.40-next.1 - - @backstage/plugin-lighthouse-backend@0.1.1-next.1 - - @backstage/backend-tasks@0.4.4-next.1 - - @backstage/config@1.0.7-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.11-next.1 - - @backstage/plugin-search-backend@1.2.4-next.1 - - example-app@0.2.81-next.1 - - @backstage/catalog-model@1.2.1-next.1 - - @backstage/plugin-badges-backend@0.1.37-next.1 - - @backstage/plugin-catalog-node@1.3.4-next.1 - - @backstage/plugin-events-backend@0.2.4-next.1 - - @backstage/plugin-events-node@0.2.4-next.1 - - @backstage/plugin-kafka-backend@0.2.36-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.1.4-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.4-next.1 - - @backstage/plugin-search-backend-node@1.1.4-next.1 - - @backstage/plugin-search-common@1.2.2-next.0 - - @backstage/plugin-tech-insights-backend@0.5.9-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.27-next.1 - - @backstage/plugin-tech-insights-node@0.4.1-next.1 - -## 0.2.81-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-client@1.4.0-next.0 - - @backstage/plugin-todo-backend@0.1.40-next.0 - - @backstage/plugin-scaffolder-backend@1.11.1-next.0 - - @backstage/plugin-catalog-backend@1.8.0-next.0 - - @backstage/plugin-tech-insights-backend@0.5.9-next.0 - - @backstage/plugin-linguist-backend@0.2.0-next.0 - - @backstage/plugin-adr-backend@0.3.1-next.0 - - @backstage/backend-tasks@0.4.4-next.0 - - @backstage/plugin-techdocs-backend@1.5.4-next.0 - - @backstage/backend-common@0.18.3-next.0 - - @backstage/catalog-model@1.2.1-next.0 - - @backstage/plugin-events-backend@0.2.4-next.0 - - @backstage/plugin-catalog-node@1.3.4-next.0 - - @backstage/plugin-app-backend@0.3.43-next.0 - - @backstage/plugin-events-node@0.2.4-next.0 - - @backstage/plugin-proxy-backend@0.2.37-next.0 - - @backstage/plugin-auth-backend@0.18.1-next.0 - - @backstage/plugin-badges-backend@0.1.37-next.0 - - @backstage/plugin-code-coverage-backend@0.2.9-next.0 - - @backstage/plugin-entity-feedback-backend@0.1.1-next.0 - - @backstage/plugin-jenkins-backend@0.1.33-next.0 - - @backstage/plugin-kubernetes-backend@0.9.4-next.0 - - @backstage/plugin-lighthouse-backend@0.1.1-next.0 - - @backstage/plugin-playlist-backend@0.2.6-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.11-next.0 - - example-app@0.2.81-next.0 - - @backstage/config@1.0.6 - - @backstage/integration@1.4.2 - - @backstage/plugin-auth-node@0.2.12-next.0 - - @backstage/plugin-azure-devops-backend@0.3.22-next.0 - - @backstage/plugin-azure-sites-backend@0.1.5-next.0 - - @backstage/plugin-explore-backend@0.0.5-next.0 - - @backstage/plugin-graphql-backend@0.1.33-next.0 - - @backstage/plugin-kafka-backend@0.2.36-next.0 - - @backstage/plugin-permission-backend@0.5.18-next.0 - - @backstage/plugin-permission-common@0.7.3 - - @backstage/plugin-permission-node@0.7.6-next.0 - - @backstage/plugin-rollbar-backend@0.1.40-next.0 - - @backstage/plugin-search-backend@1.2.4-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.1.4-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.4-next.0 - - @backstage/plugin-search-backend-node@1.1.4-next.0 - - @backstage/plugin-search-common@1.2.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.27-next.0 - - @backstage/plugin-tech-insights-node@0.4.1-next.0 - -## 0.2.80 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.7.2 - - @backstage/plugin-playlist-backend@0.2.5 - - @backstage/plugin-search-backend-module-elasticsearch@1.1.3 - - @backstage/backend-common@0.18.2 - - @backstage/plugin-kubernetes-backend@0.9.3 - - @backstage/plugin-lighthouse-backend@0.1.0 - - @backstage/plugin-code-coverage-backend@0.2.8 - - @backstage/plugin-azure-devops-backend@0.3.21 - - @backstage/plugin-azure-sites-backend@0.1.4 - - @backstage/plugin-adr-backend@0.3.0 - - @backstage/plugin-tech-insights-backend@0.5.8 - - @backstage/plugin-tech-insights-node@0.4.0 - - @backstage/plugin-entity-feedback-backend@0.1.0 - - @backstage/plugin-search-backend@1.2.3 - - @backstage/plugin-techdocs-backend@1.5.3 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.10 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.26 - - @backstage/plugin-scaffolder-backend@1.11.0 - - @backstage/plugin-events-backend@0.2.3 - - @backstage/plugin-kafka-backend@0.2.35 - - @backstage/plugin-proxy-backend@0.2.36 - - @backstage/plugin-app-backend@0.3.42 - - @backstage/catalog-model@1.2.0 - - @backstage/plugin-auth-backend@0.18.0 - - @backstage/plugin-linguist-backend@0.1.0 - - @backstage/plugin-events-node@0.2.3 - - example-app@0.2.80 - - @backstage/plugin-catalog-node@1.3.3 - - @backstage/backend-tasks@0.4.3 - - @backstage/catalog-client@1.3.1 - - @backstage/config@1.0.6 - - @backstage/integration@1.4.2 - - @backstage/plugin-auth-node@0.2.11 - - @backstage/plugin-badges-backend@0.1.36 - - @backstage/plugin-explore-backend@0.0.4 - - @backstage/plugin-graphql-backend@0.1.32 - - @backstage/plugin-jenkins-backend@0.1.32 - - @backstage/plugin-permission-backend@0.5.17 - - @backstage/plugin-permission-common@0.7.3 - - @backstage/plugin-permission-node@0.7.5 - - @backstage/plugin-rollbar-backend@0.1.39 - - @backstage/plugin-search-backend-module-pg@0.5.3 - - @backstage/plugin-search-backend-node@1.1.3 - - @backstage/plugin-search-common@1.2.1 - - @backstage/plugin-todo-backend@0.1.39 - -## 0.2.80-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-lighthouse-backend@0.1.0-next.0 - - @backstage/backend-common@0.18.2-next.2 - - @backstage/plugin-catalog-backend@1.7.2-next.2 - - @backstage/plugin-search-backend@1.2.3-next.2 - - @backstage/plugin-scaffolder-backend@1.11.0-next.2 - - @backstage/plugin-events-backend@0.2.3-next.2 - - @backstage/plugin-kafka-backend@0.2.35-next.2 - - @backstage/plugin-proxy-backend@0.2.36-next.2 - - @backstage/plugin-app-backend@0.3.42-next.2 - - @backstage/catalog-model@1.2.0-next.1 - - @backstage/plugin-kubernetes-backend@0.9.3-next.2 - - @backstage/plugin-events-node@0.2.3-next.2 - - @backstage/plugin-catalog-node@1.3.3-next.2 - - @backstage/backend-tasks@0.4.3-next.2 - - @backstage/plugin-auth-backend@0.17.5-next.2 - - @backstage/plugin-auth-node@0.2.11-next.2 - - @backstage/plugin-permission-node@0.7.5-next.2 - - @backstage/plugin-playlist-backend@0.2.5-next.2 - - @backstage/plugin-rollbar-backend@0.1.39-next.2 - - @backstage/plugin-search-backend-module-pg@0.5.3-next.2 - - @backstage/plugin-tech-insights-backend@0.5.8-next.2 - - @backstage/plugin-techdocs-backend@1.5.3-next.2 - - example-app@0.2.80-next.2 - - @backstage/catalog-client@1.3.1-next.1 - - @backstage/config@1.0.6 - - @backstage/integration@1.4.2 - - @backstage/plugin-adr-backend@0.2.7-next.2 - - @backstage/plugin-azure-devops-backend@0.3.21-next.2 - - @backstage/plugin-azure-sites-backend@0.1.4-next.2 - - @backstage/plugin-badges-backend@0.1.36-next.2 - - @backstage/plugin-code-coverage-backend@0.2.8-next.2 - - @backstage/plugin-explore-backend@0.0.4-next.2 - - @backstage/plugin-graphql-backend@0.1.32-next.2 - - @backstage/plugin-jenkins-backend@0.1.32-next.2 - - @backstage/plugin-permission-backend@0.5.17-next.2 - - @backstage/plugin-permission-common@0.7.3 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.10-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.1.3-next.2 - - @backstage/plugin-search-backend-node@1.1.3-next.2 - - @backstage/plugin-search-common@1.2.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.26-next.2 - - @backstage/plugin-tech-insights-node@0.4.0-next.2 - - @backstage/plugin-todo-backend@0.1.39-next.2 - -## 0.2.80-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.7.2-next.1 - - @backstage/plugin-tech-insights-backend@0.5.8-next.1 - - @backstage/plugin-tech-insights-node@0.4.0-next.1 - - @backstage/plugin-azure-devops-backend@0.3.21-next.1 - - @backstage/backend-common@0.18.2-next.1 - - @backstage/plugin-kubernetes-backend@0.9.3-next.1 - - @backstage/plugin-scaffolder-backend@1.11.0-next.1 - - @backstage/plugin-playlist-backend@0.2.5-next.1 - - example-app@0.2.80-next.1 - - @backstage/backend-tasks@0.4.3-next.1 - - @backstage/catalog-client@1.3.1-next.0 - - @backstage/catalog-model@1.1.6-next.0 - - @backstage/config@1.0.6 - - @backstage/integration@1.4.2 - - @backstage/plugin-adr-backend@0.2.7-next.1 - - @backstage/plugin-app-backend@0.3.42-next.1 - - @backstage/plugin-auth-backend@0.17.5-next.1 - - @backstage/plugin-auth-node@0.2.11-next.1 - - @backstage/plugin-azure-sites-backend@0.1.4-next.1 - - @backstage/plugin-badges-backend@0.1.36-next.1 - - @backstage/plugin-catalog-node@1.3.3-next.1 - - @backstage/plugin-code-coverage-backend@0.2.8-next.1 - - @backstage/plugin-events-backend@0.2.3-next.1 - - @backstage/plugin-events-node@0.2.3-next.1 - - @backstage/plugin-explore-backend@0.0.4-next.1 - - @backstage/plugin-graphql-backend@0.1.32-next.1 - - @backstage/plugin-jenkins-backend@0.1.32-next.1 - - @backstage/plugin-kafka-backend@0.2.35-next.1 - - @backstage/plugin-permission-backend@0.5.17-next.1 - - @backstage/plugin-permission-common@0.7.3 - - @backstage/plugin-permission-node@0.7.5-next.1 - - @backstage/plugin-proxy-backend@0.2.36-next.1 - - @backstage/plugin-rollbar-backend@0.1.39-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.10-next.1 - - @backstage/plugin-search-backend@1.2.3-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.1.3-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.3-next.1 - - @backstage/plugin-search-backend-node@1.1.3-next.1 - - @backstage/plugin-search-common@1.2.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.26-next.1 - - @backstage/plugin-techdocs-backend@1.5.3-next.1 - - @backstage/plugin-todo-backend@0.1.39-next.1 - -## 0.2.80-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.9.3-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.10-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.26-next.0 - - @backstage/plugin-scaffolder-backend@1.11.0-next.0 - - @backstage/catalog-model@1.1.6-next.0 - - example-app@0.2.80-next.0 - - @backstage/plugin-techdocs-backend@1.5.3-next.0 - - @backstage/backend-common@0.18.2-next.0 - - @backstage/plugin-app-backend@0.3.42-next.0 - - @backstage/catalog-client@1.3.1-next.0 - - @backstage/plugin-adr-backend@0.2.7-next.0 - - @backstage/plugin-auth-backend@0.17.5-next.0 - - @backstage/plugin-badges-backend@0.1.36-next.0 - - @backstage/plugin-catalog-backend@1.7.2-next.0 - - @backstage/plugin-catalog-node@1.3.3-next.0 - - @backstage/plugin-code-coverage-backend@0.2.8-next.0 - - @backstage/plugin-jenkins-backend@0.1.32-next.0 - - @backstage/plugin-kafka-backend@0.2.35-next.0 - - @backstage/plugin-playlist-backend@0.2.5-next.0 - - @backstage/plugin-tech-insights-backend@0.5.8-next.0 - - @backstage/plugin-todo-backend@0.1.39-next.0 - - @backstage/backend-tasks@0.4.3-next.0 - - @backstage/plugin-auth-node@0.2.11-next.0 - - @backstage/plugin-events-backend@0.2.3-next.0 - - @backstage/plugin-permission-node@0.7.5-next.0 - - @backstage/plugin-rollbar-backend@0.1.39-next.0 - - @backstage/plugin-search-backend-module-pg@0.5.3-next.0 - - @backstage/plugin-azure-devops-backend@0.3.21-next.0 - - @backstage/plugin-azure-sites-backend@0.1.4-next.0 - - @backstage/plugin-explore-backend@0.0.4-next.0 - - @backstage/plugin-graphql-backend@0.1.32-next.0 - - @backstage/plugin-permission-backend@0.5.17-next.0 - - @backstage/plugin-proxy-backend@0.2.36-next.0 - - @backstage/plugin-search-backend@1.2.3-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.1.3-next.0 - - @backstage/plugin-search-backend-node@1.1.3-next.0 - - @backstage/plugin-tech-insights-node@0.3.10-next.0 - - @backstage/plugin-events-node@0.2.3-next.0 - -## 0.2.79 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.10.0 - - @backstage/backend-common@0.18.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.8 - - @backstage/plugin-adr-backend@0.2.5 - - @backstage/catalog-model@1.1.5 - - @backstage/plugin-search-backend-module-elasticsearch@1.1.1 - - @backstage/plugin-search-backend-node@1.1.1 - - @backstage/catalog-client@1.3.0 - - @backstage/plugin-explore-backend@0.0.2 - - @backstage/backend-tasks@0.4.1 - - @backstage/plugin-events-backend@0.2.1 - - @backstage/plugin-catalog-node@1.3.1 - - @backstage/plugin-app-backend@0.3.40 - - @backstage/plugin-code-coverage-backend@0.2.6 - - @backstage/plugin-catalog-backend@1.7.0 - - @backstage/plugin-tech-insights-backend@0.5.6 - - @backstage/plugin-kubernetes-backend@0.9.1 - - @backstage/config@1.0.6 - - @backstage/plugin-search-backend@1.2.1 - - @backstage/plugin-events-node@0.2.1 - - example-app@0.2.79 - - @backstage/integration@1.4.2 - - @backstage/plugin-auth-backend@0.17.3 - - @backstage/plugin-auth-node@0.2.9 - - @backstage/plugin-azure-devops-backend@0.3.19 - - @backstage/plugin-azure-sites-backend@0.1.2 - - @backstage/plugin-badges-backend@0.1.34 - - @backstage/plugin-graphql-backend@0.1.30 - - @backstage/plugin-jenkins-backend@0.1.30 - - @backstage/plugin-kafka-backend@0.2.33 - - @backstage/plugin-permission-backend@0.5.15 - - @backstage/plugin-permission-common@0.7.3 - - @backstage/plugin-permission-node@0.7.3 - - @backstage/plugin-playlist-backend@0.2.3 - - @backstage/plugin-proxy-backend@0.2.34 - - @backstage/plugin-rollbar-backend@0.1.37 - - @backstage/plugin-search-backend-module-pg@0.5.1 - - @backstage/plugin-search-common@1.2.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.24 - - @backstage/plugin-tech-insights-node@0.3.8 - - @backstage/plugin-techdocs-backend@1.5.1 - - @backstage/plugin-todo-backend@0.1.37 - -## 0.2.79-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-adr-backend@0.2.5-next.2 - - @backstage/backend-common@0.18.0-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.8-next.2 - - @backstage/plugin-scaffolder-backend@1.10.0-next.2 - - @backstage/backend-tasks@0.4.1-next.1 - - @backstage/catalog-client@1.3.0-next.2 - - @backstage/plugin-catalog-backend@1.7.0-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.1.1-next.2 - - @backstage/plugin-events-backend@0.2.1-next.1 - - @backstage/plugin-app-backend@0.3.40-next.1 - - @backstage/plugin-kubernetes-backend@0.9.1-next.2 - - @backstage/plugin-catalog-node@1.3.1-next.2 - - @backstage/plugin-events-node@0.2.1-next.1 - - @backstage/plugin-auth-backend@0.17.3-next.2 - - @backstage/plugin-auth-node@0.2.9-next.1 - - @backstage/plugin-permission-node@0.7.3-next.1 - - @backstage/plugin-playlist-backend@0.2.3-next.2 - - @backstage/plugin-rollbar-backend@0.1.37-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.1-next.2 - - @backstage/plugin-tech-insights-backend@0.5.6-next.2 - - @backstage/plugin-techdocs-backend@1.5.1-next.2 - - example-app@0.2.79-next.2 - - @backstage/plugin-azure-devops-backend@0.3.19-next.1 - - @backstage/plugin-azure-sites-backend@0.1.2-next.1 - - @backstage/plugin-badges-backend@0.1.34-next.2 - - @backstage/plugin-code-coverage-backend@0.2.6-next.2 - - @backstage/plugin-explore-backend@0.0.2-next.2 - - @backstage/plugin-graphql-backend@0.1.30-next.2 - - @backstage/plugin-jenkins-backend@0.1.30-next.2 - - @backstage/plugin-kafka-backend@0.2.33-next.2 - - @backstage/plugin-permission-backend@0.5.15-next.1 - - @backstage/plugin-proxy-backend@0.2.34-next.1 - - @backstage/plugin-search-backend@1.2.1-next.2 - - @backstage/plugin-search-backend-node@1.1.1-next.2 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.24-next.1 - - @backstage/plugin-tech-insights-node@0.3.8-next.1 - - @backstage/plugin-todo-backend@0.1.37-next.2 - - @backstage/catalog-model@1.1.5-next.1 - - @backstage/config@1.0.6-next.0 - - @backstage/integration@1.4.2-next.0 - - @backstage/plugin-permission-common@0.7.3-next.0 - - @backstage/plugin-search-common@1.2.1-next.0 - -## 0.2.79-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.10.0-next.1 - - @backstage/backend-common@0.18.0-next.0 - - @backstage/plugin-explore-backend@0.0.2-next.1 - - @backstage/plugin-events-backend@0.2.1-next.0 - - @backstage/plugin-app-backend@0.3.40-next.0 - - @backstage/plugin-tech-insights-backend@0.5.6-next.1 - - @backstage/config@1.0.6-next.0 - - @backstage/plugin-catalog-backend@1.7.0-next.1 - - @backstage/plugin-catalog-node@1.3.1-next.1 - - @backstage/plugin-events-node@0.2.1-next.0 - - example-app@0.2.79-next.1 - - @backstage/backend-tasks@0.4.1-next.0 - - @backstage/catalog-client@1.3.0-next.1 - - @backstage/catalog-model@1.1.5-next.1 - - @backstage/integration@1.4.2-next.0 - - @backstage/plugin-auth-backend@0.17.3-next.1 - - @backstage/plugin-auth-node@0.2.9-next.0 - - @backstage/plugin-azure-devops-backend@0.3.19-next.0 - - @backstage/plugin-azure-sites-backend@0.1.2-next.0 - - @backstage/plugin-badges-backend@0.1.34-next.1 - - @backstage/plugin-code-coverage-backend@0.2.6-next.1 - - @backstage/plugin-graphql-backend@0.1.30-next.1 - - @backstage/plugin-jenkins-backend@0.1.30-next.1 - - @backstage/plugin-kafka-backend@0.2.33-next.1 - - @backstage/plugin-kubernetes-backend@0.9.1-next.1 - - @backstage/plugin-permission-backend@0.5.15-next.0 - - @backstage/plugin-permission-common@0.7.3-next.0 - - @backstage/plugin-permission-node@0.7.3-next.0 - - @backstage/plugin-playlist-backend@0.2.3-next.1 - - @backstage/plugin-proxy-backend@0.2.34-next.0 - - @backstage/plugin-rollbar-backend@0.1.37-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.8-next.1 - - @backstage/plugin-search-backend@1.2.1-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.1.1-next.1 - - @backstage/plugin-search-backend-module-pg@0.5.1-next.1 - - @backstage/plugin-search-backend-node@1.1.1-next.1 - - @backstage/plugin-search-common@1.2.1-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.24-next.0 - - @backstage/plugin-tech-insights-node@0.3.8-next.0 - - @backstage/plugin-techdocs-backend@1.5.1-next.1 - - @backstage/plugin-todo-backend@0.1.37-next.1 - -## 0.2.79-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.5-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.1.1-next.0 - - @backstage/plugin-search-backend-node@1.1.1-next.0 - - @backstage/catalog-client@1.3.0-next.0 - - @backstage/plugin-explore-backend@0.0.2-next.0 - - @backstage/plugin-code-coverage-backend@0.2.6-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.8-next.0 - - @backstage/plugin-scaffolder-backend@1.9.1-next.0 - - @backstage/plugin-catalog-backend@1.7.0-next.0 - - @backstage/plugin-search-backend@1.2.1-next.0 - - example-app@0.2.79-next.0 - - @backstage/backend-common@0.17.0 - - @backstage/backend-tasks@0.4.0 - - @backstage/config@1.0.5 - - @backstage/integration@1.4.1 - - @backstage/plugin-app-backend@0.3.39 - - @backstage/plugin-auth-backend@0.17.3-next.0 - - @backstage/plugin-auth-node@0.2.8 - - @backstage/plugin-azure-devops-backend@0.3.18 - - @backstage/plugin-azure-sites-backend@0.1.1 - - @backstage/plugin-badges-backend@0.1.34-next.0 - - @backstage/plugin-catalog-node@1.3.1-next.0 - - @backstage/plugin-events-backend@0.2.0 - - @backstage/plugin-events-node@0.2.0 - - @backstage/plugin-graphql-backend@0.1.30-next.0 - - @backstage/plugin-jenkins-backend@0.1.30-next.0 - - @backstage/plugin-kafka-backend@0.2.33-next.0 - - @backstage/plugin-kubernetes-backend@0.9.1-next.0 - - @backstage/plugin-permission-backend@0.5.14 - - @backstage/plugin-permission-common@0.7.2 - - @backstage/plugin-permission-node@0.7.2 - - @backstage/plugin-playlist-backend@0.2.3-next.0 - - @backstage/plugin-proxy-backend@0.2.33 - - @backstage/plugin-rollbar-backend@0.1.36 - - @backstage/plugin-search-backend-module-pg@0.5.1-next.0 - - @backstage/plugin-search-common@1.2.0 - - @backstage/plugin-tech-insights-backend@0.5.6-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.23 - - @backstage/plugin-tech-insights-node@0.3.7 - - @backstage/plugin-techdocs-backend@1.5.1-next.0 - - @backstage/plugin-todo-backend@0.1.37-next.0 - -## 0.2.78 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.9.0 - - @backstage/plugin-azure-devops-backend@0.3.18 - - @backstage/plugin-kubernetes-backend@0.9.0 - - @backstage/plugin-catalog-backend@1.6.0 - - @backstage/catalog-client@1.2.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.7 - - @backstage/plugin-search-backend@1.2.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.1.0 - - @backstage/plugin-search-backend-node@1.1.0 - - @backstage/plugin-playlist-backend@0.2.2 - - @backstage/plugin-search-backend-module-pg@0.5.0 - - @backstage/backend-common@0.17.0 - - @backstage/plugin-app-backend@0.3.39 - - @backstage/plugin-catalog-node@1.3.0 - - @backstage/plugin-events-backend@0.2.0 - - @backstage/backend-tasks@0.4.0 - - @backstage/plugin-permission-backend@0.5.14 - - @backstage/plugin-permission-common@0.7.2 - - @backstage/plugin-permission-node@0.7.2 - - @backstage/plugin-kafka-backend@0.2.32 - - @backstage/plugin-jenkins-backend@0.1.29 - - @backstage/plugin-events-node@0.2.0 - - @backstage/integration@1.4.1 - - @backstage/plugin-auth-backend@0.17.2 - - @backstage/plugin-auth-node@0.2.8 - - @backstage/plugin-azure-sites-backend@0.1.1 - - @backstage/plugin-code-coverage-backend@0.2.5 - - @backstage/plugin-graphql-backend@0.1.29 - - @backstage/plugin-proxy-backend@0.2.33 - - @backstage/plugin-rollbar-backend@0.1.36 - - @backstage/plugin-techdocs-backend@1.5.0 - - @backstage/plugin-todo-backend@0.1.36 - - @backstage/plugin-explore-backend@0.0.1 - - @backstage/plugin-search-common@1.2.0 - - example-app@0.2.78 - - @backstage/plugin-badges-backend@0.1.33 - - @backstage/plugin-tech-insights-backend@0.5.5 - - @backstage/catalog-model@1.1.4 - - @backstage/config@1.0.5 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.23 - - @backstage/plugin-tech-insights-node@0.3.7 - -## 0.2.78-next.4 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.6.0-next.3 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.7-next.3 - - @backstage/plugin-scaffolder-backend@1.9.0-next.3 - - @backstage/backend-tasks@0.4.0-next.3 - - @backstage/plugin-permission-backend@0.5.14-next.3 - - @backstage/plugin-permission-common@0.7.2-next.2 - - @backstage/plugin-permission-node@0.7.2-next.3 - - @backstage/plugin-playlist-backend@0.2.2-next.4 - - @backstage/plugin-search-backend@1.2.0-next.3 - - @backstage/plugin-kubernetes-backend@0.8.1-next.4 - - @backstage/backend-common@0.17.0-next.3 - - @backstage/plugin-search-backend-module-elasticsearch@1.1.0-next.3 - - @backstage/plugin-techdocs-backend@1.5.0-next.3 - - example-app@0.2.78-next.4 - - @backstage/catalog-client@1.2.0-next.1 - - @backstage/catalog-model@1.1.4-next.1 - - @backstage/config@1.0.5-next.1 - - @backstage/integration@1.4.1-next.1 - - @backstage/plugin-app-backend@0.3.39-next.3 - - @backstage/plugin-auth-backend@0.17.2-next.3 - - @backstage/plugin-auth-node@0.2.8-next.3 - - @backstage/plugin-azure-devops-backend@0.3.18-next.3 - - @backstage/plugin-azure-sites-backend@0.1.1-next.3 - - @backstage/plugin-badges-backend@0.1.33-next.3 - - @backstage/plugin-catalog-node@1.3.0-next.3 - - @backstage/plugin-code-coverage-backend@0.2.5-next.3 - - @backstage/plugin-events-backend@0.2.0-next.3 - - @backstage/plugin-events-node@0.2.0-next.3 - - @backstage/plugin-explore-backend@0.0.1-next.2 - - @backstage/plugin-graphql-backend@0.1.29-next.3 - - @backstage/plugin-jenkins-backend@0.1.29-next.3 - - @backstage/plugin-kafka-backend@0.2.32-next.3 - - @backstage/plugin-proxy-backend@0.2.33-next.3 - - @backstage/plugin-rollbar-backend@0.1.36-next.3 - - @backstage/plugin-search-backend-module-pg@0.4.3-next.3 - - @backstage/plugin-search-backend-node@1.1.0-next.3 - - @backstage/plugin-search-common@1.2.0-next.3 - - @backstage/plugin-tech-insights-backend@0.5.5-next.3 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.23-next.3 - - @backstage/plugin-tech-insights-node@0.3.7-next.3 - - @backstage/plugin-todo-backend@0.1.36-next.3 - -## 0.2.78-next.3 - -### Patch Changes - -- Updated dependencies - - example-app@0.2.78-next.3 - - @backstage/backend-common@0.17.0-next.2 - - @backstage/backend-tasks@0.4.0-next.2 - - @backstage/catalog-client@1.2.0-next.1 - - @backstage/catalog-model@1.1.4-next.1 - - @backstage/config@1.0.5-next.1 - - @backstage/integration@1.4.1-next.1 - - @backstage/plugin-app-backend@0.3.39-next.2 - - @backstage/plugin-auth-backend@0.17.2-next.2 - - @backstage/plugin-auth-node@0.2.8-next.2 - - @backstage/plugin-azure-devops-backend@0.3.18-next.2 - - @backstage/plugin-azure-sites-backend@0.1.1-next.2 - - @backstage/plugin-badges-backend@0.1.33-next.2 - - @backstage/plugin-catalog-backend@1.6.0-next.2 - - @backstage/plugin-catalog-node@1.3.0-next.2 - - @backstage/plugin-code-coverage-backend@0.2.5-next.2 - - @backstage/plugin-events-backend@0.2.0-next.2 - - @backstage/plugin-events-node@0.2.0-next.2 - - @backstage/plugin-explore-backend@0.0.1-next.1 - - @backstage/plugin-graphql-backend@0.1.29-next.2 - - @backstage/plugin-jenkins-backend@0.1.29-next.2 - - @backstage/plugin-kafka-backend@0.2.32-next.2 - - @backstage/plugin-kubernetes-backend@0.8.1-next.3 - - @backstage/plugin-permission-backend@0.5.14-next.2 - - @backstage/plugin-permission-common@0.7.2-next.1 - - @backstage/plugin-permission-node@0.7.2-next.2 - - @backstage/plugin-playlist-backend@0.2.2-next.3 - - @backstage/plugin-proxy-backend@0.2.33-next.2 - - @backstage/plugin-rollbar-backend@0.1.36-next.2 - - @backstage/plugin-scaffolder-backend@1.9.0-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.7-next.2 - - @backstage/plugin-search-backend@1.2.0-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.1.0-next.2 - - @backstage/plugin-search-backend-module-pg@0.4.3-next.2 - - @backstage/plugin-search-backend-node@1.1.0-next.2 - - @backstage/plugin-search-common@1.2.0-next.2 - - @backstage/plugin-tech-insights-backend@0.5.5-next.2 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.23-next.2 - - @backstage/plugin-tech-insights-node@0.3.7-next.2 - - @backstage/plugin-techdocs-backend@1.4.2-next.2 - - @backstage/plugin-todo-backend@0.1.36-next.2 - -## 0.2.78-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-azure-devops-backend@0.3.18-next.2 - - @backstage/plugin-search-backend@1.2.0-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.1.0-next.2 - - @backstage/plugin-search-backend-node@1.1.0-next.2 - - @backstage/plugin-catalog-backend@1.6.0-next.2 - - @backstage/plugin-playlist-backend@0.2.2-next.2 - - @backstage/plugin-search-backend-module-pg@0.4.3-next.2 - - @backstage/plugin-app-backend@0.3.39-next.2 - - @backstage/plugin-catalog-node@1.3.0-next.2 - - @backstage/plugin-events-backend@0.2.0-next.2 - - @backstage/plugin-scaffolder-backend@1.9.0-next.2 - - @backstage/backend-common@0.17.0-next.2 - - @backstage/plugin-search-common@1.2.0-next.2 - - example-app@0.2.78-next.2 - - @backstage/plugin-techdocs-backend@1.4.2-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.7-next.2 - - @backstage/backend-tasks@0.4.0-next.2 - - @backstage/plugin-auth-backend@0.17.2-next.2 - - @backstage/plugin-auth-node@0.2.8-next.2 - - @backstage/plugin-azure-sites-backend@0.1.1-next.2 - - @backstage/plugin-badges-backend@0.1.33-next.2 - - @backstage/plugin-code-coverage-backend@0.2.5-next.2 - - @backstage/plugin-explore-backend@0.0.1-next.1 - - @backstage/plugin-graphql-backend@0.1.29-next.2 - - @backstage/plugin-jenkins-backend@0.1.29-next.2 - - @backstage/plugin-kafka-backend@0.2.32-next.2 - - @backstage/plugin-kubernetes-backend@0.8.1-next.2 - - @backstage/plugin-permission-backend@0.5.14-next.2 - - @backstage/plugin-permission-node@0.7.2-next.2 - - @backstage/plugin-proxy-backend@0.2.33-next.2 - - @backstage/plugin-rollbar-backend@0.1.36-next.2 - - @backstage/plugin-tech-insights-backend@0.5.5-next.2 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.23-next.2 - - @backstage/plugin-tech-insights-node@0.3.7-next.2 - - @backstage/plugin-todo-backend@0.1.36-next.2 - - @backstage/catalog-client@1.2.0-next.1 - - @backstage/catalog-model@1.1.4-next.1 - - @backstage/config@1.0.5-next.1 - - @backstage/integration@1.4.1-next.1 - - @backstage/plugin-events-node@0.2.0-next.2 - - @backstage/plugin-permission-common@0.7.2-next.1 - -## 0.2.78-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.17.0-next.1 - - @backstage/plugin-catalog-backend@1.6.0-next.1 - - @backstage/plugin-kafka-backend@0.2.32-next.1 - - @backstage/backend-tasks@0.4.0-next.1 - - @backstage/plugin-search-backend-node@1.0.5-next.1 - - @backstage/plugin-jenkins-backend@0.1.29-next.1 - - @backstage/plugin-scaffolder-backend@1.8.1-next.1 - - @backstage/plugin-explore-backend@0.0.1-next.0 - - @backstage/plugin-proxy-backend@0.2.33-next.1 - - @backstage/plugin-app-backend@0.3.39-next.1 - - @backstage/plugin-auth-backend@0.17.2-next.1 - - @backstage/plugin-auth-node@0.2.8-next.1 - - @backstage/plugin-azure-devops-backend@0.3.18-next.1 - - @backstage/plugin-azure-sites-backend@0.1.1-next.1 - - @backstage/plugin-badges-backend@0.1.33-next.1 - - @backstage/plugin-catalog-node@1.2.2-next.1 - - @backstage/plugin-code-coverage-backend@0.2.5-next.1 - - @backstage/plugin-events-backend@0.2.0-next.1 - - @backstage/plugin-graphql-backend@0.1.29-next.1 - - @backstage/plugin-kubernetes-backend@0.8.1-next.1 - - @backstage/plugin-permission-backend@0.5.14-next.1 - - @backstage/plugin-permission-node@0.7.2-next.1 - - @backstage/plugin-playlist-backend@0.2.2-next.1 - - @backstage/plugin-rollbar-backend@0.1.36-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.7-next.1 - - @backstage/plugin-search-backend@1.1.2-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.0.5-next.1 - - @backstage/plugin-search-backend-module-pg@0.4.3-next.1 - - @backstage/plugin-tech-insights-backend@0.5.5-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.23-next.1 - - @backstage/plugin-tech-insights-node@0.3.7-next.1 - - @backstage/plugin-techdocs-backend@1.4.2-next.1 - - @backstage/plugin-todo-backend@0.1.36-next.1 - - example-app@0.2.78-next.1 - - @backstage/config@1.0.5-next.1 - - @backstage/integration@1.4.1-next.1 - - @backstage/catalog-client@1.2.0-next.1 - - @backstage/catalog-model@1.1.4-next.1 - - @backstage/plugin-events-node@0.2.0-next.1 - - @backstage/plugin-permission-common@0.7.2-next.1 - - @backstage/plugin-search-common@1.1.2-next.1 - -## 0.2.78-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.8.1-next.0 - - @backstage/catalog-client@1.2.0-next.0 - - @backstage/plugin-catalog-backend@1.6.0-next.0 - - @backstage/plugin-events-backend@0.2.0-next.0 - - @backstage/plugin-search-backend-node@1.0.5-next.0 - - @backstage/plugin-events-node@0.2.0-next.0 - - @backstage/backend-common@0.16.1-next.0 - - @backstage/integration@1.4.1-next.0 - - @backstage/plugin-app-backend@0.3.39-next.0 - - @backstage/plugin-auth-backend@0.17.2-next.0 - - @backstage/plugin-auth-node@0.2.8-next.0 - - @backstage/plugin-azure-devops-backend@0.3.18-next.0 - - @backstage/plugin-azure-sites-backend@0.1.1-next.0 - - @backstage/plugin-code-coverage-backend@0.2.5-next.0 - - @backstage/plugin-graphql-backend@0.1.29-next.0 - - @backstage/plugin-jenkins-backend@0.1.29-next.0 - - @backstage/plugin-permission-backend@0.5.14-next.0 - - @backstage/plugin-permission-common@0.7.2-next.0 - - @backstage/plugin-permission-node@0.7.2-next.0 - - @backstage/plugin-playlist-backend@0.2.2-next.0 - - @backstage/plugin-proxy-backend@0.2.33-next.0 - - @backstage/plugin-rollbar-backend@0.1.36-next.0 - - @backstage/plugin-techdocs-backend@1.4.2-next.0 - - @backstage/plugin-todo-backend@0.1.36-next.0 - - @backstage/plugin-kubernetes-backend@0.8.1-next.0 - - example-app@0.2.78-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.7-next.0 - - @backstage/plugin-badges-backend@0.1.33-next.0 - - @backstage/plugin-catalog-node@1.2.2-next.0 - - @backstage/plugin-tech-insights-backend@0.5.5-next.0 - - @backstage/backend-tasks@0.3.8-next.0 - - @backstage/catalog-model@1.1.4-next.0 - - @backstage/config@1.0.5-next.0 - - @backstage/plugin-kafka-backend@0.2.32-next.0 - - @backstage/plugin-search-backend@1.1.2-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.0.5-next.0 - - @backstage/plugin-search-backend-module-pg@0.4.3-next.0 - - @backstage/plugin-search-common@1.1.2-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.23-next.0 - - @backstage/plugin-tech-insights-node@0.3.7-next.0 - -## 0.2.77 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.16.0 - - @backstage/plugin-auth-backend@0.17.1 - - @backstage/plugin-catalog-backend@1.5.1 - - @backstage/plugin-techdocs-backend@1.4.1 - - @backstage/plugin-scaffolder-backend@1.8.0 - - @backstage/integration@1.4.0 - - @backstage/backend-tasks@0.3.7 - - @backstage/plugin-playlist-backend@0.2.1 - - @backstage/plugin-azure-devops-backend@0.3.17 - - @backstage/catalog-model@1.1.3 - - @backstage/plugin-auth-node@0.2.7 - - @backstage/plugin-permission-common@0.7.1 - - @backstage/plugin-code-coverage-backend@0.2.4 - - @backstage/plugin-events-backend@0.1.0 - - @backstage/plugin-events-node@0.1.0 - - @backstage/plugin-kubernetes-backend@0.8.0 - - @backstage/plugin-tech-insights-backend@0.5.4 - - @backstage/plugin-tech-insights-node@0.3.6 - - @backstage/plugin-azure-sites-backend@0.1.0 - - example-app@0.2.77 - - @backstage/plugin-app-backend@0.3.38 - - @backstage/plugin-badges-backend@0.1.32 - - @backstage/plugin-catalog-node@1.2.1 - - @backstage/plugin-graphql-backend@0.1.28 - - @backstage/plugin-jenkins-backend@0.1.28 - - @backstage/plugin-kafka-backend@0.2.31 - - @backstage/plugin-permission-backend@0.5.13 - - @backstage/plugin-permission-node@0.7.1 - - @backstage/plugin-proxy-backend@0.2.32 - - @backstage/plugin-rollbar-backend@0.1.35 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.6 - - @backstage/plugin-search-backend@1.1.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.0.4 - - @backstage/plugin-search-backend-module-pg@0.4.2 - - @backstage/plugin-search-backend-node@1.0.4 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.22 - - @backstage/plugin-todo-backend@0.1.35 - - @backstage/catalog-client@1.1.2 - - @backstage/config@1.0.4 - - @backstage/plugin-search-common@1.1.1 - -## 0.2.77-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.17.1-next.1 - - @backstage/backend-common@0.16.0-next.1 - - @backstage/plugin-scaffolder-backend@1.8.0-next.2 - - @backstage/plugin-code-coverage-backend@0.2.4-next.1 - - @backstage/plugin-kubernetes-backend@0.8.0-next.1 - - @backstage/plugin-tech-insights-backend@0.5.4-next.1 - - example-app@0.2.77-next.2 - - @backstage/backend-tasks@0.3.7-next.1 - - @backstage/plugin-app-backend@0.3.38-next.1 - - @backstage/plugin-auth-node@0.2.7-next.1 - - @backstage/plugin-azure-devops-backend@0.3.17-next.2 - - @backstage/plugin-azure-sites-backend@0.1.0-next.1 - - @backstage/plugin-badges-backend@0.1.32-next.1 - - @backstage/plugin-catalog-backend@1.5.1-next.1 - - @backstage/plugin-graphql-backend@0.1.28-next.1 - - @backstage/plugin-jenkins-backend@0.1.28-next.1 - - @backstage/plugin-kafka-backend@0.2.31-next.1 - - @backstage/plugin-permission-backend@0.5.13-next.1 - - @backstage/plugin-permission-node@0.7.1-next.1 - - @backstage/plugin-playlist-backend@0.2.1-next.2 - - @backstage/plugin-proxy-backend@0.2.32-next.1 - - @backstage/plugin-rollbar-backend@0.1.35-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.6-next.2 - - @backstage/plugin-search-backend@1.1.1-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.0.4-next.1 - - @backstage/plugin-search-backend-module-pg@0.4.2-next.1 - - @backstage/plugin-search-backend-node@1.0.4-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.22-next.1 - - @backstage/plugin-tech-insights-node@0.3.6-next.1 - - @backstage/plugin-techdocs-backend@1.4.1-next.1 - - @backstage/plugin-todo-backend@0.1.35-next.1 - - @backstage/catalog-client@1.1.2-next.0 - - @backstage/catalog-model@1.1.3-next.0 - - @backstage/config@1.0.4-next.0 - - @backstage/integration@1.4.0-next.0 - - @backstage/plugin-permission-common@0.7.1-next.0 - - @backstage/plugin-search-common@1.1.1-next.0 - -## 0.2.77-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.8.0-next.1 - - @backstage/plugin-playlist-backend@0.2.1-next.1 - - @backstage/plugin-azure-devops-backend@0.3.17-next.1 - - example-app@0.2.77-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.6-next.1 - -## 0.2.77-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.16.0-next.0 - - @backstage/plugin-catalog-backend@1.5.1-next.0 - - @backstage/plugin-techdocs-backend@1.4.1-next.0 - - @backstage/plugin-scaffolder-backend@1.8.0-next.0 - - @backstage/integration@1.4.0-next.0 - - @backstage/plugin-auth-backend@0.17.1-next.0 - - @backstage/backend-tasks@0.3.7-next.0 - - @backstage/catalog-model@1.1.3-next.0 - - @backstage/plugin-auth-node@0.2.7-next.0 - - @backstage/plugin-permission-common@0.7.1-next.0 - - @backstage/plugin-tech-insights-backend@0.5.4-next.0 - - @backstage/plugin-tech-insights-node@0.3.6-next.0 - - @backstage/plugin-azure-sites-backend@0.1.0-next.0 - - @backstage/plugin-kubernetes-backend@0.8.0-next.0 - - example-app@0.2.77-next.0 - - @backstage/plugin-app-backend@0.3.38-next.0 - - @backstage/plugin-azure-devops-backend@0.3.17-next.0 - - @backstage/plugin-badges-backend@0.1.32-next.0 - - @backstage/plugin-code-coverage-backend@0.2.4-next.0 - - @backstage/plugin-graphql-backend@0.1.28-next.0 - - @backstage/plugin-jenkins-backend@0.1.28-next.0 - - @backstage/plugin-kafka-backend@0.2.31-next.0 - - @backstage/plugin-permission-backend@0.5.13-next.0 - - @backstage/plugin-permission-node@0.7.1-next.0 - - @backstage/plugin-playlist-backend@0.2.1-next.0 - - @backstage/plugin-proxy-backend@0.2.32-next.0 - - @backstage/plugin-rollbar-backend@0.1.35-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.6-next.0 - - @backstage/plugin-search-backend@1.1.1-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.0.4-next.0 - - @backstage/plugin-search-backend-module-pg@0.4.2-next.0 - - @backstage/plugin-search-backend-node@1.0.4-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.22-next.0 - - @backstage/plugin-todo-backend@0.1.35-next.0 - - @backstage/catalog-client@1.1.2-next.0 - - @backstage/config@1.0.4-next.0 - - @backstage/plugin-search-common@1.1.1-next.0 - -## 0.2.76 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.2 - - @backstage/backend-common@0.15.2 - - @backstage/plugin-catalog-backend@1.5.0 - - @backstage/plugin-scaffolder-backend@1.7.0 - - @backstage/plugin-auth-node@0.2.6 - - @backstage/backend-tasks@0.3.6 - - @backstage/plugin-permission-node@0.7.0 - - @backstage/plugin-auth-backend@0.17.0 - - @backstage/plugin-permission-common@0.7.0 - - @backstage/plugin-tech-insights-backend@0.5.3 - - @backstage/plugin-search-backend@1.1.0 - - @backstage/catalog-client@1.1.1 - - @backstage/plugin-playlist-backend@0.2.0 - - @backstage/plugin-jenkins-backend@0.1.27 - - @backstage/plugin-app-backend@0.3.37 - - @backstage/plugin-badges-backend@0.1.31 - - @backstage/plugin-graphql-backend@0.1.27 - - @backstage/plugin-permission-backend@0.5.12 - - @backstage/plugin-rollbar-backend@0.1.34 - - @backstage/plugin-kubernetes-backend@0.7.3 - - @backstage/plugin-search-common@1.1.0 - - @backstage/plugin-search-backend-node@1.0.3 - - @backstage/plugin-search-backend-module-pg@0.4.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.0.3 - - @backstage/plugin-techdocs-backend@1.4.0 - - @backstage/plugin-tech-insights-node@0.3.5 - - example-app@0.2.76 - - @backstage/plugin-code-coverage-backend@0.2.3 - - @backstage/plugin-kafka-backend@0.2.30 - - @backstage/plugin-todo-backend@0.1.34 - - @backstage/plugin-azure-devops-backend@0.3.16 - - @backstage/plugin-proxy-backend@0.2.31 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.5 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.21 - - @backstage/config@1.0.3 - - @backstage/integration@1.3.2 - -## 0.2.76-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.5.0-next.2 - - @backstage/backend-tasks@0.3.6-next.2 - - @backstage/backend-common@0.15.2-next.2 - - @backstage/plugin-permission-common@0.7.0-next.2 - - @backstage/plugin-permission-node@0.7.0-next.2 - - @backstage/plugin-scaffolder-backend@1.7.0-next.2 - - @backstage/plugin-playlist-backend@0.2.0-next.2 - - @backstage/plugin-badges-backend@0.1.31-next.2 - - @backstage/plugin-graphql-backend@0.1.27-next.2 - - @backstage/plugin-permission-backend@0.5.12-next.2 - - @backstage/plugin-rollbar-backend@0.1.34-next.2 - - @backstage/plugin-search-backend@1.1.0-next.2 - - @backstage/plugin-tech-insights-backend@0.5.3-next.2 - - @backstage/plugin-techdocs-backend@1.4.0-next.2 - - example-app@0.2.76-next.2 - - @backstage/plugin-search-backend-node@1.0.3-next.2 - - @backstage/plugin-tech-insights-node@0.3.5-next.2 - - @backstage/plugin-app-backend@0.3.37-next.2 - - @backstage/plugin-auth-backend@0.17.0-next.2 - - @backstage/plugin-auth-node@0.2.6-next.2 - - @backstage/plugin-azure-devops-backend@0.3.16-next.2 - - @backstage/plugin-code-coverage-backend@0.2.3-next.2 - - @backstage/plugin-jenkins-backend@0.1.27-next.2 - - @backstage/plugin-kafka-backend@0.2.30-next.2 - - @backstage/plugin-kubernetes-backend@0.7.3-next.2 - - @backstage/plugin-proxy-backend@0.2.31-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.5-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@1.0.3-next.2 - - @backstage/plugin-search-backend-module-pg@0.4.1-next.2 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.21-next.2 - - @backstage/plugin-todo-backend@0.1.34-next.2 - - @backstage/plugin-search-common@1.1.0-next.2 - - @backstage/catalog-client@1.1.1-next.2 - - @backstage/catalog-model@1.1.2-next.2 - - @backstage/config@1.0.3-next.2 - - @backstage/integration@1.3.2-next.2 - -## 0.2.76-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.17.0-next.1 - - @backstage/plugin-search-backend@1.1.0-next.1 - - @backstage/catalog-client@1.1.1-next.1 - - @backstage/backend-common@0.15.2-next.1 - - @backstage/plugin-scaffolder-backend@1.7.0-next.1 - - @backstage/plugin-search-common@1.1.0-next.1 - - @backstage/plugin-search-backend-node@1.0.3-next.1 - - @backstage/plugin-search-backend-module-pg@0.4.1-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.0.3-next.1 - - @backstage/plugin-kubernetes-backend@0.7.3-next.1 - - @backstage/plugin-tech-insights-backend@0.5.3-next.1 - - example-app@0.2.76-next.1 - - @backstage/backend-tasks@0.3.6-next.1 - - @backstage/catalog-model@1.1.2-next.1 - - @backstage/config@1.0.3-next.1 - - @backstage/integration@1.3.2-next.1 - - @backstage/plugin-app-backend@0.3.37-next.1 - - @backstage/plugin-auth-node@0.2.6-next.1 - - @backstage/plugin-azure-devops-backend@0.3.16-next.1 - - @backstage/plugin-badges-backend@0.1.31-next.1 - - @backstage/plugin-catalog-backend@1.4.1-next.1 - - @backstage/plugin-code-coverage-backend@0.2.3-next.1 - - @backstage/plugin-graphql-backend@0.1.27-next.1 - - @backstage/plugin-jenkins-backend@0.1.27-next.1 - - @backstage/plugin-kafka-backend@0.2.30-next.1 - - @backstage/plugin-permission-backend@0.5.12-next.1 - - @backstage/plugin-permission-common@0.6.5-next.1 - - @backstage/plugin-permission-node@0.6.6-next.1 - - @backstage/plugin-playlist-backend@0.1.1-next.1 - - @backstage/plugin-proxy-backend@0.2.31-next.1 - - @backstage/plugin-rollbar-backend@0.1.34-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.5-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.21-next.1 - - @backstage/plugin-tech-insights-node@0.3.5-next.1 - - @backstage/plugin-techdocs-backend@1.3.1-next.1 - - @backstage/plugin-todo-backend@0.1.34-next.1 - -## 0.2.76-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.2-next.0 - - @backstage/plugin-scaffolder-backend@1.7.0-next.0 - - @backstage/plugin-auth-backend@0.17.0-next.0 - - @backstage/plugin-catalog-backend@1.4.1-next.0 - - @backstage/plugin-jenkins-backend@0.1.27-next.0 - - @backstage/plugin-app-backend@0.3.37-next.0 - - @backstage/plugin-tech-insights-node@0.3.5-next.0 - - example-app@0.2.76-next.0 - - @backstage/catalog-client@1.1.1-next.0 - - @backstage/plugin-badges-backend@0.1.31-next.0 - - @backstage/plugin-code-coverage-backend@0.2.3-next.0 - - @backstage/plugin-kafka-backend@0.2.30-next.0 - - @backstage/plugin-kubernetes-backend@0.7.3-next.0 - - @backstage/plugin-playlist-backend@0.1.1-next.0 - - @backstage/plugin-tech-insights-backend@0.5.3-next.0 - - @backstage/plugin-techdocs-backend@1.3.1-next.0 - - @backstage/plugin-todo-backend@0.1.34-next.0 - - @backstage/backend-common@0.15.2-next.0 - - @backstage/backend-tasks@0.3.6-next.0 - - @backstage/plugin-auth-node@0.2.6-next.0 - - @backstage/plugin-permission-node@0.6.6-next.0 - - @backstage/plugin-rollbar-backend@0.1.34-next.0 - - @backstage/plugin-search-backend-module-pg@0.4.1-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.5-next.0 - - @backstage/config@1.0.3-next.0 - - @backstage/integration@1.3.2-next.0 - - @backstage/plugin-azure-devops-backend@0.3.16-next.0 - - @backstage/plugin-graphql-backend@0.1.27-next.0 - - @backstage/plugin-permission-backend@0.5.12-next.0 - - @backstage/plugin-permission-common@0.6.5-next.0 - - @backstage/plugin-proxy-backend@0.2.31-next.0 - - @backstage/plugin-search-backend@1.0.3-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.0.3-next.0 - - @backstage/plugin-search-backend-node@1.0.3-next.0 - - @backstage/plugin-search-common@1.0.2-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.21-next.0 - -## 0.2.75 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.15.1 - - @backstage/plugin-scaffolder-backend@1.6.0 - - @backstage/plugin-auth-node@0.2.5 - - @backstage/plugin-permission-node@0.6.5 - - @backstage/plugin-kubernetes-backend@0.7.2 - - @backstage/plugin-kafka-backend@0.2.29 - - @backstage/plugin-proxy-backend@0.2.30 - - @backstage/plugin-auth-backend@0.16.0 - - @backstage/integration@1.3.1 - - @backstage/plugin-catalog-backend@1.4.0 - - @backstage/plugin-azure-devops-backend@0.3.15 - - @backstage/plugin-search-backend-node@1.0.2 - - @backstage/plugin-tech-insights-node@0.3.4 - - @backstage/backend-tasks@0.3.5 - - @backstage/plugin-techdocs-backend@1.3.0 - - @backstage/catalog-client@1.1.0 - - @backstage/catalog-model@1.1.1 - - @backstage/config@1.0.2 - - @backstage/plugin-permission-common@0.6.4 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.4 - - @backstage/plugin-search-backend-module-pg@0.4.0 - - @backstage/plugin-jenkins-backend@0.1.26 - - @backstage/plugin-playlist-backend@0.1.0 - - @backstage/plugin-app-backend@0.3.36 - - @backstage/plugin-graphql-backend@0.1.26 - - @backstage/plugin-rollbar-backend@0.1.33 - - @backstage/plugin-code-coverage-backend@0.2.2 - - @backstage/plugin-permission-backend@0.5.11 - - @backstage/plugin-todo-backend@0.1.33 - - @backstage/plugin-search-backend-module-elasticsearch@1.0.2 - - @backstage/plugin-tech-insights-backend@0.5.2 - - @backstage/plugin-badges-backend@0.1.30 - - example-app@0.2.75 - - @backstage/plugin-search-backend@1.0.2 - - @backstage/plugin-search-common@1.0.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.20 - -## 0.2.75-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-client@1.1.0-next.2 - - @backstage/catalog-model@1.1.1-next.0 - - @backstage/config@1.0.2-next.0 - - @backstage/integration@1.3.1-next.2 - - @backstage/plugin-permission-common@0.6.4-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.4-next.1 - - @backstage/plugin-catalog-backend@1.4.0-next.3 - - @backstage/plugin-auth-backend@0.16.0-next.3 - - @backstage/backend-common@0.15.1-next.3 - - @backstage/plugin-scaffolder-backend@1.6.0-next.3 - - @backstage/plugin-badges-backend@0.1.30-next.1 - - @backstage/plugin-code-coverage-backend@0.2.2-next.2 - - @backstage/plugin-jenkins-backend@0.1.26-next.3 - - @backstage/plugin-kubernetes-backend@0.7.2-next.3 - - @backstage/plugin-tech-insights-backend@0.5.2-next.2 - - @backstage/plugin-techdocs-backend@1.3.0-next.2 - - @backstage/plugin-todo-backend@0.1.33-next.2 - - example-app@0.2.75-next.3 - - @backstage/plugin-kafka-backend@0.2.29-next.1 - - @backstage/backend-tasks@0.3.5-next.1 - - @backstage/plugin-app-backend@0.3.36-next.3 - - @backstage/plugin-auth-node@0.2.5-next.3 - - @backstage/plugin-azure-devops-backend@0.3.15-next.2 - - @backstage/plugin-graphql-backend@0.1.26-next.3 - - @backstage/plugin-permission-backend@0.5.11-next.2 - - @backstage/plugin-permission-node@0.6.5-next.3 - - @backstage/plugin-proxy-backend@0.2.30-next.2 - - @backstage/plugin-rollbar-backend@0.1.33-next.3 - - @backstage/plugin-search-backend@1.0.2-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.0.2-next.2 - - @backstage/plugin-search-backend-module-pg@0.4.0-next.2 - - @backstage/plugin-search-backend-node@1.0.2-next.2 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.20-next.1 - - @backstage/plugin-tech-insights-node@0.3.4-next.1 - -## 0.2.75-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.7.2-next.2 - - @backstage/backend-common@0.15.1-next.2 - - @backstage/integration@1.3.1-next.1 - - @backstage/plugin-catalog-backend@1.4.0-next.2 - - @backstage/plugin-scaffolder-backend@1.6.0-next.2 - - @backstage/plugin-auth-node@0.2.5-next.2 - - @backstage/plugin-techdocs-backend@1.3.0-next.1 - - @backstage/plugin-jenkins-backend@0.1.26-next.2 - - @backstage/catalog-client@1.0.5-next.1 - - @backstage/plugin-app-backend@0.3.36-next.2 - - @backstage/plugin-auth-backend@0.16.0-next.2 - - @backstage/plugin-azure-devops-backend@0.3.15-next.1 - - @backstage/plugin-code-coverage-backend@0.2.2-next.1 - - @backstage/plugin-graphql-backend@0.1.26-next.2 - - @backstage/plugin-permission-backend@0.5.11-next.1 - - @backstage/plugin-permission-common@0.6.4-next.1 - - @backstage/plugin-permission-node@0.6.5-next.2 - - @backstage/plugin-proxy-backend@0.2.30-next.1 - - @backstage/plugin-rollbar-backend@0.1.33-next.2 - - @backstage/plugin-todo-backend@0.1.33-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.0.2-next.1 - - example-app@0.2.75-next.2 - -## 0.2.75-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-node@0.2.5-next.1 - - @backstage/plugin-permission-node@0.6.5-next.1 - - @backstage/backend-common@0.15.1-next.1 - - @backstage/plugin-catalog-backend@1.4.0-next.1 - - @backstage/plugin-auth-backend@0.16.0-next.1 - - @backstage/plugin-scaffolder-backend@1.6.0-next.1 - - @backstage/plugin-search-backend-node@1.0.2-next.1 - - @backstage/plugin-app-backend@0.3.36-next.1 - - @backstage/plugin-graphql-backend@0.1.26-next.1 - - @backstage/plugin-jenkins-backend@0.1.26-next.1 - - @backstage/plugin-rollbar-backend@0.1.33-next.1 - - @backstage/plugin-search-backend-module-pg@0.4.0-next.1 - - @backstage/plugin-kubernetes-backend@0.7.2-next.1 - - @backstage/plugin-tech-insights-backend@0.5.2-next.1 - - example-app@0.2.75-next.1 - -## 0.2.75-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.15.1-next.0 - - @backstage/plugin-scaffolder-backend@1.6.0-next.0 - - @backstage/plugin-kafka-backend@0.2.29-next.0 - - @backstage/plugin-proxy-backend@0.2.30-next.0 - - @backstage/plugin-azure-devops-backend@0.3.15-next.0 - - @backstage/plugin-search-backend-node@1.0.2-next.0 - - @backstage/plugin-tech-insights-node@0.3.4-next.0 - - @backstage/backend-tasks@0.3.5-next.0 - - @backstage/plugin-catalog-backend@1.3.2-next.0 - - @backstage/plugin-search-backend-module-pg@0.4.0-next.0 - - @backstage/catalog-client@1.0.5-next.0 - - @backstage/integration@1.3.1-next.0 - - @backstage/plugin-app-backend@0.3.36-next.0 - - @backstage/plugin-auth-backend@0.15.2-next.0 - - @backstage/plugin-auth-node@0.2.5-next.0 - - @backstage/plugin-code-coverage-backend@0.2.2-next.0 - - @backstage/plugin-graphql-backend@0.1.26-next.0 - - @backstage/plugin-jenkins-backend@0.1.26-next.0 - - @backstage/plugin-permission-backend@0.5.11-next.0 - - @backstage/plugin-permission-common@0.6.4-next.0 - - @backstage/plugin-permission-node@0.6.5-next.0 - - @backstage/plugin-rollbar-backend@0.1.33-next.0 - - @backstage/plugin-techdocs-backend@1.2.2-next.0 - - @backstage/plugin-todo-backend@0.1.33-next.0 - - @backstage/plugin-tech-insights-backend@0.5.2-next.0 - - @backstage/plugin-badges-backend@0.1.30-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.0.2-next.0 - - @backstage/plugin-kubernetes-backend@0.7.2-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.4-next.0 - - @backstage/plugin-search-backend@1.0.2-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.20-next.0 - - example-app@0.2.75-next.0 - - @backstage/plugin-search-common@1.0.1-next.0 - -## 0.2.74 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.15.0 - - @backstage/plugin-kubernetes-backend@0.7.1 - - @backstage/integration@1.3.0 - - @backstage/plugin-scaffolder-backend@1.5.0 - - @backstage/plugin-auth-backend@0.15.1 - - @backstage/plugin-graphql-backend@0.1.25 - - @backstage/backend-tasks@0.3.4 - - @backstage/plugin-tech-insights-node@0.3.3 - - @backstage/plugin-catalog-backend@1.3.1 - - example-app@0.2.74 - - @backstage/plugin-app-backend@0.3.35 - - @backstage/plugin-auth-node@0.2.4 - - @backstage/plugin-azure-devops-backend@0.3.14 - - @backstage/plugin-badges-backend@0.1.29 - - @backstage/plugin-code-coverage-backend@0.2.1 - - @backstage/plugin-jenkins-backend@0.1.25 - - @backstage/plugin-kafka-backend@0.2.28 - - @backstage/plugin-permission-backend@0.5.10 - - @backstage/plugin-permission-node@0.6.4 - - @backstage/plugin-proxy-backend@0.2.29 - - @backstage/plugin-rollbar-backend@0.1.32 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.3 - - @backstage/plugin-search-backend@1.0.1 - - @backstage/plugin-search-backend-module-elasticsearch@1.0.1 - - @backstage/plugin-search-backend-module-pg@0.3.6 - - @backstage/plugin-search-backend-node@1.0.1 - - @backstage/plugin-tech-insights-backend@0.5.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.19 - - @backstage/plugin-techdocs-backend@1.2.1 - - @backstage/plugin-todo-backend@0.1.32 - -## 0.2.74-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.15.0-next.0 - - @backstage/integration@1.3.0-next.0 - - @backstage/plugin-scaffolder-backend@1.5.0-next.0 - - @backstage/backend-tasks@0.3.4-next.0 - - @backstage/plugin-kubernetes-backend@0.7.1-next.0 - - @backstage/plugin-tech-insights-node@0.3.3-next.0 - - @backstage/plugin-app-backend@0.3.35-next.0 - - @backstage/plugin-auth-backend@0.15.1-next.0 - - @backstage/plugin-auth-node@0.2.4-next.0 - - @backstage/plugin-azure-devops-backend@0.3.14-next.0 - - @backstage/plugin-badges-backend@0.1.29-next.0 - - @backstage/plugin-catalog-backend@1.3.1-next.0 - - @backstage/plugin-code-coverage-backend@0.2.1-next.0 - - @backstage/plugin-graphql-backend@0.1.25-next.0 - - @backstage/plugin-jenkins-backend@0.1.25-next.0 - - @backstage/plugin-kafka-backend@0.2.28-next.0 - - @backstage/plugin-permission-backend@0.5.10-next.0 - - @backstage/plugin-permission-node@0.6.4-next.0 - - @backstage/plugin-proxy-backend@0.2.29-next.0 - - @backstage/plugin-rollbar-backend@0.1.32-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.3-next.0 - - @backstage/plugin-search-backend@1.0.1-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.0.1-next.0 - - @backstage/plugin-search-backend-module-pg@0.3.6-next.0 - - @backstage/plugin-search-backend-node@1.0.1-next.0 - - @backstage/plugin-tech-insights-backend@0.5.1-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.19-next.0 - - @backstage/plugin-techdocs-backend@1.2.1-next.0 - - @backstage/plugin-todo-backend@0.1.32-next.0 - - example-app@0.2.74-next.0 - -## 0.2.73 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-code-coverage-backend@0.2.0 - - @backstage/plugin-catalog-backend@1.3.0 - - @backstage/plugin-tech-insights-backend@0.5.0 - - @backstage/backend-common@0.14.1 - - @backstage/catalog-model@1.1.0 - - @backstage/plugin-kubernetes-backend@0.7.0 - - @backstage/plugin-search-backend@1.0.0 - - @backstage/plugin-search-backend-node@1.0.0 - - @backstage/plugin-search-common@1.0.0 - - @backstage/plugin-search-backend-module-elasticsearch@1.0.0 - - @backstage/plugin-scaffolder-backend@1.4.0 - - @backstage/plugin-auth-backend@0.15.0 - - @backstage/plugin-jenkins-backend@0.1.24 - - @backstage/plugin-proxy-backend@0.2.28 - - @backstage/plugin-search-backend-module-pg@0.3.5 - - @backstage/integration@1.2.2 - - @backstage/catalog-client@1.0.4 - - @backstage/plugin-app-backend@0.3.34 - - @backstage/plugin-auth-node@0.2.3 - - @backstage/plugin-azure-devops-backend@0.3.13 - - @backstage/plugin-graphql-backend@0.1.24 - - @backstage/plugin-permission-backend@0.5.9 - - @backstage/plugin-permission-common@0.6.3 - - @backstage/plugin-permission-node@0.6.3 - - @backstage/plugin-rollbar-backend@0.1.31 - - @backstage/plugin-techdocs-backend@1.2.0 - - @backstage/plugin-todo-backend@0.1.31 - - @backstage/backend-tasks@0.3.3 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.18 - - @backstage/plugin-tech-insights-node@0.3.2 - - @backstage/plugin-kafka-backend@0.2.27 - - @backstage/plugin-badges-backend@0.1.28 - - example-app@0.2.73 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.2 - -## 0.2.73-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-code-coverage-backend@0.2.0-next.3 - - @backstage/plugin-catalog-backend@1.3.0-next.3 - - @backstage/plugin-kubernetes-backend@0.7.0-next.3 - - @backstage/plugin-proxy-backend@0.2.28-next.1 - - @backstage/backend-common@0.14.1-next.3 - - @backstage/plugin-scaffolder-backend@1.4.0-next.3 - - @backstage/catalog-client@1.0.4-next.2 - - @backstage/integration@1.2.2-next.3 - - @backstage/plugin-app-backend@0.3.34-next.3 - - @backstage/plugin-auth-backend@0.15.0-next.3 - - @backstage/plugin-auth-node@0.2.3-next.2 - - @backstage/plugin-azure-devops-backend@0.3.13-next.1 - - @backstage/plugin-graphql-backend@0.1.24-next.1 - - @backstage/plugin-jenkins-backend@0.1.24-next.3 - - @backstage/plugin-permission-backend@0.5.9-next.2 - - @backstage/plugin-permission-common@0.6.3-next.1 - - @backstage/plugin-permission-node@0.6.3-next.2 - - @backstage/plugin-rollbar-backend@0.1.31-next.1 - - @backstage/plugin-techdocs-backend@1.2.0-next.3 - - @backstage/plugin-todo-backend@0.1.31-next.2 - - @backstage/backend-tasks@0.3.3-next.3 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.18-next.2 - - @backstage/plugin-tech-insights-backend@0.5.0-next.3 - - @backstage/plugin-tech-insights-node@0.3.2-next.1 - - @backstage/catalog-model@1.1.0-next.3 - - @backstage/plugin-search-backend-module-elasticsearch@0.2.0-next.2 - - @backstage/plugin-search-backend-node@0.6.3-next.2 - - @backstage/plugin-search-backend@0.5.4-next.2 - - example-app@0.2.73-next.3 - -## 0.2.73-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.7.0-next.2 - - @backstage/plugin-tech-insights-backend@0.5.0-next.2 - - @backstage/plugin-jenkins-backend@0.1.24-next.2 - - @backstage/plugin-search-backend-module-pg@0.3.5-next.2 - - @backstage/plugin-scaffolder-backend@1.4.0-next.2 - - @backstage/plugin-auth-backend@0.15.0-next.2 - - @backstage/catalog-model@1.1.0-next.2 - - @backstage/plugin-kafka-backend@0.2.27-next.2 - - @backstage/backend-common@0.14.1-next.2 - - @backstage/backend-tasks@0.3.3-next.2 - - @backstage/plugin-app-backend@0.3.34-next.2 - - @backstage/plugin-catalog-backend@1.2.1-next.2 - - @backstage/plugin-code-coverage-backend@0.1.32-next.2 - - @backstage/plugin-techdocs-backend@1.2.0-next.2 - - @backstage/plugin-badges-backend@0.1.28-next.2 - - @backstage/integration@1.2.2-next.2 - - example-app@0.2.73-next.2 - -## 0.2.73-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.4.0-next.1 - - @backstage/plugin-auth-backend@0.15.0-next.1 - - @backstage/catalog-model@1.1.0-next.1 - - @backstage/backend-common@0.14.1-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@0.2.0-next.1 - - @backstage/plugin-catalog-backend@1.2.1-next.1 - - @backstage/plugin-techdocs-backend@1.2.0-next.1 - - example-app@0.2.73-next.1 - - @backstage/backend-tasks@0.3.3-next.1 - - @backstage/catalog-client@1.0.4-next.1 - - @backstage/integration@1.2.2-next.1 - - @backstage/plugin-app-backend@0.3.34-next.1 - - @backstage/plugin-auth-node@0.2.3-next.1 - - @backstage/plugin-badges-backend@0.1.28-next.1 - - @backstage/plugin-code-coverage-backend@0.1.32-next.1 - - @backstage/plugin-jenkins-backend@0.1.24-next.1 - - @backstage/plugin-kafka-backend@0.2.27-next.1 - - @backstage/plugin-kubernetes-backend@0.7.0-next.1 - - @backstage/plugin-permission-backend@0.5.9-next.1 - - @backstage/plugin-permission-common@0.6.3-next.0 - - @backstage/plugin-permission-node@0.6.3-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.2-next.1 - - @backstage/plugin-search-backend@0.5.4-next.1 - - @backstage/plugin-search-backend-module-pg@0.3.5-next.1 - - @backstage/plugin-search-backend-node@0.6.3-next.1 - - @backstage/plugin-tech-insights-backend@0.4.2-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.18-next.1 - - @backstage/plugin-todo-backend@0.1.31-next.1 - -## 0.2.73-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-tech-insights-backend@0.4.2-next.0 - - @backstage/backend-common@0.14.1-next.0 - - @backstage/catalog-model@1.1.0-next.0 - - @backstage/plugin-scaffolder-backend@1.4.0-next.0 - - @backstage/plugin-auth-backend@0.14.2-next.0 - - @backstage/plugin-kubernetes-backend@0.7.0-next.0 - - @backstage/integration@1.2.2-next.0 - - @backstage/plugin-azure-devops-backend@0.3.13-next.0 - - example-app@0.2.73-next.0 - - @backstage/backend-tasks@0.3.3-next.0 - - @backstage/plugin-app-backend@0.3.34-next.0 - - @backstage/plugin-auth-node@0.2.3-next.0 - - @backstage/plugin-badges-backend@0.1.28-next.0 - - @backstage/plugin-catalog-backend@1.2.1-next.0 - - @backstage/plugin-code-coverage-backend@0.1.32-next.0 - - @backstage/plugin-graphql-backend@0.1.24-next.0 - - @backstage/plugin-jenkins-backend@0.1.24-next.0 - - @backstage/plugin-kafka-backend@0.2.27-next.0 - - @backstage/plugin-permission-backend@0.5.9-next.0 - - @backstage/plugin-permission-node@0.6.3-next.0 - - @backstage/plugin-proxy-backend@0.2.28-next.0 - - @backstage/plugin-rollbar-backend@0.1.31-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.2-next.0 - - @backstage/plugin-search-backend@0.5.4-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@0.1.6-next.0 - - @backstage/plugin-search-backend-module-pg@0.3.5-next.0 - - @backstage/plugin-search-backend-node@0.6.3-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.18-next.0 - - @backstage/plugin-tech-insights-node@0.3.2-next.0 - - @backstage/plugin-techdocs-backend@1.1.3-next.0 - - @backstage/plugin-todo-backend@0.1.31-next.0 - - @backstage/catalog-client@1.0.4-next.0 - -## 0.2.72 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-tech-insights-backend@0.4.1 - - @backstage/plugin-catalog-backend@1.2.0 - - @backstage/plugin-auth-backend@0.14.1 - - @backstage/plugin-scaffolder-backend@1.3.0 - - @backstage/backend-tasks@0.3.2 - - @backstage/plugin-permission-node@0.6.2 - - @backstage/plugin-kubernetes-backend@0.6.0 - - @backstage/backend-common@0.14.0 - - @backstage/plugin-search-backend@0.5.3 - - @backstage/plugin-auth-node@0.2.2 - - @backstage/integration@1.2.1 - - @backstage/plugin-jenkins-backend@0.1.23 - - @backstage/plugin-search-backend-node@0.6.2 - - @backstage/catalog-client@1.0.3 - - @backstage/plugin-app-backend@0.3.33 - - @backstage/plugin-azure-devops-backend@0.3.12 - - @backstage/plugin-code-coverage-backend@0.1.31 - - @backstage/plugin-graphql-backend@0.1.23 - - @backstage/plugin-permission-backend@0.5.8 - - @backstage/plugin-permission-common@0.6.2 - - @backstage/plugin-rollbar-backend@0.1.30 - - @backstage/plugin-techdocs-backend@1.1.2 - - @backstage/plugin-todo-backend@0.1.30 - - @backstage/plugin-search-backend-module-elasticsearch@0.1.5 - - @backstage/plugin-search-backend-module-pg@0.3.4 - - @backstage/catalog-model@1.0.3 - - @backstage/plugin-tech-insights-node@0.3.1 - - example-app@0.2.72 - - @backstage/plugin-badges-backend@0.1.27 - - @backstage/plugin-kafka-backend@0.2.26 - - @backstage/plugin-proxy-backend@0.2.27 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.17 - -## 0.2.72-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.3.0-next.2 - - @backstage/backend-common@0.14.0-next.2 - - @backstage/plugin-search-backend@0.5.3-next.2 - - @backstage/plugin-auth-backend@0.14.1-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@0.1.5-next.2 - - @backstage/integration@1.2.1-next.2 - - @backstage/plugin-techdocs-backend@1.1.2-next.2 - - @backstage/plugin-search-backend-node@0.6.2-next.2 - - example-app@0.2.72-next.2 - - @backstage/backend-tasks@0.3.2-next.2 - - @backstage/plugin-app-backend@0.3.33-next.2 - - @backstage/plugin-auth-node@0.2.2-next.2 - - @backstage/plugin-azure-devops-backend@0.3.12-next.2 - - @backstage/plugin-badges-backend@0.1.27-next.2 - - @backstage/plugin-catalog-backend@1.2.0-next.2 - - @backstage/plugin-code-coverage-backend@0.1.31-next.2 - - @backstage/plugin-graphql-backend@0.1.23-next.2 - - @backstage/plugin-jenkins-backend@0.1.23-next.2 - - @backstage/plugin-kafka-backend@0.2.26-next.2 - - @backstage/plugin-kubernetes-backend@0.6.0-next.2 - - @backstage/plugin-permission-backend@0.5.8-next.2 - - @backstage/plugin-permission-node@0.6.2-next.2 - - @backstage/plugin-proxy-backend@0.2.27-next.1 - - @backstage/plugin-rollbar-backend@0.1.30-next.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.1-next.1 - - @backstage/plugin-search-backend-module-pg@0.3.4-next.2 - - @backstage/plugin-tech-insights-backend@0.4.1-next.2 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.17-next.1 - - @backstage/plugin-tech-insights-node@0.3.1-next.1 - - @backstage/plugin-todo-backend@0.1.30-next.2 - -## 0.2.72-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-tech-insights-backend@0.4.1-next.1 - - @backstage/plugin-auth-backend@0.14.1-next.1 - - @backstage/plugin-jenkins-backend@0.1.23-next.1 - - @backstage/backend-tasks@0.3.2-next.1 - - @backstage/backend-common@0.13.6-next.1 - - @backstage/catalog-client@1.0.3-next.0 - - @backstage/integration@1.2.1-next.1 - - @backstage/plugin-app-backend@0.3.33-next.1 - - @backstage/plugin-auth-node@0.2.2-next.1 - - @backstage/plugin-azure-devops-backend@0.3.12-next.1 - - @backstage/plugin-catalog-backend@1.2.0-next.1 - - @backstage/plugin-code-coverage-backend@0.1.31-next.1 - - @backstage/plugin-graphql-backend@0.1.23-next.1 - - @backstage/plugin-permission-backend@0.5.8-next.1 - - @backstage/plugin-permission-common@0.6.2-next.0 - - @backstage/plugin-permission-node@0.6.2-next.1 - - @backstage/plugin-rollbar-backend@0.1.30-next.1 - - @backstage/plugin-scaffolder-backend@1.3.0-next.1 - - @backstage/plugin-techdocs-backend@1.1.2-next.1 - - @backstage/plugin-todo-backend@0.1.30-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@0.1.5-next.1 - - @backstage/plugin-search-backend-node@0.6.2-next.1 - - @backstage/catalog-model@1.0.3-next.0 - - @backstage/plugin-badges-backend@0.1.27-next.1 - - example-app@0.2.72-next.1 - - @backstage/plugin-search-backend@0.5.3-next.1 - - @backstage/plugin-kafka-backend@0.2.26-next.1 - - @backstage/plugin-kubernetes-backend@0.6.0-next.1 - - @backstage/plugin-search-backend-module-pg@0.3.4-next.1 - -## 0.2.72-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-tasks@0.3.2-next.0 - - @backstage/plugin-scaffolder-backend@1.3.0-next.0 - - @backstage/plugin-kubernetes-backend@0.6.0-next.0 - - @backstage/backend-common@0.13.6-next.0 - - @backstage/plugin-auth-backend@0.14.1-next.0 - - @backstage/integration@1.2.1-next.0 - - @backstage/plugin-search-backend-node@0.6.2-next.0 - - @backstage/plugin-catalog-backend@1.2.0-next.0 - - @backstage/plugin-auth-node@0.2.2-next.0 - - @backstage/plugin-techdocs-backend@1.1.2-next.0 - - example-app@0.2.72-next.0 - - @backstage/plugin-app-backend@0.3.33-next.0 - - @backstage/plugin-azure-devops-backend@0.3.12-next.0 - - @backstage/plugin-badges-backend@0.1.27-next.0 - - @backstage/plugin-code-coverage-backend@0.1.31-next.0 - - @backstage/plugin-graphql-backend@0.1.23-next.0 - - @backstage/plugin-jenkins-backend@0.1.23-next.0 - - @backstage/plugin-kafka-backend@0.2.26-next.0 - - @backstage/plugin-permission-backend@0.5.8-next.0 - - @backstage/plugin-permission-node@0.6.2-next.0 - - @backstage/plugin-proxy-backend@0.2.27-next.0 - - @backstage/plugin-rollbar-backend@0.1.30-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.1-next.0 - - @backstage/plugin-search-backend@0.5.3-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@0.1.5-next.0 - - @backstage/plugin-search-backend-module-pg@0.3.4-next.0 - - @backstage/plugin-tech-insights-backend@0.4.1-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.17-next.0 - - @backstage/plugin-tech-insights-node@0.3.1-next.0 - - @backstage/plugin-todo-backend@0.1.30-next.0 - -## 0.2.71 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.13.3 - - @backstage/plugin-auth-backend@0.14.0 - - @backstage/plugin-kubernetes-backend@0.5.1 - - @backstage/plugin-catalog-backend@1.1.2 - - @backstage/plugin-tech-insights-backend@0.4.0 - - @backstage/plugin-scaffolder-backend@1.2.0 - - @backstage/backend-tasks@0.3.1 - - @backstage/integration@1.2.0 - - @backstage/plugin-tech-insights-node@0.3.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.16 - - @backstage/plugin-rollbar-backend@0.1.29 - - @backstage/plugin-search-backend-module-elasticsearch@0.1.4 - - @backstage/config@1.0.1 - - @backstage/plugin-app-backend@0.3.32 - - @backstage/plugin-techdocs-backend@1.1.1 - - @backstage/plugin-search-backend-node@0.6.1 - - @backstage/plugin-search-backend-module-pg@0.3.3 - - @backstage/plugin-jenkins-backend@0.1.22 - - @backstage/plugin-search-backend@0.5.2 - - @backstage/plugin-auth-node@0.2.1 - - @backstage/plugin-azure-devops-backend@0.3.11 - - example-app@0.2.71 - - @backstage/catalog-client@1.0.2 - - @backstage/catalog-model@1.0.2 - - @backstage/plugin-badges-backend@0.1.26 - - @backstage/plugin-code-coverage-backend@0.1.30 - - @backstage/plugin-graphql-backend@0.1.22 - - @backstage/plugin-kafka-backend@0.2.25 - - @backstage/plugin-permission-backend@0.5.7 - - @backstage/plugin-permission-common@0.6.1 - - @backstage/plugin-permission-node@0.6.1 - - @backstage/plugin-proxy-backend@0.2.26 - - @backstage/plugin-todo-backend@0.1.29 - -## 0.2.71-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.13.3-next.2 - - @backstage/plugin-kubernetes-backend@0.5.1-next.1 - - @backstage/plugin-catalog-backend@1.1.2-next.2 - - @backstage/backend-tasks@0.3.1-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.4.0-next.1 - - @backstage/plugin-scaffolder-backend@1.2.0-next.1 - - @backstage/config@1.0.1-next.0 - - @backstage/plugin-search-backend-node@0.6.1-next.1 - - @backstage/plugin-search-backend-module-elasticsearch@0.1.4-next.1 - - @backstage/plugin-search-backend-module-pg@0.3.3-next.1 - - @backstage/plugin-azure-devops-backend@0.3.11-next.1 - - example-app@0.2.71-next.2 - - @backstage/catalog-model@1.0.2-next.0 - - @backstage/integration@1.2.0-next.1 - - @backstage/plugin-app-backend@0.3.32-next.1 - - @backstage/plugin-auth-backend@0.13.1-next.2 - - @backstage/plugin-auth-node@0.2.1-next.1 - - @backstage/plugin-badges-backend@0.1.26-next.1 - - @backstage/plugin-code-coverage-backend@0.1.30-next.1 - - @backstage/plugin-graphql-backend@0.1.22-next.1 - - @backstage/plugin-jenkins-backend@0.1.22-next.1 - - @backstage/plugin-kafka-backend@0.2.25-next.1 - - @backstage/plugin-permission-backend@0.5.7-next.1 - - @backstage/plugin-permission-common@0.6.1-next.0 - - @backstage/plugin-permission-node@0.6.1-next.1 - - @backstage/plugin-proxy-backend@0.2.26-next.1 - - @backstage/plugin-rollbar-backend@0.1.29-next.2 - - @backstage/plugin-search-backend@0.5.2-next.1 - - @backstage/plugin-tech-insights-backend@0.4.0-next.2 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.16-next.2 - - @backstage/plugin-tech-insights-node@0.3.0-next.2 - - @backstage/plugin-techdocs-backend@1.1.1-next.1 - - @backstage/plugin-todo-backend@0.1.29-next.1 - - @backstage/catalog-client@1.0.2-next.0 - -## 0.2.71-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.13.1-next.1 - - @backstage/plugin-tech-insights-backend@0.4.0-next.1 - - @backstage/backend-common@0.13.3-next.1 - - @backstage/plugin-tech-insights-node@0.3.0-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.16-next.1 - - @backstage/plugin-catalog-backend@1.1.2-next.1 - - @backstage/plugin-rollbar-backend@0.1.29-next.1 - - example-app@0.2.71-next.1 - -## 0.2.71-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.13.3-next.0 - - @backstage/plugin-scaffolder-backend@1.2.0-next.0 - - @backstage/plugin-kubernetes-backend@0.5.1-next.0 - - @backstage/integration@1.2.0-next.0 - - @backstage/plugin-catalog-backend@1.1.2-next.0 - - @backstage/plugin-app-backend@0.3.32-next.0 - - @backstage/plugin-auth-backend@0.13.1-next.0 - - @backstage/plugin-rollbar-backend@0.1.29-next.0 - - @backstage/plugin-techdocs-backend@1.1.1-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@0.1.4-next.0 - - @backstage/plugin-jenkins-backend@0.1.22-next.0 - - @backstage/plugin-search-backend@0.5.2-next.0 - - @backstage/backend-tasks@0.3.1-next.0 - - @backstage/plugin-auth-node@0.2.1-next.0 - - example-app@0.2.71-next.0 - - @backstage/plugin-azure-devops-backend@0.3.11-next.0 - - @backstage/plugin-badges-backend@0.1.26-next.0 - - @backstage/plugin-code-coverage-backend@0.1.30-next.0 - - @backstage/plugin-graphql-backend@0.1.22-next.0 - - @backstage/plugin-kafka-backend@0.2.25-next.0 - - @backstage/plugin-permission-backend@0.5.7-next.0 - - @backstage/plugin-permission-node@0.6.1-next.0 - - @backstage/plugin-proxy-backend@0.2.26-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.3.7-next.0 - - @backstage/plugin-search-backend-module-pg@0.3.3-next.0 - - @backstage/plugin-search-backend-node@0.6.1-next.0 - - @backstage/plugin-tech-insights-backend@0.3.1-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.16-next.0 - - @backstage/plugin-tech-insights-node@0.2.10-next.0 - - @backstage/plugin-todo-backend@0.1.29-next.0 - -## 0.2.70 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.1.0 - - @backstage/plugin-techdocs-backend@1.1.0 - - @backstage/plugin-scaffolder-backend@1.1.0 - - @backstage/integration@1.1.0 - - @backstage/plugin-search-backend@0.5.0 - - @backstage/plugin-auth-backend@0.13.0 - - @backstage/backend-tasks@0.3.0 - - @backstage/plugin-permission-common@0.6.0 - - @backstage/plugin-permission-node@0.6.0 - - @backstage/catalog-model@1.0.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.15 - - @backstage/plugin-kafka-backend@0.2.24 - - @backstage/plugin-auth-node@0.2.0 - - @backstage/plugin-jenkins-backend@0.1.20 - - @backstage/plugin-badges-backend@0.1.25 - - @backstage/plugin-tech-insights-node@0.2.9 - - @backstage/plugin-todo-backend@0.1.28 - - @backstage/backend-common@0.13.2 - - @backstage/plugin-kubernetes-backend@0.5.0 - - @backstage/plugin-search-backend-node@0.6.0 - - @backstage/plugin-search-backend-module-elasticsearch@0.1.3 - - @backstage/plugin-search-backend-module-pg@0.3.2 - - @backstage/plugin-permission-backend@0.5.6 - - @backstage/plugin-tech-insights-backend@0.3.0 - - @backstage/plugin-azure-devops-backend@0.3.10 - - @backstage/plugin-scaffolder-backend-module-rails@0.3.6 - - example-app@0.2.70 - - @backstage/catalog-client@1.0.1 - - @backstage/plugin-app-backend@0.3.31 - - @backstage/plugin-code-coverage-backend@0.1.29 - - @backstage/plugin-graphql-backend@0.1.21 - - @backstage/plugin-proxy-backend@0.2.25 - - @backstage/plugin-rollbar-backend@0.1.28 - -## 0.2.70-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.13.0-next.2 - - @backstage/plugin-catalog-backend@1.1.0-next.3 - - @backstage/plugin-kafka-backend@0.2.24-next.1 - - @backstage/plugin-search-backend@0.5.0-next.2 - - @backstage/plugin-permission-common@0.6.0-next.1 - - @backstage/plugin-permission-node@0.6.0-next.2 - - @backstage/plugin-jenkins-backend@0.1.20-next.2 - - @backstage/plugin-todo-backend@0.1.28-next.2 - - @backstage/backend-common@0.13.2-next.2 - - @backstage/plugin-kubernetes-backend@0.5.0-next.1 - - @backstage/plugin-search-backend-node@0.6.0-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.3.6-next.2 - - @backstage/integration@1.1.0-next.2 - - @backstage/plugin-techdocs-backend@1.1.0-next.2 - - example-app@0.2.70-next.2 - - @backstage/plugin-search-backend-module-elasticsearch@0.1.3-next.1 - - @backstage/plugin-search-backend-module-pg@0.3.2-next.1 - - @backstage/plugin-app-backend@0.3.31-next.1 - -## 0.2.70-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.1.0-next.1 - - @backstage/plugin-techdocs-backend@1.0.1-next.1 - - @backstage/plugin-scaffolder-backend@1.1.0-next.1 - - @backstage/integration@1.1.0-next.1 - - @backstage/plugin-search-backend@0.5.0-next.1 - - @backstage/backend-tasks@0.3.0-next.1 - - @backstage/plugin-permission-common@0.6.0-next.0 - - @backstage/plugin-permission-node@0.6.0-next.1 - - @backstage/plugin-badges-backend@0.1.25-next.1 - - @backstage/plugin-tech-insights-node@0.2.9-next.1 - - @backstage/plugin-permission-backend@0.5.6-next.1 - - @backstage/backend-common@0.13.2-next.1 - - @backstage/plugin-auth-backend@0.13.0-next.1 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.15-next.1 - - @backstage/plugin-tech-insights-backend@0.3.0-next.1 - - @backstage/plugin-jenkins-backend@0.1.20-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.3.6-next.1 - - @backstage/plugin-code-coverage-backend@0.1.29-next.1 - - @backstage/plugin-todo-backend@0.1.28-next.1 - - example-app@0.2.70-next.1 - -## 0.2.70-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.0.1-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.15-next.0 - - @backstage/plugin-search-backend@0.5.0-next.0 - - @backstage/plugin-auth-node@0.2.0-next.0 - - @backstage/plugin-auth-backend@0.13.0-next.0 - - @backstage/plugin-catalog-backend@1.0.1-next.0 - - @backstage/plugin-search-backend-node@0.5.3-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@0.1.3-next.0 - - @backstage/plugin-search-backend-module-pg@0.3.2-next.0 - - @backstage/backend-common@0.13.2-next.0 - - @backstage/integration@1.0.1-next.0 - - @backstage/plugin-tech-insights-backend@0.2.11-next.0 - - @backstage/plugin-techdocs-backend@1.0.1-next.0 - - @backstage/plugin-jenkins-backend@0.1.20-next.0 - - example-app@0.2.70-next.0 - - @backstage/catalog-client@1.0.1-next.0 - - @backstage/plugin-badges-backend@0.1.25-next.0 - - @backstage/plugin-code-coverage-backend@0.1.29-next.0 - - @backstage/plugin-kafka-backend@0.2.24-next.0 - - @backstage/plugin-kubernetes-backend@0.4.14-next.0 - - @backstage/plugin-scaffolder-backend@1.0.1-next.0 - - @backstage/plugin-todo-backend@0.1.28-next.0 - - @backstage/plugin-app-backend@0.3.31-next.0 - - @backstage/plugin-permission-backend@0.5.6-next.0 - - @backstage/plugin-permission-node@0.5.6-next.0 - - @backstage/backend-tasks@0.2.2-next.0 - - @backstage/plugin-azure-devops-backend@0.3.10-next.0 - - @backstage/plugin-graphql-backend@0.1.21-next.0 - - @backstage/plugin-proxy-backend@0.2.25-next.0 - - @backstage/plugin-rollbar-backend@0.1.28-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.3.6-next.0 - - @backstage/plugin-tech-insights-node@0.2.9-next.0 - -## 0.2.69 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-app-backend@0.3.30 - - @backstage/plugin-azure-devops-backend@0.3.9 - - @backstage/plugin-badges-backend@0.1.24 - - @backstage/plugin-catalog-backend@1.0.0 - - @backstage/plugin-jenkins-backend@0.1.19 - - @backstage/plugin-scaffolder-backend-module-rails@0.3.5 - - @backstage/plugin-tech-insights-backend@0.2.10 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.14 - - @backstage/plugin-todo-backend@0.1.27 - - @backstage/plugin-kubernetes-backend@0.4.13 - - @backstage/plugin-scaffolder-backend@1.0.0 - - @backstage/backend-common@0.13.1 - - @backstage/backend-tasks@0.2.1 - - @backstage/plugin-auth-backend@0.12.2 - - @backstage/plugin-code-coverage-backend@0.1.28 - - @backstage/catalog-model@1.0.0 - - @backstage/integration@1.0.0 - - @backstage/catalog-client@1.0.0 - - @backstage/config@1.0.0 - - @backstage/plugin-techdocs-backend@1.0.0 - - @backstage/plugin-permission-common@0.5.3 - - @backstage/plugin-search-backend-node@0.5.2 - - example-app@0.2.69 - - @backstage/plugin-auth-node@0.1.6 - - @backstage/plugin-graphql-backend@0.1.20 - - @backstage/plugin-kafka-backend@0.2.23 - - @backstage/plugin-permission-backend@0.5.5 - - @backstage/plugin-permission-node@0.5.5 - - @backstage/plugin-proxy-backend@0.2.24 - - @backstage/plugin-rollbar-backend@0.1.27 - - @backstage/plugin-search-backend@0.4.8 - - @backstage/plugin-search-backend-module-elasticsearch@0.1.2 - - @backstage/plugin-tech-insights-node@0.2.8 - -## 0.2.68 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.13.0 - - @backstage/backend-tasks@0.2.0 - - @backstage/plugin-app-backend@0.3.29 - - @backstage/plugin-auth-backend@0.12.1 - - @backstage/plugin-catalog-backend@0.24.0 - - @backstage/plugin-scaffolder-backend@0.18.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.3.4 - - @backstage/plugin-kubernetes-backend@0.4.12 - - @backstage/plugin-rollbar-backend@0.1.26 - - @backstage/plugin-techdocs-backend@0.14.2 - - @backstage/catalog-model@0.13.0 - - @backstage/plugin-badges-backend@0.1.23 - - @backstage/plugin-search-backend-module-elasticsearch@0.1.1 - - @backstage/plugin-search-backend-module-pg@0.3.1 - - @backstage/plugin-search-backend-node@0.5.1 - - @backstage/plugin-search-backend@0.4.7 - - @backstage/catalog-client@0.9.0 - - example-app@0.2.68 - - @backstage/plugin-auth-node@0.1.5 - - @backstage/plugin-azure-devops-backend@0.3.8 - - @backstage/plugin-code-coverage-backend@0.1.27 - - @backstage/plugin-graphql-backend@0.1.19 - - @backstage/plugin-jenkins-backend@0.1.18 - - @backstage/plugin-kafka-backend@0.2.22 - - @backstage/plugin-permission-backend@0.5.4 - - @backstage/plugin-permission-node@0.5.4 - - @backstage/plugin-proxy-backend@0.2.23 - - @backstage/plugin-tech-insights-backend@0.2.9 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.13 - - @backstage/plugin-tech-insights-node@0.2.7 - - @backstage/plugin-todo-backend@0.1.26 - -## 0.2.68-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.13.0-next.0 - - @backstage/backend-tasks@0.2.0-next.0 - - @backstage/plugin-app-backend@0.3.29-next.0 - - @backstage/plugin-auth-backend@0.12.1-next.0 - - @backstage/plugin-catalog-backend@0.24.0-next.0 - - @backstage/plugin-scaffolder-backend@0.18.0-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.3.4-next.0 - - @backstage/plugin-kubernetes-backend@0.4.12-next.0 - - @backstage/plugin-rollbar-backend@0.1.26-next.0 - - @backstage/plugin-techdocs-backend@0.14.2-next.0 - - @backstage/catalog-model@0.13.0-next.0 - - @backstage/plugin-badges-backend@0.1.23-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@0.1.1-next.0 - - @backstage/plugin-search-backend-module-pg@0.3.1-next.0 - - @backstage/plugin-search-backend-node@0.5.1-next.0 - - @backstage/plugin-search-backend@0.4.7-next.0 - - @backstage/catalog-client@0.9.0-next.0 - - @backstage/plugin-auth-node@0.1.5-next.0 - - @backstage/plugin-azure-devops-backend@0.3.8-next.0 - - @backstage/plugin-code-coverage-backend@0.1.27-next.0 - - @backstage/plugin-graphql-backend@0.1.19-next.0 - - @backstage/plugin-jenkins-backend@0.1.18-next.0 - - @backstage/plugin-kafka-backend@0.2.22-next.0 - - @backstage/plugin-permission-backend@0.5.4-next.0 - - @backstage/plugin-permission-node@0.5.4-next.0 - - @backstage/plugin-proxy-backend@0.2.23-next.0 - - @backstage/plugin-tech-insights-backend@0.2.9-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.13-next.0 - - @backstage/plugin-tech-insights-node@0.2.7-next.0 - - @backstage/plugin-todo-backend@0.1.26-next.0 - - example-app@0.2.68-next.0 - -## 0.2.67 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@0.12.0 - - @backstage/catalog-client@0.8.0 - - @backstage/plugin-catalog-backend@0.23.0 - - @backstage/backend-common@0.12.0 - - @backstage/plugin-scaffolder-backend@0.17.3 - - @backstage/plugin-techdocs-backend@0.14.1 - - @backstage/plugin-auth-backend@0.12.0 - - @backstage/plugin-badges-backend@0.1.22 - - @backstage/plugin-code-coverage-backend@0.1.26 - - @backstage/plugin-jenkins-backend@0.1.17 - - @backstage/plugin-todo-backend@0.1.25 - - @backstage/integration@0.8.0 - - @backstage/plugin-permission-common@0.5.2 - - @backstage/plugin-permission-node@0.5.3 - - @backstage/plugin-search-backend-node@0.5.0 - - @backstage/plugin-search-backend-module-pg@0.3.0 - - @backstage/plugin-search-backend-module-elasticsearch@0.1.0 - - @backstage/plugin-tech-insights-backend@0.2.8 - - example-app@0.2.67 - - @backstage/plugin-auth-node@0.1.4 - - @backstage/plugin-kafka-backend@0.2.21 - - @backstage/plugin-kubernetes-backend@0.4.11 - - @backstage/backend-tasks@0.1.10 - - @backstage/plugin-app-backend@0.3.28 - - @backstage/plugin-azure-devops-backend@0.3.7 - - @backstage/plugin-graphql-backend@0.1.18 - - @backstage/plugin-permission-backend@0.5.3 - - @backstage/plugin-proxy-backend@0.2.22 - - @backstage/plugin-rollbar-backend@0.1.25 - - @backstage/plugin-scaffolder-backend-module-rails@0.3.3 - - @backstage/plugin-search-backend@0.4.6 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.12 - - @backstage/plugin-tech-insights-node@0.2.6 - -## 0.2.66 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.11.0 - - @backstage/plugin-catalog-backend@0.22.0 - - @backstage/plugin-scaffolder-backend@0.17.0 - - @backstage/plugin-graphql-backend@0.1.17 - - @backstage/plugin-auth-backend@0.11.0 - - @backstage/plugin-kubernetes-backend@0.4.10 - - @backstage/plugin-code-coverage-backend@0.1.25 - - @backstage/plugin-jenkins-backend@0.1.16 - - @backstage/plugin-tech-insights-backend@0.2.7 - - @backstage/plugin-todo-backend@0.1.24 - - @backstage/catalog-model@0.11.0 - - @backstage/catalog-client@0.7.2 - - @backstage/plugin-badges-backend@0.1.21 - - @backstage/backend-tasks@0.1.9 - - @backstage/plugin-scaffolder-backend-module-rails@0.3.2 - - @backstage/plugin-techdocs-backend@0.14.0 - - @backstage/plugin-permission-node@0.5.2 - - @backstage/integration@0.7.5 - - example-app@0.2.66 - - @backstage/plugin-app-backend@0.3.27 - - @backstage/plugin-auth-node@0.1.3 - - @backstage/plugin-azure-devops-backend@0.3.6 - - @backstage/plugin-kafka-backend@0.2.20 - - @backstage/plugin-permission-backend@0.5.2 - - @backstage/plugin-proxy-backend@0.2.21 - - @backstage/plugin-rollbar-backend@0.1.24 - - @backstage/plugin-search-backend@0.4.5 - - @backstage/plugin-search-backend-module-pg@0.2.9 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.11 - - @backstage/plugin-tech-insights-node@0.2.5 - -## 0.2.66 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.10.9 - - @backstage/backend-tasks@0.1.8 - - @backstage/catalog-client@0.7.1 - - @backstage/catalog-model@0.10.1 - - @backstage/config@0.1.15 - - @backstage/integration@0.7.4 - - @backstage/plugin-app-backend@0.3.26 - - @backstage/plugin-auth-backend@0.10.2 - - @backstage/plugin-auth-node@0.1.2 - - @backstage/plugin-azure-devops-backend@0.3.5 - - @backstage/plugin-badges-backend@0.1.20 - - @backstage/plugin-catalog-backend@0.21.5 - - @backstage/plugin-code-coverage-backend@0.1.24 - - @backstage/plugin-graphql-backend@0.1.16 - - @backstage/plugin-jenkins-backend@0.1.15 - - @backstage/plugin-kafka-backend@0.2.19 - - @backstage/plugin-kubernetes-backend@0.4.9 - - @backstage/plugin-permission-backend@0.5.1 - - @backstage/plugin-permission-common@0.5.1 - - @backstage/plugin-permission-node@0.5.1 - - @backstage/plugin-proxy-backend@0.2.20 - - @backstage/plugin-rollbar-backend@0.1.23 - - @backstage/plugin-scaffolder-backend@0.16.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.3.1 - - @backstage/plugin-search-backend@0.4.4 - - @backstage/plugin-search-backend-module-elasticsearch@0.0.10 - - @backstage/plugin-search-backend-module-pg@0.2.8 - - @backstage/plugin-search-backend-node@0.4.7 - - @backstage/plugin-tech-insights-backend@0.2.6 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.10 - - @backstage/plugin-tech-insights-node@0.2.4 - - @backstage/plugin-techdocs-backend@0.13.5 - - @backstage/plugin-todo-backend@0.1.23 - -## 0.2.65 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-techdocs-backend@0.13.4 - - @backstage/plugin-catalog-backend@0.21.4 - - @backstage/backend-common@0.10.8 - - @backstage/catalog-client@0.7.0 - - @backstage/integration@0.7.3 - - @backstage/plugin-auth-backend@0.10.1 - - @backstage/plugin-auth-node@0.1.1 - - @backstage/plugin-permission-backend@0.5.0 - - @backstage/plugin-permission-common@0.5.0 - - @backstage/plugin-rollbar-backend@0.1.22 - - @backstage/plugin-scaffolder-backend@0.16.0 - - @backstage/backend-tasks@0.1.7 - - @backstage/catalog-model@0.10.0 - - @backstage/config@0.1.14 - - @backstage/plugin-app-backend@0.3.25 - - @backstage/plugin-azure-devops-backend@0.3.4 - - @backstage/plugin-badges-backend@0.1.19 - - @backstage/plugin-code-coverage-backend@0.1.23 - - @backstage/plugin-graphql-backend@0.1.15 - - @backstage/plugin-jenkins-backend@0.1.14 - - @backstage/plugin-kafka-backend@0.2.18 - - @backstage/plugin-kubernetes-backend@0.4.8 - - @backstage/plugin-permission-node@0.5.0 - - @backstage/plugin-proxy-backend@0.2.19 - - @backstage/plugin-scaffolder-backend-module-rails@0.3.0 - - @backstage/plugin-search-backend@0.4.3 - - @backstage/plugin-search-backend-module-elasticsearch@0.0.9 - - @backstage/plugin-search-backend-module-pg@0.2.7 - - @backstage/plugin-search-backend-node@0.4.6 - - @backstage/plugin-tech-insights-backend@0.2.5 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.9 - - @backstage/plugin-tech-insights-node@0.2.3 - - @backstage/plugin-todo-backend@0.1.22 - - example-app@0.2.65 - -## 0.2.64 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-client@0.6.0 - - @backstage/plugin-auth-backend@0.10.0 - - @backstage/backend-common@0.10.7 - - @backstage/backend-tasks@0.1.6 - - @backstage/plugin-app-backend@0.3.24 - - @backstage/plugin-catalog-backend@0.21.3 - - @backstage/plugin-code-coverage-backend@0.1.22 - - @backstage/plugin-scaffolder-backend@0.15.24 - - @backstage/plugin-search-backend-module-pg@0.2.6 - - @backstage/plugin-tech-insights-backend@0.2.4 - - @backstage/plugin-techdocs-backend@0.13.3 - - @backstage/plugin-auth-node@0.1.0 - - @backstage/plugin-permission-backend@0.4.3 - - @backstage/plugin-search-backend@0.4.2 - - @backstage/plugin-badges-backend@0.1.18 - - @backstage/plugin-jenkins-backend@0.1.13 - - @backstage/plugin-todo-backend@0.1.21 - - @backstage/plugin-permission-node@0.4.3 - - example-app@0.2.64 - - @backstage/plugin-azure-devops-backend@0.3.3 - - @backstage/plugin-graphql-backend@0.1.14 - - @backstage/plugin-kafka-backend@0.2.17 - - @backstage/plugin-kubernetes-backend@0.4.7 - - @backstage/plugin-proxy-backend@0.2.18 - - @backstage/plugin-rollbar-backend@0.1.21 - - @backstage/plugin-scaffolder-backend-module-rails@0.2.6 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.8 - - @backstage/plugin-tech-insights-node@0.2.2 - -## 0.2.64-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.10.0-next.0 - - @backstage/backend-common@0.10.7-next.0 - - @backstage/backend-tasks@0.1.6-next.0 - - @backstage/plugin-app-backend@0.3.24-next.0 - - @backstage/plugin-catalog-backend@0.21.3-next.0 - - @backstage/plugin-code-coverage-backend@0.1.22-next.0 - - @backstage/plugin-scaffolder-backend@0.15.24-next.0 - - @backstage/plugin-search-backend-module-pg@0.2.6-next.0 - - @backstage/plugin-tech-insights-backend@0.2.4-next.0 - - @backstage/plugin-techdocs-backend@0.13.3-next.0 - - example-app@0.2.64-next.0 - - @backstage/plugin-azure-devops-backend@0.3.3-next.0 - - @backstage/plugin-badges-backend@0.1.18-next.0 - - @backstage/plugin-graphql-backend@0.1.14-next.0 - - @backstage/plugin-jenkins-backend@0.1.13-next.0 - - @backstage/plugin-kafka-backend@0.2.17-next.0 - - @backstage/plugin-kubernetes-backend@0.4.7-next.0 - - @backstage/plugin-permission-backend@0.4.3-next.0 - - @backstage/plugin-permission-node@0.4.3-next.0 - - @backstage/plugin-proxy-backend@0.2.18-next.0 - - @backstage/plugin-rollbar-backend@0.1.21-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.2.6-next.0 - - @backstage/plugin-search-backend@0.4.2-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.8-next.0 - - @backstage/plugin-tech-insights-node@0.2.2-next.0 - - @backstage/plugin-todo-backend@0.1.21-next.0 - -## 0.2.63 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.9.0 - - @backstage/plugin-rollbar-backend@0.1.20 - - @backstage/plugin-catalog-backend@0.21.2 - - @backstage/plugin-scaffolder-backend@0.15.23 - - @backstage/plugin-proxy-backend@0.2.17 - - @backstage/backend-common@0.10.6 - - example-app@0.2.63 - - @backstage/backend-tasks@0.1.5 - - @backstage/plugin-app-backend@0.3.23 - - @backstage/plugin-azure-devops-backend@0.3.2 - - @backstage/plugin-badges-backend@0.1.17 - - @backstage/plugin-code-coverage-backend@0.1.21 - - @backstage/plugin-graphql-backend@0.1.13 - - @backstage/plugin-jenkins-backend@0.1.12 - - @backstage/plugin-kafka-backend@0.2.16 - - @backstage/plugin-kubernetes-backend@0.4.6 - - @backstage/plugin-permission-backend@0.4.2 - - @backstage/plugin-permission-node@0.4.2 - - @backstage/plugin-scaffolder-backend-module-rails@0.2.5 - - @backstage/plugin-search-backend@0.4.1 - - @backstage/plugin-search-backend-module-pg@0.2.5 - - @backstage/plugin-tech-insights-backend@0.2.3 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.7 - - @backstage/plugin-tech-insights-node@0.2.1 - - @backstage/plugin-techdocs-backend@0.13.2 - - @backstage/plugin-todo-backend@0.1.20 - -## 0.2.63-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.9.0-next.1 - - @backstage/backend-common@0.10.6-next.0 - - example-app@0.2.63-next.1 - - @backstage/plugin-catalog-backend@0.21.2-next.1 - - @backstage/plugin-techdocs-backend@0.13.2-next.0 - - @backstage/backend-tasks@0.1.5-next.0 - - @backstage/plugin-app-backend@0.3.23-next.0 - - @backstage/plugin-azure-devops-backend@0.3.2-next.0 - - @backstage/plugin-badges-backend@0.1.17-next.0 - - @backstage/plugin-code-coverage-backend@0.1.21-next.0 - - @backstage/plugin-graphql-backend@0.1.13-next.0 - - @backstage/plugin-jenkins-backend@0.1.12-next.0 - - @backstage/plugin-kafka-backend@0.2.16-next.0 - - @backstage/plugin-kubernetes-backend@0.4.6-next.0 - - @backstage/plugin-permission-backend@0.4.2-next.1 - - @backstage/plugin-permission-node@0.4.2-next.1 - - @backstage/plugin-proxy-backend@0.2.17-next.1 - - @backstage/plugin-rollbar-backend@0.1.20-next.1 - - @backstage/plugin-scaffolder-backend@0.15.23-next.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.2.5-next.1 - - @backstage/plugin-search-backend@0.4.1-next.1 - - @backstage/plugin-search-backend-module-pg@0.2.5-next.0 - - @backstage/plugin-tech-insights-backend@0.2.3-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.7-next.0 - - @backstage/plugin-tech-insights-node@0.2.1-next.0 - - @backstage/plugin-todo-backend@0.1.20-next.0 - -## 0.2.63-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.9.0-next.0 - - @backstage/plugin-rollbar-backend@0.1.20-next.0 - - @backstage/plugin-catalog-backend@0.21.2-next.0 - - @backstage/plugin-scaffolder-backend@0.15.23-next.0 - - @backstage/plugin-proxy-backend@0.2.17-next.0 - - @backstage/plugin-permission-backend@0.4.2-next.0 - - @backstage/plugin-permission-node@0.4.2-next.0 - - @backstage/plugin-search-backend@0.4.1-next.0 - - example-app@0.2.63-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.2.5-next.0 - -## 0.2.62 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-node@0.4.5 - - @backstage/plugin-catalog-backend@0.21.1 - - @backstage/plugin-scaffolder-backend@0.15.22 - - @backstage/plugin-kubernetes-backend@0.4.5 - - @backstage/plugin-auth-backend@0.8.0 - - @backstage/plugin-search-backend@0.4.0 - - @backstage/plugin-tech-insights-backend@0.2.2 - - @backstage/plugin-techdocs-backend@0.13.1 - - @backstage/backend-common@0.10.5 - - example-app@0.2.62 - - @backstage/plugin-permission-backend@0.4.1 - - @backstage/plugin-permission-node@0.4.1 - -## 0.2.61 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.7.0 - - @backstage/plugin-permission-backend@0.4.0 - - @backstage/plugin-catalog-backend@0.21.0 - - @backstage/plugin-kubernetes-backend@0.4.4 - - @backstage/integration@0.7.2 - - @backstage/plugin-permission-common@0.4.0 - - @backstage/plugin-search-backend@0.3.1 - - @backstage/plugin-techdocs-backend@0.13.0 - - @backstage/backend-common@0.10.4 - - @backstage/config@0.1.13 - - @backstage/plugin-app-backend@0.3.22 - - @backstage/plugin-permission-node@0.4.0 - - @backstage/plugin-scaffolder-backend@0.15.21 - - @backstage/plugin-tech-insights-backend@0.2.0 - - @backstage/plugin-tech-insights-node@0.2.0 - - @backstage/catalog-model@0.9.10 - - example-app@0.2.61 - - @backstage/backend-tasks@0.1.4 - - @backstage/catalog-client@0.5.5 - - @backstage/plugin-azure-devops-backend@0.3.1 - - @backstage/plugin-badges-backend@0.1.16 - - @backstage/plugin-code-coverage-backend@0.1.20 - - @backstage/plugin-graphql-backend@0.1.12 - - @backstage/plugin-jenkins-backend@0.1.11 - - @backstage/plugin-kafka-backend@0.2.15 - - @backstage/plugin-proxy-backend@0.2.16 - - @backstage/plugin-rollbar-backend@0.1.19 - - @backstage/plugin-scaffolder-backend-module-rails@0.2.4 - - @backstage/plugin-search-backend-module-elasticsearch@0.0.8 - - @backstage/plugin-search-backend-module-pg@0.2.4 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.6 - - @backstage/plugin-todo-backend@0.1.19 - -## 0.2.61-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.7.0-next.0 - - @backstage/plugin-permission-backend@0.4.0-next.0 - - @backstage/plugin-catalog-backend@0.21.0-next.0 - - @backstage/plugin-permission-common@0.4.0-next.0 - - @backstage/backend-common@0.10.4-next.0 - - @backstage/config@0.1.13-next.0 - - @backstage/plugin-app-backend@0.3.22-next.0 - - @backstage/plugin-permission-node@0.4.0-next.0 - - @backstage/plugin-tech-insights-backend@0.2.0-next.0 - - @backstage/plugin-tech-insights-node@0.2.0-next.0 - - @backstage/catalog-model@0.9.10-next.0 - - example-app@0.2.61-next.0 - - @backstage/plugin-scaffolder-backend@0.15.21-next.0 - - @backstage/backend-tasks@0.1.4-next.0 - - @backstage/catalog-client@0.5.5-next.0 - - @backstage/integration@0.7.2-next.0 - - @backstage/plugin-azure-devops-backend@0.3.1-next.0 - - @backstage/plugin-badges-backend@0.1.16-next.0 - - @backstage/plugin-code-coverage-backend@0.1.20-next.0 - - @backstage/plugin-graphql-backend@0.1.12-next.0 - - @backstage/plugin-jenkins-backend@0.1.11-next.0 - - @backstage/plugin-kafka-backend@0.2.15-next.0 - - @backstage/plugin-kubernetes-backend@0.4.4-next.0 - - @backstage/plugin-proxy-backend@0.2.16-next.0 - - @backstage/plugin-rollbar-backend@0.1.19-next.0 - - @backstage/plugin-scaffolder-backend-module-rails@0.2.4-next.0 - - @backstage/plugin-search-backend@0.3.1-next.0 - - @backstage/plugin-search-backend-module-elasticsearch@0.0.8-next.0 - - @backstage/plugin-search-backend-module-pg@0.2.4-next.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.6-next.0 - - @backstage/plugin-techdocs-backend@0.12.4-next.0 - - @backstage/plugin-todo-backend@0.1.19-next.0 - -## 0.2.60 - -### Patch Changes - -- Updated dependencies - - @backstage/config@0.1.12 - - @backstage/plugin-scaffolder-backend@0.15.20 - - @backstage/integration@0.7.1 - - @backstage/backend-common@0.10.3 - - @backstage/plugin-todo-backend@0.1.18 - - @backstage/plugin-catalog-backend@0.20.0 - - @backstage/plugin-tech-insights-backend@0.1.5 - - @backstage/plugin-permission-node@0.3.0 - - @backstage/plugin-auth-backend@0.6.2 - - @backstage/plugin-code-coverage-backend@0.1.19 - - @backstage/plugin-search-backend-node@0.4.4 - - @backstage/plugin-techdocs-backend@0.12.3 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.5 - - @backstage/plugin-permission-backend@0.3.0 - - @backstage/plugin-graphql-backend@0.1.11 - - @backstage/plugin-kubernetes-backend@0.4.3 - - example-app@0.2.60 - - @backstage/backend-tasks@0.1.3 - - @backstage/catalog-client@0.5.4 - - @backstage/catalog-model@0.9.9 - - @backstage/plugin-badges-backend@0.1.15 - - @backstage/plugin-kafka-backend@0.2.14 - - @backstage/plugin-permission-common@0.3.1 - - @backstage/plugin-scaffolder-backend-module-rails@0.2.3 - -## 0.2.59 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-rollbar-backend@0.1.18 - - @backstage/plugin-auth-backend@0.6.0 - - @backstage/backend-common@0.10.1 - - @backstage/plugin-app-backend@0.3.21 - - @backstage/plugin-catalog-backend@0.19.4 - - @backstage/plugin-scaffolder-backend@0.15.19 - - @backstage/integration@0.7.0 - - @backstage/plugin-techdocs-backend@0.12.2 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.4 - - @backstage/plugin-permission-backend@0.2.3 - - @backstage/plugin-permission-node@0.2.3 - - @backstage/plugin-code-coverage-backend@0.1.18 - - @backstage/plugin-scaffolder-backend-module-rails@0.2.2 - - @backstage/plugin-todo-backend@0.1.17 - -## 0.2.58 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.10.0 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.3 - - @backstage/plugin-scaffolder-backend-module-rails@0.2.1 - - @backstage/catalog-client@0.5.3 - - @backstage/plugin-rollbar-backend@0.1.17 - - @backstage/plugin-auth-backend@0.5.2 - - @backstage/plugin-permission-common@0.3.0 - - @backstage/plugin-search-backend@0.3.0 - - @backstage/plugin-techdocs-backend@0.12.1 - - @backstage/plugin-jenkins-backend@0.1.10 - - @backstage/plugin-permission-node@0.2.2 - - example-app@0.2.58 - - @backstage/plugin-app-backend@0.3.20 - - @backstage/plugin-azure-devops-backend@0.2.6 - - @backstage/plugin-badges-backend@0.1.14 - - @backstage/plugin-catalog-backend@0.19.3 - - @backstage/plugin-code-coverage-backend@0.1.17 - - @backstage/plugin-graphql-backend@0.1.10 - - @backstage/plugin-kafka-backend@0.2.13 - - @backstage/plugin-kubernetes-backend@0.4.1 - - @backstage/plugin-permission-backend@0.2.2 - - @backstage/plugin-proxy-backend@0.2.15 - - @backstage/plugin-scaffolder-backend@0.15.18 - - @backstage/plugin-search-backend-module-pg@0.2.3 - - @backstage/plugin-tech-insights-backend@0.1.4 - - @backstage/plugin-tech-insights-node@0.1.2 - - @backstage/plugin-todo-backend@0.1.16 - -## 0.2.57 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-module-elasticsearch@0.0.7 - - @backstage/plugin-catalog-backend@0.19.2 - - @backstage/plugin-scaffolder-backend@0.15.17 - - @backstage/backend-common@0.9.14 - - @backstage/plugin-azure-devops-backend@0.2.5 - - @backstage/plugin-auth-backend@0.5.1 - - @backstage/catalog-model@0.9.8 - - example-app@0.2.57 - -## 0.2.56 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.5.0 - - @backstage/plugin-scaffolder-backend@0.15.16 - - @backstage/plugin-kubernetes-backend@0.4.0 - - @backstage/backend-common@0.9.13 - - @backstage/plugin-catalog-backend@0.19.1 - - @backstage/plugin-search-backend@0.2.8 - - @backstage/plugin-search-backend-module-elasticsearch@0.0.6 - - @backstage/plugin-search-backend-module-pg@0.2.2 - - @backstage/plugin-techdocs-backend@0.12.0 - - @backstage/plugin-todo-backend@0.1.15 - - @backstage/plugin-scaffolder-backend-module-rails@0.2.0 - - @backstage/plugin-azure-devops-backend@0.2.4 - - example-app@0.2.56 - -## 0.2.55 - -### Patch Changes - -- Updated dependencies - - @backstage/integration@0.6.10 - - @backstage/plugin-scaffolder-backend@0.15.15 - - @backstage/plugin-auth-backend@0.4.10 - - @backstage/plugin-kubernetes-backend@0.3.20 - - @backstage/plugin-badges-backend@0.1.13 - - @backstage/plugin-catalog-backend@0.19.0 - - @backstage/plugin-code-coverage-backend@0.1.16 - - @backstage/plugin-jenkins-backend@0.1.9 - - @backstage/plugin-tech-insights-backend@0.1.3 - - @backstage/plugin-techdocs-backend@0.11.0 - - @backstage/plugin-todo-backend@0.1.14 - - @backstage/backend-common@0.9.12 - - @backstage/plugin-azure-devops-backend@0.2.3 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.2 - - @backstage/plugin-tech-insights-node@0.1.1 - - example-app@0.2.55 - -## 0.2.54 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.3.19 - - @backstage/plugin-tech-insights-backend@0.1.2 - - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.1 - - @backstage/plugin-auth-backend@0.4.9 - - @backstage/plugin-scaffolder-backend@0.15.14 - - @backstage/plugin-catalog-backend@0.18.0 - - @backstage/plugin-kafka-backend@0.2.12 - - @backstage/backend-common@0.9.11 - - @backstage/plugin-azure-devops-backend@0.2.2 - - @backstage/plugin-badges-backend@0.1.12 - - @backstage/plugin-code-coverage-backend@0.1.15 - - @backstage/plugin-jenkins-backend@0.1.8 - - @backstage/plugin-proxy-backend@0.2.14 - - @backstage/plugin-rollbar-backend@0.1.16 - - @backstage/plugin-search-backend@0.2.7 - - @backstage/plugin-techdocs-backend@0.10.9 - -## 0.2.52 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.9.9 - - @backstage/plugin-jenkins-backend@0.1.7 - - @backstage/plugin-search-backend-module-elasticsearch@0.0.5 - - @backstage/plugin-scaffolder-backend@0.15.12 - - @backstage/plugin-azure-devops-backend@0.2.0 - - @backstage/catalog-client@0.5.1 - - @backstage/plugin-auth-backend@0.4.7 - - @backstage/plugin-catalog-backend@0.17.3 - - @backstage/plugin-scaffolder-backend-module-rails@0.1.7 - -## 0.2.50 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.4.4 - - @backstage/integration@0.6.8 - - @backstage/plugin-scaffolder-backend@0.15.8 - - @backstage/plugin-catalog-backend@0.17.0 - - @backstage/plugin-azure-devops-backend@0.1.2 - - @backstage/plugin-code-coverage-backend@0.1.13 - - @backstage/plugin-kubernetes-backend@0.3.17 - - example-app@0.2.50 - -## 0.2.49 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@0.16.0 - - @backstage/catalog-model@0.9.4 - - @backstage/plugin-proxy-backend@0.2.13 - - @backstage/plugin-auth-backend@0.4.3 - - @backstage/backend-common@0.9.6 - - @backstage/catalog-client@0.5.0 - - @backstage/integration@0.6.7 - - @backstage/plugin-scaffolder-backend@0.15.7 - - example-app@0.2.49 - - @backstage/plugin-badges-backend@0.1.11 - - @backstage/plugin-code-coverage-backend@0.1.12 - - @backstage/plugin-jenkins-backend@0.1.6 - - @backstage/plugin-techdocs-backend@0.10.4 - - @backstage/plugin-todo-backend@0.1.13 - -## 0.2.48 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.9.5 - - @backstage/plugin-catalog-backend@0.15.0 - - @backstage/plugin-azure-devops-backend@0.1.1 - - @backstage/integration@0.6.6 - - @backstage/plugin-auth-backend@0.4.2 - - example-app@0.2.48 - -## 0.2.47 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@0.14.0 - - @backstage/integration@0.6.5 - - @backstage/catalog-client@0.4.0 - - @backstage/catalog-model@0.9.3 - - @backstage/backend-common@0.9.4 - - @backstage/config@0.1.10 - - @backstage/plugin-kafka-backend@0.2.10 - - @backstage/plugin-kubernetes-backend@0.3.16 - - @backstage/plugin-rollbar-backend@0.1.15 - - @backstage/plugin-search-backend-module-pg@0.2.1 - - example-app@0.2.47 - - @backstage/plugin-auth-backend@0.4.1 - - @backstage/plugin-badges-backend@0.1.10 - - @backstage/plugin-code-coverage-backend@0.1.11 - - @backstage/plugin-jenkins-backend@0.1.5 - - @backstage/plugin-scaffolder-backend@0.15.6 - - @backstage/plugin-techdocs-backend@0.10.3 - - @backstage/plugin-todo-backend@0.1.12 - -## 0.2.46 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.4.0 - - @backstage/plugin-scaffolder-backend@0.15.5 - - @backstage/backend-common@0.9.3 - - @backstage/plugin-catalog-backend@0.13.8 - - @backstage/plugin-techdocs-backend@0.10.2 - - @backstage/integration@0.6.4 - - @backstage/plugin-search-backend-module-elasticsearch@0.0.4 - - example-app@0.2.46 - -## 0.2.44 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@0.13.6 - - @backstage/plugin-scaffolder-backend@0.15.3 - - @backstage/plugin-techdocs-backend@0.10.1 - - @backstage/plugin-auth-backend@0.3.24 - - @backstage/integration@0.6.3 - - @backstage/plugin-search-backend@0.2.6 - - @backstage/plugin-search-backend-module-elasticsearch@0.0.3 - - @backstage/plugin-search-backend-module-pg@0.2.0 - - @backstage/plugin-search-backend-node@0.4.2 - - @backstage/catalog-model@0.9.1 - - @backstage/backend-common@0.9.1 - - example-app@0.2.44 - -## 0.2.43 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.9.0 - - @backstage/plugin-catalog-backend@0.13.5 - - @backstage/plugin-search-backend-module-pg@0.1.3 - - @backstage/plugin-auth-backend@0.3.23 - - @backstage/plugin-scaffolder-backend@0.15.2 - - @backstage/integration@0.6.2 - - @backstage/config@0.1.8 - - @backstage/plugin-kubernetes-backend@0.3.15 - - @backstage/plugin-techdocs-backend@0.10.0 - - @backstage/plugin-jenkins-backend@0.1.4 - - @backstage/plugin-app-backend@0.3.16 - - @backstage/plugin-badges-backend@0.1.9 - - @backstage/plugin-code-coverage-backend@0.1.10 - - @backstage/plugin-graphql-backend@0.1.9 - - @backstage/plugin-kafka-backend@0.2.9 - - @backstage/plugin-proxy-backend@0.2.12 - - @backstage/plugin-rollbar-backend@0.1.14 - - @backstage/plugin-scaffolder-backend-module-rails@0.1.5 - - @backstage/plugin-search-backend@0.2.5 - - @backstage/plugin-todo-backend@0.1.11 - - example-app@0.2.43 - -## 0.2.41 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.3.20 - - @backstage/integration@0.6.0 - - @backstage/plugin-scaffolder-backend@0.15.0 - - @backstage/backend-common@0.8.9 - - @backstage/plugin-kubernetes-backend@0.3.14 - - @backstage/plugin-search-backend-module-elasticsearch@0.0.2 - - @backstage/plugin-search-backend-module-pg@0.1.1 - - @backstage/plugin-catalog-backend@0.13.2 - - @backstage/plugin-code-coverage-backend@0.1.9 - - @backstage/plugin-scaffolder-backend-module-rails@0.1.4 - - @backstage/plugin-techdocs-backend@0.9.2 - - @backstage/plugin-todo-backend@0.1.9 - - example-app@0.2.41 - -## 0.2.38 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.3.11 - - @backstage/catalog-client@0.3.17 - - @backstage/plugin-auth-backend@0.3.18 - - @backstage/plugin-jenkins-backend@0.1.2 - - @backstage/backend-common@0.8.7 - - @backstage/plugin-techdocs-backend@0.9.0 - - @backstage/plugin-scaffolder-backend@0.14.1 - -## 0.2.37 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.8.6 - - @backstage/plugin-scaffolder-backend@0.14.0 - - @backstage/plugin-catalog-backend@0.13.0 - - @backstage/plugin-auth-backend@0.3.17 - - @backstage/plugin-scaffolder-backend-module-rails@0.1.3 - - @backstage/plugin-search-backend-node@0.4.0 - - @backstage/plugin-techdocs-backend@0.8.7 - - @backstage/plugin-app-backend@0.3.15 - - @backstage/plugin-kubernetes-backend@0.3.10 - - @backstage/plugin-rollbar-backend@0.1.13 - - example-app@0.2.37 - - @backstage/plugin-search-backend@0.2.3 - -## 0.2.36 - -### Patch Changes - -- Updated dependencies - - @backstage/integration@0.5.8 - - @backstage/plugin-scaffolder-backend@0.13.0 - - @backstage/catalog-model@0.9.0 - - @backstage/plugin-catalog-backend@0.12.0 - - @backstage/backend-common@0.8.5 - - @backstage/plugin-search-backend-node@0.3.0 - - example-app@0.2.36 - - @backstage/plugin-scaffolder-backend-module-rails@0.1.2 - - @backstage/catalog-client@0.3.16 - - @backstage/plugin-auth-backend@0.3.16 - - @backstage/plugin-badges-backend@0.1.8 - - @backstage/plugin-code-coverage-backend@0.1.8 - - @backstage/plugin-kafka-backend@0.2.8 - - @backstage/plugin-kubernetes-backend@0.3.9 - - @backstage/plugin-techdocs-backend@0.8.6 - - @backstage/plugin-todo-backend@0.1.8 - - @backstage/plugin-search-backend@0.2.2 - -## 0.2.35 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@0.12.4 - - @backstage/backend-common@0.8.4 - - @backstage/plugin-auth-backend@0.3.15 - - @backstage/plugin-catalog-backend@0.11.0 - - @backstage/plugin-techdocs-backend@0.8.5 - - @backstage/catalog-client@0.3.15 - - @backstage/plugin-kafka-backend@0.2.7 - -## 0.2.32 - -### Patch Changes - -- Updated dependencies [9c63be545] -- Updated dependencies [92963779b] -- Updated dependencies [27a9b503a] -- Updated dependencies [66c6bfebd] -- Updated dependencies [55a253de2] -- Updated dependencies [70bc30c5b] -- Updated dependencies [db1c8f93b] -- Updated dependencies [5aff84759] -- Updated dependencies [f26e6008f] -- Updated dependencies [eda9dbd5f] -- Updated dependencies [4f8cf50fe] -- Updated dependencies [875809a59] - - @backstage/plugin-catalog-backend@0.10.2 - - @backstage/backend-common@0.8.2 - - @backstage/catalog-model@0.8.2 - - @backstage/plugin-scaffolder-backend@0.12.0 - - @backstage/catalog-client@0.3.13 - - @backstage/plugin-search-backend-node@0.2.0 - - @backstage/plugin-search-backend@0.2.0 - - @backstage/plugin-proxy-backend@0.2.9 - - example-app@0.2.32 - -## 0.2.30 - -### Patch Changes - -- Updated dependencies [0fd4ea443] -- Updated dependencies [add62a455] -- Updated dependencies [260aaa684] -- Updated dependencies [704875e26] - - @backstage/plugin-catalog-backend@0.10.0 - - @backstage/catalog-client@0.3.12 - - @backstage/catalog-model@0.8.0 - - @backstage/plugin-scaffolder-backend@0.11.4 - - example-app@0.2.30 - - @backstage/plugin-auth-backend@0.3.12 - - @backstage/plugin-badges-backend@0.1.6 - - @backstage/plugin-code-coverage-backend@0.1.6 - - @backstage/plugin-kafka-backend@0.2.6 - - @backstage/plugin-kubernetes-backend@0.3.8 - - @backstage/plugin-techdocs-backend@0.8.2 - - @backstage/plugin-todo-backend@0.1.6 - -## 0.2.28 - -### Patch Changes - -- Updated dependencies [062bbf90f] -- Updated dependencies [22fd8ce2a] -- Updated dependencies [10c008a3a] -- Updated dependencies [82ca1ac22] -- Updated dependencies [f9fb4a205] -- Updated dependencies [9a207f052] -- Updated dependencies [16be1d093] -- Updated dependencies [fd39d4662] -- Updated dependencies [f9f9d633d] - - @backstage/plugin-scaffolder-backend@0.11.1 - - @backstage/backend-common@0.8.0 - - @backstage/catalog-model@0.7.9 - - @backstage/plugin-catalog-backend@0.9.0 - - @backstage/plugin-kubernetes-backend@0.3.7 - - example-app@0.2.28 - - @backstage/plugin-app-backend@0.3.13 - - @backstage/plugin-auth-backend@0.3.10 - - @backstage/plugin-badges-backend@0.1.4 - - @backstage/plugin-code-coverage-backend@0.1.5 - - @backstage/plugin-graphql-backend@0.1.8 - - @backstage/plugin-kafka-backend@0.2.5 - - @backstage/plugin-proxy-backend@0.2.8 - - @backstage/plugin-rollbar-backend@0.1.11 - - @backstage/plugin-search-backend@0.1.5 - - @backstage/plugin-techdocs-backend@0.8.1 - - @backstage/plugin-todo-backend@0.1.5 - -## 0.2.27 - -### Patch Changes - -- Updated dependencies [e0bfd3d44] -- Updated dependencies [e0bfd3d44] -- Updated dependencies [e0bfd3d44] -- Updated dependencies [38ca05168] -- Updated dependencies [b219821a0] -- Updated dependencies [69eefb5ae] -- Updated dependencies [f53fba29f] -- Updated dependencies [75c8cec39] -- Updated dependencies [227439a72] -- Updated dependencies [cdb3426e5] -- Updated dependencies [d8b81fd28] -- Updated dependencies [d1b1306d9] - - @backstage/plugin-scaffolder-backend@0.11.0 - - @backstage/backend-common@0.7.0 - - @backstage/plugin-techdocs-backend@0.8.0 - - @backstage/plugin-catalog-backend@0.8.2 - - @backstage/plugin-kubernetes-backend@0.3.6 - - @backstage/plugin-proxy-backend@0.2.7 - - @backstage/catalog-model@0.7.8 - - @backstage/config@0.1.5 - - @backstage/catalog-client@0.3.11 - - example-app@0.2.27 - - @backstage/plugin-app-backend@0.3.12 - - @backstage/plugin-auth-backend@0.3.9 - - @backstage/plugin-badges-backend@0.1.3 - - @backstage/plugin-code-coverage-backend@0.1.4 - - @backstage/plugin-graphql-backend@0.1.7 - - @backstage/plugin-kafka-backend@0.2.4 - - @backstage/plugin-rollbar-backend@0.1.10 - - @backstage/plugin-search-backend@0.1.4 - - @backstage/plugin-todo-backend@0.1.4 - -## 0.2.25 - -### Patch Changes - -- Updated dependencies [b9b2b4b76] -- Updated dependencies [84c54474d] -- Updated dependencies [49574a8a3] -- Updated dependencies [d367f63b5] -- Updated dependencies [5fe62f124] -- Updated dependencies [09b5fcf2e] -- Updated dependencies [55b2fc0c0] -- Updated dependencies [c42cd1daa] -- Updated dependencies [b42531cfe] -- Updated dependencies [c2306f898] - - @backstage/plugin-search-backend@0.1.3 - - @backstage/plugin-search-backend-node@0.1.3 - - @backstage/plugin-scaffolder-backend@0.10.0 - - @backstage/plugin-rollbar-backend@0.1.9 - - @backstage/backend-common@0.6.3 - - @backstage/plugin-catalog-backend@0.8.0 - - @backstage/plugin-code-coverage-backend@0.1.2 - - @backstage/plugin-kubernetes-backend@0.3.5 - - example-app@0.2.25 - -## 0.2.22 - -### Patch Changes - -- Updated dependencies [f03a52f5b] -- Updated dependencies [676ede643] -- Updated dependencies [1ac6a5233] -- Updated dependencies [2ab6f3ff0] -- Updated dependencies [0d55dcc74] -- Updated dependencies [29e1789e1] -- Updated dependencies [f1b2c1d2c] -- Updated dependencies [60e463c8d] -- Updated dependencies [676ede643] -- Updated dependencies [b196a4569] -- Updated dependencies [8488a1a96] -- Updated dependencies [37e3a69f5] -- Updated dependencies [6b2d54fd6] -- Updated dependencies [44590510d] -- Updated dependencies [164cc4c53] - - @backstage/plugin-kafka-backend@0.2.3 - - @backstage/plugin-catalog-backend@0.7.0 - - @backstage/plugin-kubernetes-backend@0.3.3 - - @backstage/plugin-scaffolder-backend@0.9.4 - - @backstage/plugin-auth-backend@0.3.7 - - @backstage/catalog-client@0.3.9 - - @backstage/plugin-todo-backend@0.1.3 - - @backstage/catalog-model@0.7.5 - - @backstage/backend-common@0.6.1 - -## 0.2.21 - -### Patch Changes - -- Updated dependencies [a2a3c7803] -- Updated dependencies [9f2e51e89] -- Updated dependencies [4d248725e] -- Updated dependencies [aaeb7ecf3] -- Updated dependencies [449776cd6] -- Updated dependencies [91e87c055] -- Updated dependencies [36d933ec5] -- Updated dependencies [113d3d59e] -- Updated dependencies [f47e11427] -- Updated dependencies [c862b3f36] - - @backstage/plugin-kubernetes-backend@0.3.2 - - @backstage/plugin-scaffolder-backend@0.9.3 - - @backstage/plugin-search-backend@0.1.2 - - @backstage/plugin-search-backend-node@0.1.2 - - @backstage/plugin-techdocs-backend@0.7.0 - - @backstage/plugin-auth-backend@0.3.6 - - @backstage/plugin-todo-backend@0.1.2 - - @backstage/plugin-catalog-backend@0.6.7 - - example-app@0.2.21 - -## 0.2.20 - -### Patch Changes - -- Updated dependencies [010aed784] -- Updated dependencies [8686eb38c] -- Updated dependencies [e7baa0d2e] -- Updated dependencies [8b4f7e42a] -- Updated dependencies [8686eb38c] -- Updated dependencies [0434853a5] -- Updated dependencies [4bc98a5b9] -- Updated dependencies [d2f4efc5d] -- Updated dependencies [8686eb38c] -- Updated dependencies [424742dc1] -- Updated dependencies [1f98a6ff8] -- Updated dependencies [8b5e59750] -- Updated dependencies [8686eb38c] - - @backstage/plugin-catalog-backend@0.6.6 - - @backstage/catalog-client@0.3.8 - - @backstage/plugin-techdocs-backend@0.6.5 - - @backstage/plugin-scaffolder-backend@0.9.2 - - @backstage/backend-common@0.6.0 - - @backstage/config@0.1.4 - - @backstage/plugin-auth-backend@0.3.5 - - @backstage/plugin-kubernetes-backend@0.3.1 - - example-app@0.2.20 - - @backstage/plugin-app-backend@0.3.10 - - @backstage/plugin-graphql-backend@0.1.6 - - @backstage/plugin-kafka-backend@0.2.2 - - @backstage/plugin-proxy-backend@0.2.6 - - @backstage/plugin-rollbar-backend@0.1.8 - - @backstage/plugin-todo-backend@0.1.1 - -## 0.2.19 - -### Patch Changes - -- Updated dependencies [5d7834baf] -- Updated dependencies [9ef5a126d] -- Updated dependencies [d7245b733] -- Updated dependencies [393b623ae] -- Updated dependencies [d7245b733] -- Updated dependencies [0b42fff22] -- Updated dependencies [0b42fff22] -- Updated dependencies [2ef5bc7ea] -- Updated dependencies [c532c1682] -- Updated dependencies [761698831] -- Updated dependencies [aa095e469] -- Updated dependencies [761698831] -- Updated dependencies [f98f212e4] -- Updated dependencies [9581ff0b4] -- Updated dependencies [93c62c755] -- Updated dependencies [02d78290a] -- Updated dependencies [a501128db] -- Updated dependencies [8de9963f0] -- Updated dependencies [5f1b7ea35] -- Updated dependencies [2e57922de] -- Updated dependencies [e2c1b3fb6] - - @backstage/plugin-kubernetes-backend@0.3.0 - - @backstage/plugin-catalog-backend@0.6.5 - - @backstage/backend-common@0.5.6 - - @backstage/plugin-app-backend@0.3.9 - - @backstage/plugin-scaffolder-backend@0.9.1 - - @backstage/catalog-model@0.7.4 - - @backstage/catalog-client@0.3.7 - - @backstage/plugin-techdocs-backend@0.6.4 - - @backstage/plugin-auth-backend@0.3.4 - - example-app@0.2.19 - -## 0.2.18 - -### Patch Changes - -- Updated dependencies [12d8f27a6] -- Updated dependencies [52b5bc3e2] -- Updated dependencies [ecdd407b1] -- Updated dependencies [4fbc9df79] -- Updated dependencies [12d8f27a6] -- Updated dependencies [497859088] -- Updated dependencies [1987c9341] -- Updated dependencies [f31b76b44] -- Updated dependencies [15eee03bc] -- Updated dependencies [f43192207] -- Updated dependencies [8adb48df4] -- Updated dependencies [e3adec2bd] -- Updated dependencies [9ce68b677] -- Updated dependencies [8106c9528] -- Updated dependencies [d0ed25196] -- Updated dependencies [96ccc8f69] -- Updated dependencies [3af994c81] - - @backstage/plugin-scaffolder-backend@0.9.0 - - @backstage/plugin-techdocs-backend@0.6.3 - - @backstage/plugin-catalog-backend@0.6.4 - - @backstage/plugin-kafka-backend@0.2.1 - - @backstage/catalog-model@0.7.3 - - @backstage/backend-common@0.5.5 - - @backstage/plugin-proxy-backend@0.2.5 - - @backstage/plugin-auth-backend@0.3.3 - - @backstage/plugin-kubernetes-backend@0.2.8 - - example-app@0.2.18 - -## 0.2.17 - -### Patch Changes - -- Updated dependencies [a70af22a2] -- Updated dependencies [ec504e7b4] -- Updated dependencies [a5f42cf66] -- Updated dependencies [f37992797] -- Updated dependencies [bad21a085] -- Updated dependencies [1c06cb312] -- Updated dependencies [2499f6cde] -- Updated dependencies [a1f5e6545] - - @backstage/plugin-kubernetes-backend@0.2.7 - - @backstage/plugin-auth-backend@0.3.2 - - @backstage/plugin-scaffolder-backend@0.8.0 - - @backstage/plugin-techdocs-backend@0.6.2 - - @backstage/catalog-model@0.7.2 - - @backstage/plugin-app-backend@0.3.8 - - @backstage/plugin-catalog-backend@0.6.3 - - @backstage/config@0.1.3 - - example-app@0.2.17 - -## 0.2.15 - -### Patch Changes - -- Updated dependencies [1deb31141] -- Updated dependencies [6ed2b47d6] -- Updated dependencies [77ad0003a] -- Updated dependencies [d2441aee3] -- Updated dependencies [727f0deec] -- Updated dependencies [fb53eb7cb] -- Updated dependencies [07bafa248] -- Updated dependencies [ffffea8e6] -- Updated dependencies [f3fbfb452] -- Updated dependencies [615103a63] -- Updated dependencies [84364b35c] -- Updated dependencies [82b2c11b6] -- Updated dependencies [965e200c6] -- Updated dependencies [5a5163519] -- Updated dependencies [82b2c11b6] -- Updated dependencies [08142b256] -- Updated dependencies [08142b256] - - @backstage/plugin-auth-backend@0.3.0 - - @backstage/plugin-scaffolder-backend@0.7.0 - - @backstage/plugin-catalog-backend@0.6.1 - - @backstage/plugin-app-backend@0.3.7 - - example-app@0.2.15 - - @backstage/backend-common@0.5.3 - - @backstage/plugin-techdocs-backend@0.6.0 - -## 0.2.14 - -### Patch Changes - -- Updated dependencies [c777df180] -- Updated dependencies [2430ee7c2] -- Updated dependencies [3149bfe63] -- Updated dependencies [6e612ce25] -- Updated dependencies [e44925723] -- Updated dependencies [9d6ef14bc] -- Updated dependencies [a26668913] -- Updated dependencies [025e122c3] -- Updated dependencies [e9aab60c7] -- Updated dependencies [24e47ef1e] -- Updated dependencies [7881f2117] -- Updated dependencies [529d16d27] -- Updated dependencies [cdea0baf1] -- Updated dependencies [11cb5ef94] - - @backstage/plugin-techdocs-backend@0.5.5 - - @backstage/backend-common@0.5.2 - - @backstage/plugin-catalog-backend@0.6.0 - - @backstage/catalog-model@0.7.1 - - example-app@0.2.14 - - @backstage/plugin-scaffolder-backend@0.6.0 - - @backstage/plugin-app-backend@0.3.6 - -## 0.2.13 - -### Patch Changes - -- Updated dependencies [26a3a6cf0] -- Updated dependencies [681111228] -- Updated dependencies [664dd08c9] -- Updated dependencies [9dd057662] -- Updated dependencies [234e7d985] -- Updated dependencies [d7b1d317f] -- Updated dependencies [a91aa6bf2] -- Updated dependencies [39b05b9ae] -- Updated dependencies [4eaa06057] - - @backstage/backend-common@0.5.1 - - @backstage/plugin-scaffolder-backend@0.5.2 - - @backstage/plugin-kubernetes-backend@0.2.6 - - @backstage/plugin-catalog-backend@0.5.5 - - @backstage/plugin-kafka-backend@0.2.0 - - @backstage/plugin-auth-backend@0.2.12 - - example-app@0.2.13 - - @backstage/plugin-app-backend@0.3.5 - -## 0.2.12 - -### Patch Changes - -- Updated dependencies [def2307f3] -- Updated dependencies [d54857099] -- Updated dependencies [0b135e7e0] -- Updated dependencies [318a6af9f] -- Updated dependencies [294a70cab] -- Updated dependencies [ac7be581a] -- Updated dependencies [0ea032763] -- Updated dependencies [5345a1f98] -- Updated dependencies [ed6baab66] -- Updated dependencies [ad838c02f] -- Updated dependencies [a5e27d5c1] -- Updated dependencies [0643a3336] -- Updated dependencies [a2291d7cc] -- Updated dependencies [f9ba00a1c] -- Updated dependencies [09a370426] -- Updated dependencies [a93f42213] - - @backstage/catalog-model@0.7.0 - - @backstage/plugin-catalog-backend@0.5.4 - - @backstage/plugin-kubernetes-backend@0.2.5 - - @backstage/backend-common@0.5.0 - - @backstage/plugin-scaffolder-backend@0.5.0 - - @backstage/plugin-techdocs-backend@0.5.4 - - @backstage/plugin-auth-backend@0.2.11 - - example-app@0.2.12 - - @backstage/plugin-kafka-backend@0.1.1 - - @backstage/plugin-app-backend@0.3.4 - - @backstage/plugin-graphql-backend@0.1.5 - - @backstage/plugin-proxy-backend@0.2.4 - - @backstage/plugin-rollbar-backend@0.1.7 - -## 0.2.11 - -### Patch Changes - -- cc068c0d6: Bump the gitbeaker dependencies to 28.x. - - To update your own installation, go through the `package.json` files of all of - your packages, and ensure that all dependencies on `@gitbeaker/node` or - `@gitbeaker/core` are at version `^28.0.2`. Then run `yarn install` at the root - of your repo. - -- Updated dependencies [68ad5af51] -- Updated dependencies [5a9a7e7c2] -- Updated dependencies [f3b064e1c] -- Updated dependencies [94fdf4955] -- Updated dependencies [cc068c0d6] -- Updated dependencies [ade6b3bdf] -- Updated dependencies [468579734] -- Updated dependencies [cb7af51e7] -- Updated dependencies [abbee6fff] -- Updated dependencies [147fadcb9] -- Updated dependencies [711ba55a2] - - @backstage/plugin-techdocs-backend@0.5.3 - - @backstage/plugin-kubernetes-backend@0.2.4 - - @backstage/catalog-model@0.6.1 - - @backstage/plugin-catalog-backend@0.5.3 - - @backstage/plugin-scaffolder-backend@0.4.1 - - @backstage/plugin-auth-backend@0.2.10 - - @backstage/backend-common@0.4.3 - -## 0.2.10 - -### Patch Changes - -- Updated dependencies [5eb8c9b9e] -- Updated dependencies [7e3451700] - - @backstage/plugin-scaffolder-backend@0.4.0 - -## 0.2.8 - -### Patch Changes - -- 7cfcd58ee: use node 14 for backend Dockerfile -- Updated dependencies [19554f6d6] -- Updated dependencies [33a82a713] -- Updated dependencies [5de26b9a6] -- Updated dependencies [30d6c78fb] -- Updated dependencies [5084e5039] -- Updated dependencies [a8573e53b] -- Updated dependencies [aed8f7f12] - - @backstage/plugin-scaffolder-backend@0.3.6 - - @backstage/plugin-catalog-backend@0.5.1 - - @backstage/plugin-techdocs-backend@0.5.0 - - example-app@0.2.8 - -## 0.2.7 - -### Patch Changes - -- Updated dependencies [c6eeefa35] -- Updated dependencies [fb386b760] -- Updated dependencies [c911061b7] -- Updated dependencies [7c3ffc0cd] -- Updated dependencies [dae4f3983] -- Updated dependencies [7b15cc271] -- Updated dependencies [e7496dc3e] -- Updated dependencies [1d1c2860f] -- Updated dependencies [0e6298f7e] -- Updated dependencies [8dd0a906d] -- Updated dependencies [4eafdec4a] -- Updated dependencies [6b37c95bf] -- Updated dependencies [8c31c681c] -- Updated dependencies [7b98e7fee] -- Updated dependencies [ac3560b42] -- Updated dependencies [94c65a9d4] -- Updated dependencies [0097057ed] - - @backstage/plugin-catalog-backend@0.5.0 - - @backstage/catalog-model@0.6.0 - - @backstage/plugin-techdocs-backend@0.4.0 - - @backstage/plugin-auth-backend@0.2.7 - - @backstage/backend-common@0.4.1 - - @backstage/plugin-scaffolder-backend@0.3.5 - - example-app@0.2.7 - - @backstage/plugin-kubernetes-backend@0.2.3 - -## 0.2.6 - -### Patch Changes - -- 1e22f8e0b: Unify `dockerode` library and type dependency versions -- Updated dependencies [6e8bb3ac0] -- Updated dependencies [e708679d7] -- Updated dependencies [047c018c9] -- Updated dependencies [38e24db00] -- Updated dependencies [e3bd9fc2f] -- Updated dependencies [12bbd748c] -- Updated dependencies [38d63fbe1] -- Updated dependencies [1e22f8e0b] -- Updated dependencies [83b6e0c1f] -- Updated dependencies [e3bd9fc2f] - - @backstage/plugin-catalog-backend@0.4.0 - - @backstage/backend-common@0.4.0 - - @backstage/config@0.1.2 - - @backstage/plugin-scaffolder-backend@0.3.4 - - @backstage/plugin-techdocs-backend@0.3.2 - - @backstage/catalog-model@0.5.0 - - example-app@0.2.6 - - @backstage/plugin-app-backend@0.3.3 - - @backstage/plugin-auth-backend@0.2.6 - - @backstage/plugin-graphql-backend@0.1.4 - - @backstage/plugin-kubernetes-backend@0.2.2 - - @backstage/plugin-proxy-backend@0.2.3 - - @backstage/plugin-rollbar-backend@0.1.5 - -## 0.2.5 - -### Patch Changes - -- Updated dependencies [ae95c7ff3] -- Updated dependencies [b4488ddb0] -- Updated dependencies [612368274] -- Updated dependencies [6a6c7c14e] -- Updated dependencies [08835a61d] -- Updated dependencies [a9fd599f7] -- Updated dependencies [e42402b47] -- Updated dependencies [bcc211a08] -- Updated dependencies [3619ea4c4] - - @backstage/plugin-techdocs-backend@0.3.1 - - @backstage/plugin-catalog-backend@0.3.0 - - @backstage/backend-common@0.3.3 - - @backstage/plugin-proxy-backend@0.2.2 - - @backstage/catalog-model@0.4.0 - - @backstage/plugin-kubernetes-backend@0.2.1 - - @backstage/plugin-app-backend@0.3.2 - - example-app@0.2.5 - - @backstage/plugin-auth-backend@0.2.5 - - @backstage/plugin-scaffolder-backend@0.3.3 - -## 0.2.4 - -### Patch Changes - -- Updated dependencies [50eff1d00] -- Updated dependencies [ff1301d28] -- Updated dependencies [4b53294a6] -- Updated dependencies [3aa7efb3f] -- Updated dependencies [1ec19a3f4] -- Updated dependencies [ab94c9542] -- Updated dependencies [3a201c5d5] -- Updated dependencies [2daf18e80] -- Updated dependencies [069cda35f] -- Updated dependencies [b3d4e4e57] -- Updated dependencies [700a212b4] - - @backstage/plugin-auth-backend@0.2.4 - - @backstage/plugin-app-backend@0.3.1 - - @backstage/plugin-techdocs-backend@0.3.0 - - @backstage/backend-common@0.3.2 - - @backstage/plugin-catalog-backend@0.2.3 - - @backstage/catalog-model@0.3.1 - - @backstage/plugin-rollbar-backend@0.1.4 - - example-app@0.2.4 - -## 0.2.3 - -### Patch Changes - -- Updated dependencies [1166fcc36] -- Updated dependencies [bff3305aa] -- Updated dependencies [0c2121240] -- Updated dependencies [ef2831dde] -- Updated dependencies [1185919f3] -- Updated dependencies [475fc0aaa] -- Updated dependencies [b47dce06f] -- Updated dependencies [5a1d8dca3] - - @backstage/catalog-model@0.3.0 - - @backstage/plugin-kubernetes-backend@0.2.0 - - @backstage/backend-common@0.3.1 - - @backstage/plugin-catalog-backend@0.2.2 - - @backstage/plugin-scaffolder-backend@0.3.2 - - example-app@0.2.3 - - @backstage/plugin-auth-backend@0.2.3 - - @backstage/plugin-techdocs-backend@0.2.2 - -## 0.2.2 - -### Patch Changes - -- Updated dependencies [1722cb53c] -- Updated dependencies [1722cb53c] -- Updated dependencies [1722cb53c] -- Updated dependencies [f531d307c] -- Updated dependencies [3efd03c0e] -- Updated dependencies [7b37e6834] -- Updated dependencies [8e2effb53] -- Updated dependencies [d33f5157c] - - @backstage/backend-common@0.3.0 - - @backstage/plugin-app-backend@0.3.0 - - @backstage/plugin-catalog-backend@0.2.1 - - example-app@0.2.2 - - @backstage/plugin-scaffolder-backend@0.3.1 - - @backstage/plugin-auth-backend@0.2.2 - - @backstage/plugin-graphql-backend@0.1.3 - - @backstage/plugin-kubernetes-backend@0.1.3 - - @backstage/plugin-proxy-backend@0.2.1 - - @backstage/plugin-rollbar-backend@0.1.3 - - @backstage/plugin-sentry-backend@0.1.3 - - @backstage/plugin-techdocs-backend@0.2.1 - -## 0.2.1 - -### Patch Changes - -- Updated dependencies [752808090] -- Updated dependencies [462876399] -- Updated dependencies [59166e5ec] -- Updated dependencies [33b7300eb] - - @backstage/plugin-auth-backend@0.2.1 - - @backstage/plugin-scaffolder-backend@0.3.0 - - @backstage/backend-common@0.2.1 - - example-app@0.2.1 - -## 0.2.0 - -### Patch Changes - -- 440a17b39: Bump @backstage/catalog-backend and pass the now required UrlReader interface to the plugin -- 6840a68df: Pass GitHub token into Scaffolder GitHub Preparer -- 8c2b76e45: **BREAKING CHANGE** - - The existing loading of additional config files like `app-config.development.yaml` using APP_ENV or NODE_ENV has been removed. - Instead, the CLI and backend process now accept one or more `--config` flags to load config files. - - Without passing any flags, `app-config.yaml` and, if it exists, `app-config.local.yaml` will be loaded. - If passing any `--config ` flags, only those files will be loaded, **NOT** the default `app-config.yaml` one. - - The old behaviour of for example `APP_ENV=development` can be replicated using the following flags: - - ```bash - --config ../../app-config.yaml --config ../../app-config.development.yaml - ``` - -- 7bbeb049f: Change loadBackendConfig to return the config directly -- Updated dependencies [28edd7d29] -- Updated dependencies [819a70229] -- Updated dependencies [3a4236570] -- Updated dependencies [3e254503d] -- Updated dependencies [6d29605db] -- Updated dependencies [e0be86b6f] -- Updated dependencies [f70a52868] -- Updated dependencies [12b5fe940] -- Updated dependencies [5249594c5] -- Updated dependencies [56e4eb589] -- Updated dependencies [b4e5466e1] -- Updated dependencies [6f1768c0f] -- Updated dependencies [e37c0a005] -- Updated dependencies [3472c8be7] -- Updated dependencies [57d555eb2] -- Updated dependencies [61db1ddc6] -- Updated dependencies [81cb94379] -- Updated dependencies [1687b8fbb] -- Updated dependencies [a768a07fb] -- Updated dependencies [a768a07fb] -- Updated dependencies [f00ca3cb8] -- Updated dependencies [0c370c979] -- Updated dependencies [ce1f55398] -- Updated dependencies [e6b00e3af] -- Updated dependencies [9226c2aaa] -- Updated dependencies [6d97d2d6f] -- Updated dependencies [99710b102] -- Updated dependencies [6579769df] -- Updated dependencies [002860e7a] -- Updated dependencies [5adfc005e] -- Updated dependencies [33454c0f2] -- Updated dependencies [183e2a30d] -- Updated dependencies [948052cbb] -- Updated dependencies [65d722455] -- Updated dependencies [b652bf2cc] -- Updated dependencies [4036ff59d] -- Updated dependencies [991a950e0] -- Updated dependencies [512d70973] -- Updated dependencies [8c2b76e45] -- Updated dependencies [8bdf0bcf5] -- Updated dependencies [c926765a2] -- Updated dependencies [5a920c6e4] -- Updated dependencies [2f62e1804] -- Updated dependencies [440a17b39] -- Updated dependencies [fa56f4615] -- Updated dependencies [8afce088a] -- Updated dependencies [4c4eab81b] -- Updated dependencies [22ff8fba5] -- Updated dependencies [36a71d278] -- Updated dependencies [b3d57961c] -- Updated dependencies [6840a68df] -- Updated dependencies [a5cb46bac] -- Updated dependencies [49d70ccab] -- Updated dependencies [1c8c43756] -- Updated dependencies [26e69ab1a] -- Updated dependencies [5e4551e3a] -- Updated dependencies [e142a2767] -- Updated dependencies [e7f5471fd] -- Updated dependencies [e3d063ffa] -- Updated dependencies [440a17b39] -- Updated dependencies [7bbeb049f] - - @backstage/plugin-app-backend@0.2.0 - - @backstage/plugin-auth-backend@0.2.0 - - @backstage/catalog-model@0.2.0 - - @backstage/plugin-scaffolder-backend@0.2.0 - - @backstage/plugin-techdocs-backend@0.2.0 - - @backstage/plugin-catalog-backend@0.2.0 - - @backstage/plugin-proxy-backend@0.2.0 - - @backstage/backend-common@0.2.0 - - example-app@0.2.0 - - @backstage/plugin-graphql-backend@0.1.2 - - @backstage/plugin-kubernetes-backend@0.1.2 - - @backstage/plugin-rollbar-backend@0.1.2 - - @backstage/plugin-sentry-backend@0.1.2 diff --git a/packages/backend-legacy/README.md b/packages/backend-legacy/README.md deleted file mode 100644 index 0de555fe70..0000000000 --- a/packages/backend-legacy/README.md +++ /dev/null @@ -1,61 +0,0 @@ -# example-backend-legacy - -This package is an EXAMPLE of a Backstage backend using the old backend system. - -The main purpose of this package is to provide a test bed for Backstage plugins -that have a backend part. Feel free to experiment locally or within your fork -by adding dependencies and routes to this backend, to try things out. - -By running the `@backstage/create-app` script, you get your own separate Backstage backend. - -## Development - -To run the example backend, first go to the project root and run - -```bash -yarn install -``` - -You should only need to do this once. - -After that, go to the `packages/backend-legacy` directory and run - -```bash -yarn start -``` - -If you want to override any configuration locally, for example adding any secrets, -you can do so in `app-config.local.yaml`. - -The backend starts up on port 7007 per default. - -### Debugging - -The backend is a node process that can be inspected to allow breakpoints and live debugging. To enable this, pass the `--inspect` flag to [backend:dev](https://backstage.io/docs/tooling/cli/build-system#backend-development). - -To debug the backend in [Visual Studio Code](https://code.visualstudio.com/): - -- Enable Auto Attach (⌘ + Shift + P > Toggle Auto Attach > Only With Flag) -- Open a VSCode terminal (Control + `) -- Run the backend from the VSCode terminal: `yarn start-backend:legacy --inspect` - -## Populating The Catalog - -If you want to use the catalog functionality, you need to add so called -locations to the backend. These are places where the backend can find some -entity descriptor data to consume and serve. For more information, see -[Software Catalog Overview - Adding Components to the Catalog](https://backstage.io/docs/features/software-catalog/#adding-components-to-the-catalog). - -For convenience we already include some statically configured example locations -in `app-config.yaml` under `catalog.locations`. For local development you can override these in your own `app-config.local.yaml`. - -## Authentication - -We chose [Passport](http://www.passportjs.org/) as authentication platform due to its comprehensive set of supported authentication [strategies](http://www.passportjs.org/packages/). - -Read more about the [auth-backend](https://github.com/backstage/backstage/blob/master/plugins/auth-backend/README.md) and [how to add a new provider](https://github.com/backstage/backstage/blob/master/docs/auth/add-auth-provider.md) - -## Documentation - -- [Backstage Readme](https://github.com/backstage/backstage/blob/master/README.md) -- [Backstage Documentation](https://backstage.io/docs) diff --git a/packages/backend-legacy/catalog-info.yaml b/packages/backend-legacy/catalog-info.yaml deleted file mode 100644 index a0acd6c653..0000000000 --- a/packages/backend-legacy/catalog-info.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: backstage.io/v1alpha1 -kind: Component -metadata: - name: example-backend-legacy - title: example-backend-legacy -spec: - lifecycle: experimental - type: backstage-backend - owner: maintainers diff --git a/packages/backend-legacy/knip-report.md b/packages/backend-legacy/knip-report.md deleted file mode 100644 index fa173dea2b..0000000000 --- a/packages/backend-legacy/knip-report.md +++ /dev/null @@ -1,27 +0,0 @@ -# Knip report - -## Unused dependencies (12) - -| Name | Location | Severity | -| :------------------------------------------------- | :----------- | :------- | -| @backstage/plugin-scaffolder-backend-module-gitlab | package.json | error | -| @backstage/plugin-scaffolder-backend-module-rails | package.json | error | -| @backstage/plugin-search-backend-module-catalog | package.json | error | -| @backstage/plugin-signals-backend | package.json | error | -| azure-devops-node-api | package.json | error | -| @gitbeaker/node | package.json | error | -| better-sqlite3 | package.json | error | -| @octokit/rest | package.json | error | -| dockerode | package.json | error | -| mysql2 | package.json | error | -| luxon | package.json | error | -| pg | package.json | error | - -## Unused devDependencies (3) - -| Name | Location | Severity | -| :------------------------------- | :----------- | :------- | -| @types/express-serve-static-core | package.json | error | -| @types/dockerode | package.json | error | -| @types/luxon | package.json | error | - diff --git a/packages/backend-legacy/package.json b/packages/backend-legacy/package.json deleted file mode 100644 index eef3fc1bb5..0000000000 --- a/packages/backend-legacy/package.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "name": "example-backend-legacy", - "version": "0.2.109", - "backstage": { - "role": "backend" - }, - "private": true, - "keywords": [ - "backstage" - ], - "homepage": "https://backstage.io", - "repository": { - "type": "git", - "url": "https://github.com/backstage/backstage", - "directory": "packages/backend-legacy" - }, - "license": "Apache-2.0", - "main": "dist/index.cjs.js", - "types": "src/index.ts", - "files": [ - "dist" - ], - "scripts": { - "build": "backstage-cli package build", - "clean": "backstage-cli package clean", - "lint": "backstage-cli package lint", - "start": "backstage-cli package start", - "test": "backstage-cli package test" - }, - "dependencies": { - "@backstage/backend-common": "^0.25.0", - "@backstage/backend-defaults": "workspace:^", - "@backstage/backend-plugin-api": "workspace:^", - "@backstage/catalog-client": "workspace:^", - "@backstage/catalog-model": "workspace:^", - "@backstage/config": "workspace:^", - "@backstage/integration": "workspace:^", - "@backstage/plugin-auth-node": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", - "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^", - "@backstage/plugin-catalog-node": "workspace:^", - "@backstage/plugin-events-backend": "workspace:^", - "@backstage/plugin-events-node": "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-scaffolder-backend-module-confluence-to-markdown": "workspace:^", - "@backstage/plugin-scaffolder-backend-module-gitlab": "workspace:^", - "@backstage/plugin-scaffolder-backend-module-rails": "workspace:^", - "@backstage/plugin-search-backend": "workspace:^", - "@backstage/plugin-search-backend-module-catalog": "workspace:^", - "@backstage/plugin-search-backend-module-elasticsearch": "workspace:^", - "@backstage/plugin-search-backend-module-explore": "workspace:^", - "@backstage/plugin-search-backend-module-pg": "workspace:^", - "@backstage/plugin-search-backend-module-techdocs": "workspace:^", - "@backstage/plugin-search-backend-node": "workspace:^", - "@backstage/plugin-signals-backend": "workspace:^", - "@backstage/plugin-signals-node": "workspace:^", - "@backstage/plugin-techdocs-backend": "workspace:^", - "@gitbeaker/node": "^35.1.0", - "@octokit/rest": "^19.0.3", - "azure-devops-node-api": "^14.0.0", - "better-sqlite3": "^11.0.0", - "dockerode": "^4.0.0", - "express": "^4.17.1", - "express-prom-bundle": "^7.0.0", - "express-promise-router": "^4.1.0", - "luxon": "^3.0.0", - "mysql2": "^3.0.0", - "pg": "^8.11.3", - "pg-connection-string": "^2.3.0", - "prom-client": "^15.0.0", - "winston": "^3.2.1" - }, - "devDependencies": { - "@backstage/cli": "workspace:^", - "@types/dockerode": "^3.3.0", - "@types/express": "^4.17.6", - "@types/express-serve-static-core": "^4.17.5", - "@types/luxon": "^3.0.0" - } -} diff --git a/packages/backend-legacy/src/index.test.ts b/packages/backend-legacy/src/index.test.ts deleted file mode 100644 index 8b41455b27..0000000000 --- a/packages/backend-legacy/src/index.test.ts +++ /dev/null @@ -1,24 +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 { PluginEnvironment } from './types'; - -describe('test', () => { - it('unbreaks the test runner', () => { - const unbreaker = {} as PluginEnvironment; - expect(unbreaker).toBeTruthy(); - }); -}); diff --git a/packages/backend-legacy/src/index.ts b/packages/backend-legacy/src/index.ts deleted file mode 100644 index 1f66616520..0000000000 --- a/packages/backend-legacy/src/index.ts +++ /dev/null @@ -1,155 +0,0 @@ -/* - * 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. - */ - -/* - * Hi! - * - * Note that this is an EXAMPLE Backstage backend. Please check the README. - * - * Happy hacking! - */ - -import Router from 'express-promise-router'; -import { - CacheManager, - createLegacyAuthAdapters, - createServiceBuilder, - DatabaseManager, - getRootLogger, - HostDiscovery, - loadBackendConfig, - notFoundHandler, - ServerTokenManager, - useHotMemoize, -} from '@backstage/backend-common'; -import { Config } from '@backstage/config'; -import healthcheck from './plugins/healthcheck'; -import { metricsHandler, metricsInit } from './metrics'; -import catalog from './plugins/catalog'; -import events from './plugins/events'; -import kubernetes from './plugins/kubernetes'; -import scaffolder from './plugins/scaffolder'; -import permission from './plugins/permission'; -import { PluginEnvironment } from './types'; -import { ServerPermissionClient } from '@backstage/plugin-permission-node'; -import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; -import { DefaultEventsService } from '@backstage/plugin-events-node'; -import { DefaultSignalsService } from '@backstage/plugin-signals-node'; -import { UrlReaders } from '@backstage/backend-defaults/urlReader'; -import { DefaultSchedulerService } from '@backstage/backend-defaults/scheduler'; - -function makeCreateEnv(config: Config) { - const root = getRootLogger(); - const reader = UrlReaders.default({ logger: root, config }); - const discovery = HostDiscovery.fromConfig(config); - const tokenManager = ServerTokenManager.fromConfig(config, { logger: root }); - const { auth } = createLegacyAuthAdapters({ - auth: undefined, - discovery, - tokenManager, - }); - const permissions = ServerPermissionClient.fromConfig(config, { - discovery, - auth, - }); - const databaseManager = DatabaseManager.fromConfig(config, { logger: root }); - const cacheManager = CacheManager.fromConfig(config); - const identity = DefaultIdentityClient.create({ - discovery, - }); - - const eventsService = DefaultEventsService.create({ logger: root, config }); - - const signalsService = DefaultSignalsService.create({ - events: eventsService, - }); - - root.info(`Created UrlReader ${reader}`); - - return (plugin: string): PluginEnvironment => { - const logger = root.child({ type: 'plugin', plugin }); - const database = databaseManager.forPlugin(plugin); - const cache = cacheManager.forPlugin(plugin); - const scheduler = DefaultSchedulerService.create({ - logger, - database, - }); - - return { - logger, - cache, - database, - config, - reader, - events: eventsService, - discovery, - tokenManager, - permissions, - scheduler, - identity, - signals: signalsService, - }; - }; -} - -async function main() { - metricsInit(); - const logger = getRootLogger(); - - logger.info( - `You are running an example backend, which is supposed to be mainly used for contributing back to Backstage. ` + - `Do NOT deploy this to production. Read more here https://backstage.io/docs/getting-started/`, - ); - - const config = await loadBackendConfig({ - argv: process.argv, - logger, - }); - - const createEnv = makeCreateEnv(config); - - const healthcheckEnv = useHotMemoize(module, () => createEnv('healthcheck')); - const catalogEnv = useHotMemoize(module, () => createEnv('catalog')); - const scaffolderEnv = useHotMemoize(module, () => createEnv('scaffolder')); - const kubernetesEnv = useHotMemoize(module, () => createEnv('kubernetes')); - const permissionEnv = useHotMemoize(module, () => createEnv('permission')); - const eventsEnv = useHotMemoize(module, () => createEnv('events')); - - const apiRouter = Router(); - apiRouter.use('/catalog', await catalog(catalogEnv)); - apiRouter.use('/events', await events(eventsEnv)); - apiRouter.use('/scaffolder', await scaffolder(scaffolderEnv)); - apiRouter.use('/kubernetes', await kubernetes(kubernetesEnv)); - apiRouter.use('/permission', await permission(permissionEnv)); - apiRouter.use(notFoundHandler()); - - const service = createServiceBuilder(module) - .loadConfig(config) - .addRouter('', await healthcheck(healthcheckEnv)) - .addRouter('', metricsHandler()) - .addRouter('/api', apiRouter); - - await service.start().catch(err => { - logger.error(err); - process.exit(1); - }); -} - -module.hot?.accept(); -main().catch(error => { - console.error('Backend failed to start up', error); - process.exit(1); -}); diff --git a/packages/backend-legacy/src/metrics.ts b/packages/backend-legacy/src/metrics.ts deleted file mode 100644 index 8834022cd9..0000000000 --- a/packages/backend-legacy/src/metrics.ts +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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 { useHotCleanup } from '@backstage/backend-common'; -import { RequestHandler, Request } from 'express'; -import promBundle from 'express-prom-bundle'; -import prom from 'prom-client'; -import * as url from 'url'; - -/** - * Experimental Prometheus metrics used to benchmark the performance of the - * software catalog. Use this at your own risk. - */ -const rootRegEx = new RegExp('^/([^/]*)/.*'); -const apiRegEx = new RegExp('^/api/([^/]*)/.*'); - -function normalizePath(req: Request): string { - const path = url.parse(req.originalUrl || req.url).pathname || '/'; - - // Capture /api/ and the plugin name - if (apiRegEx.test(path)) { - return path.replace(apiRegEx, '/api/$1'); - } - - // Only the first path segment at root level - return path.replace(rootRegEx, '/$1'); -} - -export function metricsInit(): void { - prom.collectDefaultMetrics({ prefix: 'backstage_' }); -} - -/** - * Adds a /metrics endpoint, register default runtime metrics and instrument the router. - */ -export function metricsHandler(): RequestHandler { - // We can only initialize the metrics once and have to clean them up between hot reloads - useHotCleanup(module, () => prom.register.clear()); - - return promBundle({ - includeMethod: true, - includePath: true, - // Using includePath alone is problematic, as it will include path labels with high - // cardinality (e.g. path params). Instead we would have to template them. However, this - // is difficult, as every backend plugin might use different routes. Instead we only take - // the first directory of the path, to have at least an idea how each plugin performs: - normalizePath, - promClient: { collectDefaultMetrics: {} }, - }); -} diff --git a/packages/backend-legacy/src/plugins/DemoEventBasedEntityProvider.ts b/packages/backend-legacy/src/plugins/DemoEventBasedEntityProvider.ts deleted file mode 100644 index 11d073400a..0000000000 --- a/packages/backend-legacy/src/plugins/DemoEventBasedEntityProvider.ts +++ /dev/null @@ -1,60 +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 { - EntityProvider, - EntityProviderConnection, -} from '@backstage/plugin-catalog-node'; -import { EventParams, EventsService } from '@backstage/plugin-events-node'; -import { Logger } from 'winston'; - -export class DemoEventBasedEntityProvider implements EntityProvider { - private readonly logger: Logger; - private readonly events: EventsService; - private readonly topics: string[]; - - constructor(opts: { - events: EventsService; - logger: Logger; - topics: string[]; - }) { - this.events = opts.events; - this.logger = opts.logger; - this.topics = opts.topics; - } - - async subscribe() { - await this.events.subscribe({ - id: 'DemoEventBasedEntityProvider', - topics: this.topics, - onEvent: async (params: EventParams): Promise => { - this.logger.info( - `onEvent: topic=${params.topic}, metadata=${JSON.stringify( - params.metadata, - )}, payload=${JSON.stringify(params.eventPayload)}`, - ); - }, - }); - } - - async connect(_: EntityProviderConnection): Promise { - // not doing anything here - } - - getProviderName(): string { - return DemoEventBasedEntityProvider.name; - } -} diff --git a/packages/backend-legacy/src/plugins/catalog.ts b/packages/backend-legacy/src/plugins/catalog.ts deleted file mode 100644 index 022b9de4e6..0000000000 --- a/packages/backend-legacy/src/plugins/catalog.ts +++ /dev/null @@ -1,41 +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 { CatalogBuilder } from '@backstage/plugin-catalog-backend'; -import { ScaffolderEntitiesProcessor } from '@backstage/plugin-catalog-backend-module-scaffolder-entity-model'; -import { Router } from 'express'; -import { PluginEnvironment } from '../types'; -import { DemoEventBasedEntityProvider } from './DemoEventBasedEntityProvider'; - -export default async function createPlugin( - env: PluginEnvironment, -): Promise { - const builder = CatalogBuilder.create(env); - builder.addProcessor(new ScaffolderEntitiesProcessor()); - - const demoProvider = new DemoEventBasedEntityProvider({ - events: env.events, - logger: env.logger, - topics: ['example'], - }); - await demoProvider.subscribe(); - builder.addEntityProvider(demoProvider); - - const { processingEngine, router } = await builder.build(); - - await processingEngine.start(); - return router; -} diff --git a/packages/backend-legacy/src/plugins/events.ts b/packages/backend-legacy/src/plugins/events.ts deleted file mode 100644 index fd60a9bb14..0000000000 --- a/packages/backend-legacy/src/plugins/events.ts +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 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 { HttpPostIngressEventPublisher } from '@backstage/plugin-events-backend'; -import { Router } from 'express'; -import { PluginEnvironment } from '../types'; - -export default async function createPlugin( - env: PluginEnvironment, -): Promise { - const eventsRouter = Router(); - - const http = HttpPostIngressEventPublisher.fromConfig({ - config: env.config, - events: env.events, - logger: env.logger, - }); - http.bind(eventsRouter); - - return eventsRouter; -} diff --git a/packages/backend-legacy/src/plugins/healthcheck.ts b/packages/backend-legacy/src/plugins/healthcheck.ts deleted file mode 100644 index d229584e13..0000000000 --- a/packages/backend-legacy/src/plugins/healthcheck.ts +++ /dev/null @@ -1,28 +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 { createStatusCheckRouter } from '@backstage/backend-common'; -import { Router } from 'express'; -import { PluginEnvironment } from '../types'; - -export default async function createPlugin( - env: PluginEnvironment, -): Promise { - return await createStatusCheckRouter({ - logger: env.logger, - path: '/healthcheck', - }); -} diff --git a/packages/backend-legacy/src/plugins/kubernetes.ts b/packages/backend-legacy/src/plugins/kubernetes.ts deleted file mode 100644 index 5581083879..0000000000 --- a/packages/backend-legacy/src/plugins/kubernetes.ts +++ /dev/null @@ -1,34 +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 { KubernetesBuilder } from '@backstage/plugin-kubernetes-backend'; -import { Router } from 'express'; -import { PluginEnvironment } from '../types'; -import { CatalogClient } from '@backstage/catalog-client'; - -export default async function createPlugin( - env: PluginEnvironment, -): Promise { - const catalogApi = new CatalogClient({ discoveryApi: env.discovery }); - const { router } = await KubernetesBuilder.createBuilder({ - logger: env.logger, - config: env.config, - catalogApi, - permissions: env.permissions, - discovery: env.discovery, - }).build(); - return router; -} diff --git a/packages/backend-legacy/src/plugins/permission.ts b/packages/backend-legacy/src/plugins/permission.ts deleted file mode 100644 index fd0a989f06..0000000000 --- a/packages/backend-legacy/src/plugins/permission.ts +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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 { BackstageIdentityResponse } from '@backstage/plugin-auth-node'; -import { createRouter } from '@backstage/plugin-permission-backend'; -import { - AuthorizeResult, - PolicyDecision, -} from '@backstage/plugin-permission-common'; -import { - PermissionPolicy, - PolicyQuery, -} from '@backstage/plugin-permission-node'; -import { Router } from 'express'; -import { PluginEnvironment } from '../types'; - -class ExamplePermissionPolicy implements PermissionPolicy { - async handle( - _request: PolicyQuery, - _user?: BackstageIdentityResponse, - ): Promise { - // some logic to determine if the user is allowed to access the resource - - return { - result: AuthorizeResult.ALLOW, - }; - } -} - -export default async function createPlugin( - env: PluginEnvironment, -): Promise { - return await createRouter({ - config: env.config, - logger: env.logger, - discovery: env.discovery, - policy: new ExamplePermissionPolicy(), - identity: env.identity, - }); -} diff --git a/packages/backend-legacy/src/plugins/scaffolder.ts b/packages/backend-legacy/src/plugins/scaffolder.ts deleted file mode 100644 index a2aa104406..0000000000 --- a/packages/backend-legacy/src/plugins/scaffolder.ts +++ /dev/null @@ -1,63 +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 { CatalogClient } from '@backstage/catalog-client'; -import { - createBuiltinActions, - createRouter, -} from '@backstage/plugin-scaffolder-backend'; -import { Router } from 'express'; -import type { PluginEnvironment } from '../types'; -import { ScmIntegrations } from '@backstage/integration'; -import { createConfluenceToMarkdownAction } from '@backstage/plugin-scaffolder-backend-module-confluence-to-markdown'; - -export default async function createPlugin( - env: PluginEnvironment, -): Promise { - const catalogClient = new CatalogClient({ - discoveryApi: env.discovery, - }); - - const integrations = ScmIntegrations.fromConfig(env.config); - - const builtInActions = createBuiltinActions({ - integrations, - config: env.config, - catalogClient, - reader: env.reader, - }); - - const actions = [ - ...builtInActions, - createConfluenceToMarkdownAction({ - integrations, - config: env.config, - reader: env.reader, - }), - ]; - - return await createRouter({ - logger: env.logger, - config: env.config, - database: env.database, - catalogClient: catalogClient, - reader: env.reader, - discovery: env.discovery, - scheduler: env.scheduler, - permissions: env.permissions, - actions, - }); -} diff --git a/packages/backend-legacy/src/types.ts b/packages/backend-legacy/src/types.ts deleted file mode 100644 index 42a162259f..0000000000 --- a/packages/backend-legacy/src/types.ts +++ /dev/null @@ -1,44 +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 { Config } from '@backstage/config'; -import { PluginCacheManager, TokenManager } from '@backstage/backend-common'; -import { IdentityApi } from '@backstage/plugin-auth-node'; -import { PermissionEvaluator } from '@backstage/plugin-permission-common'; -import { EventsService } from '@backstage/plugin-events-node'; -import { SignalsService } from '@backstage/plugin-signals-node'; -import { - UrlReaderService, - SchedulerService, - DatabaseService, - DiscoveryService, -} from '@backstage/backend-plugin-api'; - -export type PluginEnvironment = { - logger: Logger; - cache: PluginCacheManager; - database: DatabaseService; - config: Config; - reader: UrlReaderService; - discovery: DiscoveryService; - tokenManager: TokenManager; - permissions: PermissionEvaluator; - scheduler: SchedulerService; - identity: IdentityApi; - events: EventsService; - signals: SignalsService; -}; diff --git a/yarn.lock b/yarn.lock index b07e6c1367..b90bb367fa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7179,7 +7179,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-scaffolder-backend-module-confluence-to-markdown@workspace:^, @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@workspace:plugins/scaffolder-backend-module-confluence-to-markdown": +"@backstage/plugin-scaffolder-backend-module-confluence-to-markdown@workspace:plugins/scaffolder-backend-module-confluence-to-markdown": version: 0.0.0-use.local resolution: "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown@workspace:plugins/scaffolder-backend-module-confluence-to-markdown" dependencies: @@ -7335,7 +7335,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-scaffolder-backend-module-rails@workspace:^, @backstage/plugin-scaffolder-backend-module-rails@workspace:plugins/scaffolder-backend-module-rails": +"@backstage/plugin-scaffolder-backend-module-rails@workspace:plugins/scaffolder-backend-module-rails": version: 0.0.0-use.local resolution: "@backstage/plugin-scaffolder-backend-module-rails@workspace:plugins/scaffolder-backend-module-rails" dependencies: @@ -7695,7 +7695,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-search-backend-module-elasticsearch@workspace:^, @backstage/plugin-search-backend-module-elasticsearch@workspace:plugins/search-backend-module-elasticsearch": +"@backstage/plugin-search-backend-module-elasticsearch@workspace:plugins/search-backend-module-elasticsearch": version: 0.0.0-use.local resolution: "@backstage/plugin-search-backend-module-elasticsearch@workspace:plugins/search-backend-module-elasticsearch" dependencies: @@ -7732,7 +7732,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-search-backend-module-pg@workspace:^, @backstage/plugin-search-backend-module-pg@workspace:plugins/search-backend-module-pg": +"@backstage/plugin-search-backend-module-pg@workspace:plugins/search-backend-module-pg": version: 0.0.0-use.local resolution: "@backstage/plugin-search-backend-module-pg@workspace:plugins/search-backend-module-pg" dependencies: @@ -9774,20 +9774,6 @@ __metadata: languageName: node linkType: hard -"@gitbeaker/core@npm:^35.8.1": - version: 35.8.1 - resolution: "@gitbeaker/core@npm:35.8.1" - dependencies: - "@gitbeaker/requester-utils": "npm:^35.8.1" - form-data: "npm:^4.0.0" - li: "npm:^1.3.0" - mime: "npm:^3.0.0" - query-string: "npm:^7.0.0" - xcase: "npm:^2.0.1" - checksum: 10/5e3eda56f74678ceaec6d494318a0fa9b20d587f307e4d269206cf3ffb6363c8361effd43ef465f7b19f467d7a2caea0e95705a5af88c0bede06bfd897a463f0 - languageName: node - linkType: hard - "@gitbeaker/core@npm:^40.6.0": version: 40.6.0 resolution: "@gitbeaker/core@npm:40.6.0" @@ -9810,30 +9796,6 @@ __metadata: languageName: node linkType: hard -"@gitbeaker/node@npm:^35.1.0": - version: 35.8.1 - resolution: "@gitbeaker/node@npm:35.8.1" - dependencies: - "@gitbeaker/core": "npm:^35.8.1" - "@gitbeaker/requester-utils": "npm:^35.8.1" - delay: "npm:^5.0.0" - got: "npm:^11.8.3" - xcase: "npm:^2.0.1" - checksum: 10/1c0acb9e6b352656b3aee91dc4d5673958e8bf0adac152a7c679a21c620b06973ab8276419ee162ea1c127fcb38f60ff3d3cc9fcdcc7bf3bcb9e3b8aa6e3ab78 - languageName: node - linkType: hard - -"@gitbeaker/requester-utils@npm:^35.8.1": - version: 35.8.1 - resolution: "@gitbeaker/requester-utils@npm:35.8.1" - dependencies: - form-data: "npm:^4.0.0" - qs: "npm:^6.10.1" - xcase: "npm:^2.0.1" - checksum: 10/f939216443682303b80b72fa59158cf3fb4a95d31251bb0b4cffa83bd0e0ad0e949645aaaa08fe4dfcd7d06ea5a1547e5688c02b608e8bc76b1e12286935c265 - languageName: node - linkType: hard - "@gitbeaker/requester-utils@npm:^40.6.0": version: 40.6.0 resolution: "@gitbeaker/requester-utils@npm:40.6.0" @@ -26748,13 +26710,6 @@ __metadata: languageName: node linkType: hard -"decode-uri-component@npm:^0.2.0": - version: 0.2.2 - resolution: "decode-uri-component@npm:0.2.2" - checksum: 10/17a0e5fa400bf9ea84432226e252aa7b5e72793e16bf80b907c99b46a799aeacc139ec20ea57121e50c7bd875a1a4365928f884e92abf02e21a5a13790a0f33e - languageName: node - linkType: hard - "decompress-response@npm:^3.3.0": version: 3.3.0 resolution: "decompress-response@npm:3.3.0" @@ -26928,13 +26883,6 @@ __metadata: languageName: node linkType: hard -"delay@npm:^5.0.0": - version: 5.0.0 - resolution: "delay@npm:5.0.0" - checksum: 10/62f151151ecfde0d9afbb8a6be37a6d103c4cb24f35a20ef3fe56f920b0d0d0bb02bc9c0a3084d0179ef669ca332b91155f2ee4d9854622cd2cdba5fc95285f9 - languageName: node - linkType: hard - "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -28949,63 +28897,6 @@ __metadata: languageName: unknown linkType: soft -"example-backend-legacy@workspace:packages/backend-legacy": - version: 0.0.0-use.local - resolution: "example-backend-legacy@workspace:packages/backend-legacy" - dependencies: - "@backstage/backend-common": "npm:^0.25.0" - "@backstage/backend-defaults": "workspace:^" - "@backstage/backend-plugin-api": "workspace:^" - "@backstage/catalog-client": "workspace:^" - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/integration": "workspace:^" - "@backstage/plugin-auth-node": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" - "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^" - "@backstage/plugin-catalog-node": "workspace:^" - "@backstage/plugin-events-backend": "workspace:^" - "@backstage/plugin-events-node": "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-scaffolder-backend-module-confluence-to-markdown": "workspace:^" - "@backstage/plugin-scaffolder-backend-module-gitlab": "workspace:^" - "@backstage/plugin-scaffolder-backend-module-rails": "workspace:^" - "@backstage/plugin-search-backend": "workspace:^" - "@backstage/plugin-search-backend-module-catalog": "workspace:^" - "@backstage/plugin-search-backend-module-elasticsearch": "workspace:^" - "@backstage/plugin-search-backend-module-explore": "workspace:^" - "@backstage/plugin-search-backend-module-pg": "workspace:^" - "@backstage/plugin-search-backend-module-techdocs": "workspace:^" - "@backstage/plugin-search-backend-node": "workspace:^" - "@backstage/plugin-signals-backend": "workspace:^" - "@backstage/plugin-signals-node": "workspace:^" - "@backstage/plugin-techdocs-backend": "workspace:^" - "@gitbeaker/node": "npm:^35.1.0" - "@octokit/rest": "npm:^19.0.3" - "@types/dockerode": "npm:^3.3.0" - "@types/express": "npm:^4.17.6" - "@types/express-serve-static-core": "npm:^4.17.5" - "@types/luxon": "npm:^3.0.0" - azure-devops-node-api: "npm:^14.0.0" - better-sqlite3: "npm:^11.0.0" - dockerode: "npm:^4.0.0" - express: "npm:^4.17.1" - express-prom-bundle: "npm:^7.0.0" - express-promise-router: "npm:^4.1.0" - luxon: "npm:^3.0.0" - mysql2: "npm:^3.0.0" - pg: "npm:^8.11.3" - pg-connection-string: "npm:^2.3.0" - prom-client: "npm:^15.0.0" - winston: "npm:^3.2.1" - languageName: unknown - linkType: soft - "example-backend@workspace:packages/backend": version: 0.0.0-use.local resolution: "example-backend@workspace:packages/backend" @@ -29179,20 +29070,6 @@ __metadata: languageName: node linkType: hard -"express-prom-bundle@npm:^7.0.0": - version: 7.0.2 - resolution: "express-prom-bundle@npm:7.0.2" - dependencies: - "@types/express": "npm:^4.17.21" - express: "npm:^4.18.2" - on-finished: "npm:^2.3.0" - url-value-parser: "npm:^2.0.0" - peerDependencies: - prom-client: ">=15.0.0" - checksum: 10/19d95252eaaaedae1a05d90bbb96cbcc60e82e7710baa18810bd9c327b864b743f4e16bc2a5b3f7e51dcd505ac86db4fd9391c72c11cf6c0dc2c8df893870e02 - languageName: node - linkType: hard - "express-promise-router@npm:^4.1.0, express-promise-router@npm:^4.1.1": version: 4.1.1 resolution: "express-promise-router@npm:4.1.1" @@ -29628,13 +29505,6 @@ __metadata: languageName: node linkType: hard -"filter-obj@npm:^1.1.0": - version: 1.1.0 - resolution: "filter-obj@npm:1.1.0" - checksum: 10/9d681939eec2b4b129cb4f307b7e93d954a0657421d4e5357d86093b26d3f4f570909ed43717dcfd62428b3cf8cddd9841b35f9d40d12ac62cfabaa677942593 - languageName: node - linkType: hard - "finalhandler@npm:1.1.2": version: 1.1.2 resolution: "finalhandler@npm:1.1.2" @@ -30886,7 +30756,7 @@ __metadata: languageName: node linkType: hard -"got@npm:^11.7.0, got@npm:^11.8.3": +"got@npm:^11.7.0": version: 11.8.6 resolution: "got@npm:11.8.6" dependencies: @@ -34861,13 +34731,6 @@ __metadata: languageName: node linkType: hard -"li@npm:^1.3.0": - version: 1.3.0 - resolution: "li@npm:1.3.0" - checksum: 10/825a1e132da5263e16cf24df92b787c5030c6549be66a8b2087e74ca56474aa681183f3a11b5f14e61d5d583af5f776ecf3b320ad689842511f36030339f6a0c - languageName: node - linkType: hard - "libsodium-wrappers@npm:^0.7.11": version: 0.7.15 resolution: "libsodium-wrappers@npm:0.7.15" @@ -40742,18 +40605,6 @@ __metadata: languageName: node linkType: hard -"query-string@npm:^7.0.0": - version: 7.0.0 - resolution: "query-string@npm:7.0.0" - dependencies: - decode-uri-component: "npm:^0.2.0" - filter-obj: "npm:^1.1.0" - split-on-first: "npm:^1.0.0" - strict-uri-encode: "npm:^2.0.0" - checksum: 10/7f5031ede27d31448a08ec36255f0a6a1410a966456e493a651ccaf0605365c9b0f04f95d6c7d47c638a4502e0530a710812b90b597e5d99e2075af2c8c7da02 - languageName: node - linkType: hard - "querystring-es3@npm:^0.2.1": version: 0.2.1 resolution: "querystring-es3@npm:0.2.1" @@ -43940,13 +43791,6 @@ __metadata: languageName: node linkType: hard -"split-on-first@npm:^1.0.0": - version: 1.1.0 - resolution: "split-on-first@npm:1.1.0" - checksum: 10/16ff85b54ddcf17f9147210a4022529b343edbcbea4ce977c8f30e38408b8d6e0f25f92cd35b86a524d4797f455e29ab89eb8db787f3c10708e0b47ebf528d30 - languageName: node - linkType: hard - "split2@npm:^3.0.0": version: 3.2.2 resolution: "split2@npm:3.2.2" @@ -44329,13 +44173,6 @@ __metadata: languageName: node linkType: hard -"strict-uri-encode@npm:^2.0.0": - version: 2.0.0 - resolution: "strict-uri-encode@npm:2.0.0" - checksum: 10/eaac4cf978b6fbd480f1092cab8b233c9b949bcabfc9b598dd79a758f7243c28765ef7639c876fa72940dac687181b35486ea01ff7df3e65ce3848c64822c581 - languageName: node - linkType: hard - "string-argv@npm:^0.3.2, string-argv@npm:~0.3.1": version: 0.3.2 resolution: "string-argv@npm:0.3.2" @@ -46693,13 +46530,6 @@ __metadata: languageName: node linkType: hard -"url-value-parser@npm:^2.0.0": - version: 2.0.3 - resolution: "url-value-parser@npm:2.0.3" - checksum: 10/f13a2693b633896329956372a58a1c0f6666d72b87c85dff05564a132c1a5d2a698ca3097a481bf06afc1f5007c08ec67499136736c25c38f3ee84e877d72732 - languageName: node - linkType: hard - "url@npm:^0.11.0, url@npm:^0.11.4": version: 0.11.4 resolution: "url@npm:0.11.4" From dc949c8073a09c1e393f83b21ba371f6cc018450 Mon Sep 17 00:00:00 2001 From: benjdlambert Date: Thu, 17 Apr 2025 10:18:40 +0200 Subject: [PATCH 50/61] `templateExtensions` -> `templatingExtensions` Signed-off-by: benjdlambert --- plugins/scaffolder-backend/src/service/router.test.ts | 4 ++-- plugins/scaffolder-backend/src/service/router.ts | 2 +- plugins/scaffolder-react/report.api.md | 4 ++-- plugins/scaffolder-react/src/api/types.ts | 4 ++-- plugins/scaffolder/report.api.md | 4 ++-- plugins/scaffolder/src/api.ts | 4 ++-- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/plugins/scaffolder-backend/src/service/router.test.ts b/plugins/scaffolder-backend/src/service/router.test.ts index f97bad35c8..8afc5230da 100644 --- a/plugins/scaffolder-backend/src/service/router.test.ts +++ b/plugins/scaffolder-backend/src/service/router.test.ts @@ -360,10 +360,10 @@ describe.each([ }); }); - describe('GET /v2/template-extensions', () => { + describe('GET /v2/temlating-extensions', () => { it('lists template filters and globals', async () => { const response = await request(app) - .get('/v2/template-extensions') + .get('/v2/temlating-extensions') .send(); expect(response.status).toEqual(200); const integrations = ScmIntegrations.fromConfig(config); diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index def470252d..e5c384987a 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -1115,7 +1115,7 @@ export async function createRouter( res.status(200).json({ results }); }) - .get('/v2/template-extensions', async (_req, res) => { + .get('/v2/templating-extensions', async (_req, res) => { res.status(200).json({ filters: { ...extractFilterMetadata(createDefaultFilters({ integrations })), diff --git a/plugins/scaffolder-react/report.api.md b/plugins/scaffolder-react/report.api.md index cd8711b18f..d66ec36acb 100644 --- a/plugins/scaffolder-react/report.api.md +++ b/plugins/scaffolder-react/report.api.md @@ -166,7 +166,7 @@ export type LayoutTemplate = NonNullable< export type ListActionsResponse = Array; // @public -export type ListTemplateExtensionsResponse = { +export type ListTemplatingExtensionsResponse = { filters: Record; globals: { functions: Record; @@ -247,7 +247,7 @@ export interface ScaffolderApi { tasks: ScaffolderTask[]; totalTasks?: number; }>; - listTemplateExtensions?(): Promise; + listTemplatingExtensions?(): Promise; retry?(taskId: string): Promise; scaffold( options: ScaffolderScaffoldOptions, diff --git a/plugins/scaffolder-react/src/api/types.ts b/plugins/scaffolder-react/src/api/types.ts index cb73704010..acc980afdc 100644 --- a/plugins/scaffolder-react/src/api/types.ts +++ b/plugins/scaffolder-react/src/api/types.ts @@ -129,7 +129,7 @@ export type TemplateGlobalValue = { * * @public */ -export type ListTemplateExtensionsResponse = { +export type ListTemplatingExtensionsResponse = { filters: Record; globals: { functions: Record; @@ -300,7 +300,7 @@ export interface ScaffolderApi { /** * Returns a structure describing the available templating extensions. */ - listTemplateExtensions?(): Promise; + listTemplatingExtensions?(): Promise; streamLogs(options: ScaffolderStreamLogsOptions): Observable; diff --git a/plugins/scaffolder/report.api.md b/plugins/scaffolder/report.api.md index a685e8163f..927599b91f 100644 --- a/plugins/scaffolder/report.api.md +++ b/plugins/scaffolder/report.api.md @@ -25,7 +25,7 @@ import { JSX as JSX_2 } from 'react/jsx-runtime'; import { LayoutOptions as LayoutOptions_2 } from '@backstage/plugin-scaffolder-react'; import { LayoutTemplate as LayoutTemplate_2 } from '@backstage/plugin-scaffolder-react'; import { ListActionsResponse as ListActionsResponse_2 } from '@backstage/plugin-scaffolder-react'; -import { ListTemplateExtensionsResponse } from '@backstage/plugin-scaffolder-react'; +import { ListTemplatingExtensionsResponse } from '@backstage/plugin-scaffolder-react'; import { LogEvent as LogEvent_2 } from '@backstage/plugin-scaffolder-react'; import { Observable } from '@backstage/types'; import { PathParams } from '@backstage/core-plugin-api'; @@ -561,7 +561,7 @@ export class ScaffolderClient implements ScaffolderApi_2 { totalTasks?: number; }>; // (undocumented) - listTemplateExtensions(): Promise; + listTemplatingExtensions(): Promise; // (undocumented) retry?(taskId: string): Promise; // (undocumented) diff --git a/plugins/scaffolder/src/api.ts b/plugins/scaffolder/src/api.ts index 85450b012a..1121593e2d 100644 --- a/plugins/scaffolder/src/api.ts +++ b/plugins/scaffolder/src/api.ts @@ -24,7 +24,7 @@ import { ResponseError } from '@backstage/errors'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { ListActionsResponse, - ListTemplateExtensionsResponse, + ListTemplatingExtensionsResponse, LogEvent, ScaffolderApi, ScaffolderDryRunOptions, @@ -325,7 +325,7 @@ export class ScaffolderClient implements ScaffolderApi { return await response.json(); } - async listTemplateExtensions(): Promise { + async listTemplatingExtensions(): Promise { const baseUrl = await this.discoveryApi.getBaseUrl('scaffolder'); const response = await this.fetchApi.fetch( `${baseUrl}/v2/template-extensions`, From 36ae651c5b03dfa15b61ab5ede62fc94f32d1f18 Mon Sep 17 00:00:00 2001 From: benjdlambert Date: Thu, 17 Apr 2025 10:19:40 +0200 Subject: [PATCH 51/61] chore: added changetset Signed-off-by: benjdlambert --- .changeset/shiny-symbols-grow.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/shiny-symbols-grow.md diff --git a/.changeset/shiny-symbols-grow.md b/.changeset/shiny-symbols-grow.md new file mode 100644 index 0000000000..ea283a2f97 --- /dev/null +++ b/.changeset/shiny-symbols-grow.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder': patch +--- + +Fixing a bug where the name for `templatingExtensions` was incorrect From e4706de3ab52d73cda112eec6fb7a201c5d72b9b Mon Sep 17 00:00:00 2001 From: benjdlambert Date: Thu, 17 Apr 2025 10:22:36 +0200 Subject: [PATCH 52/61] chore: make pre Signed-off-by: benjdlambert --- .changeset/pre.json | 203 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 .changeset/pre.json diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 0000000000..7e1a48a83a --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,203 @@ +{ + "mode": "pre", + "tag": "next", + "initialVersions": { + "example-app": "0.2.108", + "@backstage/app-defaults": "1.6.1", + "example-app-next": "0.0.22", + "app-next-example-plugin": "0.0.22", + "example-backend": "0.0.37", + "@backstage/backend-app-api": "1.2.2", + "@backstage/backend-defaults": "0.9.0", + "@backstage/backend-dev-utils": "0.1.5", + "@backstage/backend-dynamic-feature-service": "0.6.2", + "@backstage/backend-openapi-utils": "0.5.2", + "@backstage/backend-plugin-api": "1.3.0", + "@backstage/backend-test-utils": "1.4.0", + "@backstage/canon": "0.3.0", + "@backstage/catalog-client": "1.9.1", + "@backstage/catalog-model": "1.7.3", + "@backstage/cli": "0.32.0", + "@backstage/cli-common": "0.1.15", + "@backstage/cli-node": "0.2.13", + "@backstage/codemods": "0.1.52", + "@backstage/config": "1.3.2", + "@backstage/config-loader": "1.10.0", + "@backstage/core-app-api": "1.16.1", + "@backstage/core-compat-api": "0.4.1", + "@backstage/core-components": "0.17.1", + "@backstage/core-plugin-api": "1.10.6", + "@backstage/create-app": "0.6.1", + "@backstage/dev-utils": "1.1.9", + "e2e-test": "0.2.27", + "@backstage/e2e-test-utils": "0.1.1", + "@backstage/errors": "1.2.7", + "@backstage/eslint-plugin": "0.1.10", + "@backstage/frontend-app-api": "0.11.1", + "@backstage/frontend-defaults": "0.2.1", + "@backstage/frontend-dynamic-feature-loader": "0.1.0", + "@internal/frontend": "0.0.8", + "@backstage/frontend-plugin-api": "0.10.1", + "@backstage/frontend-test-utils": "0.3.1", + "@backstage/integration": "1.16.3", + "@backstage/integration-aws-node": "0.1.15", + "@backstage/integration-react": "1.2.6", + "@internal/opaque": "0.0.1", + "@backstage/release-manifests": "0.0.12", + "@backstage/repo-tools": "0.13.2", + "@internal/scaffolder": "0.0.8", + "@techdocs/cli": "1.9.2", + "techdocs-cli-embedded-app": "0.2.107", + "@backstage/test-utils": "1.7.7", + "@backstage/theme": "0.6.5", + "@backstage/types": "1.2.1", + "@backstage/version-bridge": "1.0.11", + "yarn-plugin-backstage": "0.0.4", + "@backstage/plugin-api-docs": "0.12.6", + "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.10", + "@backstage/plugin-app": "0.1.8", + "@backstage/plugin-app-backend": "0.5.1", + "@backstage/plugin-app-node": "0.1.32", + "@backstage/plugin-app-visualizer": "0.1.18", + "@backstage/plugin-auth-backend": "0.24.5", + "@backstage/plugin-auth-backend-module-atlassian-provider": "0.4.2", + "@backstage/plugin-auth-backend-module-auth0-provider": "0.2.2", + "@backstage/plugin-auth-backend-module-aws-alb-provider": "0.4.2", + "@backstage/plugin-auth-backend-module-azure-easyauth-provider": "0.2.7", + "@backstage/plugin-auth-backend-module-bitbucket-provider": "0.3.2", + "@backstage/plugin-auth-backend-module-bitbucket-server-provider": "0.2.2", + "@backstage/plugin-auth-backend-module-cloudflare-access-provider": "0.4.2", + "@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.4.2", + "@backstage/plugin-auth-backend-module-github-provider": "0.3.2", + "@backstage/plugin-auth-backend-module-gitlab-provider": "0.3.2", + "@backstage/plugin-auth-backend-module-google-provider": "0.3.2", + "@backstage/plugin-auth-backend-module-guest-provider": "0.2.7", + "@backstage/plugin-auth-backend-module-microsoft-provider": "0.3.2", + "@backstage/plugin-auth-backend-module-oauth2-provider": "0.4.2", + "@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "0.2.7", + "@backstage/plugin-auth-backend-module-oidc-provider": "0.4.2", + "@backstage/plugin-auth-backend-module-okta-provider": "0.2.2", + "@backstage/plugin-auth-backend-module-onelogin-provider": "0.3.2", + "@backstage/plugin-auth-backend-module-pinniped-provider": "0.3.2", + "@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.5.2", + "@backstage/plugin-auth-node": "0.6.2", + "@backstage/plugin-auth-react": "0.1.14", + "@backstage/plugin-bitbucket-cloud-common": "0.2.29", + "@backstage/plugin-catalog": "1.29.0", + "@backstage/plugin-catalog-backend": "1.32.1", + "@backstage/plugin-catalog-backend-module-aws": "0.4.10", + "@backstage/plugin-catalog-backend-module-azure": "0.3.4", + "@backstage/plugin-catalog-backend-module-backstage-openapi": "0.5.1", + "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.4.7", + "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.4.0", + "@backstage/plugin-catalog-backend-module-gcp": "0.3.7", + "@backstage/plugin-catalog-backend-module-gerrit": "0.3.1", + "@backstage/plugin-catalog-backend-module-github": "0.8.0", + "@backstage/plugin-catalog-backend-module-github-org": "0.3.9", + "@backstage/plugin-catalog-backend-module-gitlab": "0.6.5", + "@backstage/plugin-catalog-backend-module-gitlab-org": "0.2.8", + "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.6.5", + "@backstage/plugin-catalog-backend-module-ldap": "0.11.4", + "@backstage/plugin-catalog-backend-module-logs": "0.1.9", + "@backstage/plugin-catalog-backend-module-msgraph": "0.6.9", + "@backstage/plugin-catalog-backend-module-openapi": "0.2.9", + "@backstage/plugin-catalog-backend-module-puppetdb": "0.2.9", + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.2.7", + "@backstage/plugin-catalog-backend-module-unprocessed": "0.5.7", + "@backstage/plugin-catalog-common": "1.1.3", + "@backstage/plugin-catalog-graph": "0.4.18", + "@backstage/plugin-catalog-import": "0.12.13", + "@backstage/plugin-catalog-node": "1.16.3", + "@backstage/plugin-catalog-react": "1.17.0", + "@backstage/plugin-catalog-unprocessed-entities": "0.2.16", + "@backstage/plugin-catalog-unprocessed-entities-common": "0.0.7", + "@backstage/plugin-config-schema": "0.1.67", + "@backstage/plugin-devtools": "0.1.26", + "@backstage/plugin-devtools-backend": "0.5.4", + "@backstage/plugin-devtools-common": "0.1.15", + "@backstage/plugin-events-backend": "0.5.1", + "@backstage/plugin-events-backend-module-aws-sqs": "0.4.10", + "@backstage/plugin-events-backend-module-azure": "0.2.19", + "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.2.19", + "@backstage/plugin-events-backend-module-bitbucket-server": "0.1.0", + "@backstage/plugin-events-backend-module-gerrit": "0.2.19", + "@backstage/plugin-events-backend-module-github": "0.3.0", + "@backstage/plugin-events-backend-module-gitlab": "0.3.0", + "@backstage/plugin-events-backend-test-utils": "0.1.43", + "@backstage/plugin-events-node": "0.4.10", + "@internal/plugin-todo-list": "1.0.38", + "@internal/plugin-todo-list-backend": "1.0.38", + "@internal/plugin-todo-list-common": "1.0.24", + "@backstage/plugin-gateway-backend": "1.0.0", + "@backstage/plugin-home": "0.8.7", + "@backstage/plugin-home-react": "0.1.25", + "@backstage/plugin-kubernetes": "0.12.6", + "@backstage/plugin-kubernetes-backend": "0.19.5", + "@backstage/plugin-kubernetes-cluster": "0.0.24", + "@backstage/plugin-kubernetes-common": "0.9.4", + "@backstage/plugin-kubernetes-node": "0.2.5", + "@backstage/plugin-kubernetes-react": "0.5.6", + "@backstage/plugin-notifications": "0.5.4", + "@backstage/plugin-notifications-backend": "0.5.5", + "@backstage/plugin-notifications-backend-module-email": "0.3.8", + "@backstage/plugin-notifications-backend-module-slack": "0.1.0", + "@backstage/plugin-notifications-common": "0.0.8", + "@backstage/plugin-notifications-node": "0.2.14", + "@backstage/plugin-org": "0.6.38", + "@backstage/plugin-org-react": "0.1.37", + "@backstage/plugin-permission-backend": "0.6.0", + "@backstage/plugin-permission-backend-module-allow-all-policy": "0.2.7", + "@backstage/plugin-permission-common": "0.8.4", + "@backstage/plugin-permission-node": "0.9.1", + "@backstage/plugin-permission-react": "0.4.33", + "@backstage/plugin-proxy-backend": "0.6.1", + "@backstage/plugin-proxy-node": "0.1.3", + "@backstage/plugin-scaffolder": "1.30.0", + "@backstage/plugin-scaffolder-backend": "1.32.0", + "@backstage/plugin-scaffolder-backend-module-azure": "0.2.8", + "@backstage/plugin-scaffolder-backend-module-bitbucket": "0.3.9", + "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": "0.2.8", + "@backstage/plugin-scaffolder-backend-module-bitbucket-server": "0.2.8", + "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.3.8", + "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.3.9", + "@backstage/plugin-scaffolder-backend-module-gcp": "0.2.8", + "@backstage/plugin-scaffolder-backend-module-gerrit": "0.2.8", + "@backstage/plugin-scaffolder-backend-module-gitea": "0.2.8", + "@backstage/plugin-scaffolder-backend-module-github": "0.7.0", + "@backstage/plugin-scaffolder-backend-module-gitlab": "0.9.0", + "@backstage/plugin-scaffolder-backend-module-notifications": "0.1.9", + "@backstage/plugin-scaffolder-backend-module-rails": "0.5.8", + "@backstage/plugin-scaffolder-backend-module-sentry": "0.2.8", + "@backstage/plugin-scaffolder-backend-module-yeoman": "0.4.9", + "@backstage/plugin-scaffolder-common": "1.5.10", + "@backstage/plugin-scaffolder-node": "0.8.1", + "@backstage/plugin-scaffolder-node-test-utils": "0.2.1", + "@backstage/plugin-scaffolder-react": "1.15.0", + "@backstage/plugin-search": "1.4.25", + "@backstage/plugin-search-backend": "2.0.1", + "@backstage/plugin-search-backend-module-catalog": "0.3.3", + "@backstage/plugin-search-backend-module-elasticsearch": "1.7.1", + "@backstage/plugin-search-backend-module-explore": "0.3.1", + "@backstage/plugin-search-backend-module-pg": "0.5.43", + "@backstage/plugin-search-backend-module-stack-overflow-collator": "0.3.8", + "@backstage/plugin-search-backend-module-techdocs": "0.4.1", + "@backstage/plugin-search-backend-node": "1.3.10", + "@backstage/plugin-search-common": "1.2.17", + "@backstage/plugin-search-react": "1.8.8", + "@backstage/plugin-signals": "0.0.18", + "@backstage/plugin-signals-backend": "0.3.3", + "@backstage/plugin-signals-node": "0.1.19", + "@backstage/plugin-signals-react": "0.0.12", + "@backstage/plugin-techdocs": "1.12.5", + "@backstage/plugin-techdocs-addons-test-utils": "1.0.47", + "@backstage/plugin-techdocs-backend": "2.0.1", + "@backstage/plugin-techdocs-common": "0.1.0", + "@backstage/plugin-techdocs-module-addons-contrib": "1.1.23", + "@backstage/plugin-techdocs-node": "1.13.2", + "@backstage/plugin-techdocs-react": "1.2.16", + "@backstage/plugin-user-settings": "0.8.21", + "@backstage/plugin-user-settings-backend": "0.3.1", + "@backstage/plugin-user-settings-common": "0.0.1" + }, + "changesets": [] +} From db72bc960ddeff40d94def366311e5b09ac6e50f Mon Sep 17 00:00:00 2001 From: benjdlambert Date: Thu, 17 Apr 2025 10:21:27 +0200 Subject: [PATCH 53/61] chore: Fix the name of the route in the test Signed-off-by: benjdlambert --- .changeset/shiny-symbols-grow.md | 2 +- plugins/scaffolder-backend/src/service/router.test.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.changeset/shiny-symbols-grow.md b/.changeset/shiny-symbols-grow.md index ea283a2f97..18dd3b8b1f 100644 --- a/.changeset/shiny-symbols-grow.md +++ b/.changeset/shiny-symbols-grow.md @@ -4,4 +4,4 @@ '@backstage/plugin-scaffolder': patch --- -Fixing a bug where the name for `templatingExtensions` was incorrect +Fixing a bug where the name for `templatingExtensions` was incorrectly set to `templateExtensions` diff --git a/plugins/scaffolder-backend/src/service/router.test.ts b/plugins/scaffolder-backend/src/service/router.test.ts index 8afc5230da..d26cc955b3 100644 --- a/plugins/scaffolder-backend/src/service/router.test.ts +++ b/plugins/scaffolder-backend/src/service/router.test.ts @@ -360,10 +360,10 @@ describe.each([ }); }); - describe('GET /v2/temlating-extensions', () => { + describe('GET /v2/templating-extensions', () => { it('lists template filters and globals', async () => { const response = await request(app) - .get('/v2/temlating-extensions') + .get('/v2/templating-extensions') .send(); expect(response.status).toEqual(200); const integrations = ScmIntegrations.fromConfig(config); From 7d6c4d3e1afe7ff1fb6df9c890bc35e7c7da705e Mon Sep 17 00:00:00 2001 From: Ben Lambert Date: Thu, 17 Apr 2025 11:36:54 +0200 Subject: [PATCH 54/61] Revert "fix(scaffolder): make EntityPicker display consistent between dropdown and selected value" Signed-off-by: benjdlambert --- .changeset/entity-picker-display-fix.md | 5 - .../fields/EntityPicker/EntityPicker.test.tsx | 93 ------------------- .../fields/EntityPicker/EntityPicker.tsx | 2 +- 3 files changed, 1 insertion(+), 99 deletions(-) delete mode 100644 .changeset/entity-picker-display-fix.md diff --git a/.changeset/entity-picker-display-fix.md b/.changeset/entity-picker-display-fix.md deleted file mode 100644 index f5a3f2b0bc..0000000000 --- a/.changeset/entity-picker-display-fix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -Fixed `EntityPicker` display inconsistency between dropdown options and selected value. diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx index 2424d76f5a..ab3092e3ed 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx @@ -812,97 +812,4 @@ describe('', () => { expect(onChange).toHaveBeenCalledWith(undefined); }); }); - - describe('rendering consistency', () => { - beforeEach(() => { - uiSchema = { 'ui:options': {} }; - props = { - onChange, - schema, - required, - uiSchema, - rawErrors, - formData: 'group:default/team-a', - } as unknown as FieldProps; - }); - - it('renders consistent entity display between dropdown and selected value', async () => { - // Mock the presentation API to return specific values for testing - const mockEntityPresentation = { - entityRef: 'group:default/team-a', - primaryTitle: 'Team A', - }; - - // Create a catalog API that includes the specific test entity - const testCatalogApi = catalogApiMock.mock({ - getEntities: jest.fn().mockResolvedValue({ - items: [makeEntity('Group', 'default', 'team-a')], - }), - }); - - // Create mock entity presentation mapping - const entityRefToPresentation = new Map(); - entityRefToPresentation.set( - 'group:default/team-a', - mockEntityPresentation, - ); - - const renderResult = await renderInTestApp( - - - , - ); - - // Wait for the entity data to load and be processed - // This is needed because the EntityPicker uses useAsync - await new Promise(resolve => setTimeout(resolve, 100)); - - // Force a re-render to apply the mocked data - renderResult.rerender( - - - , - ); - - // Force update to complete - await new Promise(resolve => setTimeout(resolve, 100)); - - // Verify the selected value shows the correct display - const input = screen.getByRole('textbox'); - expect(input).toHaveValue('Team A'); - - // Open the dropdown - fireEvent.mouseDown(input); - - // Check if dropdown shows the same representation - const option = await screen.findByText('Team A'); - expect(option).toBeInTheDocument(); - }); - }); }); diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx index fa62795b40..b15c197945 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx @@ -204,7 +204,7 @@ export const EntityPicker = (props: EntityPickerProps) => { typeof option === 'string' ? option : entities?.entityRefToPresentation.get(stringifyEntityRef(option)) - ?.primaryTitle || stringifyEntityRef(option) + ?.entityRef! } autoSelect freeSolo={allowArbitraryValues} From b50b555f5f7dda8561a93bad8dc01c708ff22c12 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Thu, 17 Apr 2025 18:48:27 -0400 Subject: [PATCH 55/61] fix ci Signed-off-by: aramissennyeydd --- .github/workflows/verify_microsite.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/verify_microsite.yml b/.github/workflows/verify_microsite.yml index 068cdbd46d..ce3be0cf42 100644 --- a/.github/workflows/verify_microsite.yml +++ b/.github/workflows/verify_microsite.yml @@ -245,9 +245,6 @@ jobs: - name: clear generated docs run: git clean -fdx docs/ - - name: print directry contents - run: ls docs/reference - - name: build API reference run: yarn build:api-docs From 14bddfd10f9ce718aeb03976bc22a5a03e6be637 Mon Sep 17 00:00:00 2001 From: Gabriel Dugny Date: Fri, 18 Apr 2025 17:03:01 +0200 Subject: [PATCH 56/61] docs: Fix typos Signed-off-by: Gabriel Dugny --- ADOPTERS.md | 8 ++++---- beps/0002-dynamic-frontend-plugins/README.md | 4 ++-- canon-docs/src/app/(docs)/theme/theming/page.mdx | 6 +++--- contrib/docs/tutorials/aws-alb-aad-oidc-auth.md | 2 +- contrib/docs/tutorials/jsx-migration-codemod.md | 2 +- .../building-plugins-and-modules/08-migrating.md | 2 +- docs/features/kubernetes/authenticationstrategy.md | 2 +- docs/features/software-catalog/faq.md | 2 +- docs/features/software-templates/experimental.md | 2 +- .../writing-custom-field-extensions.md | 2 +- .../software-templates/writing-templates.md | 2 +- docs/features/techdocs/how-to-guides.md | 2 +- docs/frontend-system/utility-apis/02-creating.md | 4 ++-- .../blog/2023-05-06-backstage-deploy-alpha.mdx | 2 +- .../blog/2024-09-24-dynatrace-adopter-spotlight.mdx | 2 +- ... backstage_catalog_security_vulnerabilities.png} | Bin microsite/data/plugins/backchat.yaml | 2 +- microsite/data/plugins/harness-iacm.yaml | 2 +- microsite/data/plugins/statuspage.yaml | 2 +- microsite/src/pages/community/index.tsx | 4 +++- 20 files changed, 28 insertions(+), 26 deletions(-) rename microsite/blog/assets/2024-09-24/{backstage_catalog_security_vulnerabilites.png => backstage_catalog_security_vulnerabilities.png} (100%) diff --git a/ADOPTERS.md b/ADOPTERS.md index 2db4d5f9b9..e97c213adf 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -108,7 +108,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [Beez Innovation Labs Pvt. Ltd](https://www.beezlabs.com/) | [Karthikeyan Venkatesan](https://github.com/karthikeyan23) | Developer portal with software catalog, scaffolding, tech docs, templates, and infra. | | [Agorapulse](https://www.agorapulse.com/) | [@jvdrean](https://github.com/jvdrean) | Developer portal with software catalog, documentation, monitoring, runbooks, tech radar and more. | | [Wistia](https://wistia.com/) | [@qrush](https://github.com/qrush), [@okize](https://github.com/okize) | Internal Developer Portal, service catalog, tech docs and more | -| [SIX](https://www.six-group.com/) | [@jbadeau](https://github.com/jbadeau), [@tomassatka](https://github.com/tomassatka) | Internal DevOps portal hosting our software and dataset catalog, as well as custom plugins for observability, service virtualization, deployments, incident managment and quality metrics. | +| [SIX](https://www.six-group.com/) | [@jbadeau](https://github.com/jbadeau), [@tomassatka](https://github.com/tomassatka) | Internal DevOps portal hosting our software and dataset catalog, as well as custom plugins for observability, service virtualization, deployments, incident management and quality metrics. | | [Raiffeisen Bank International](https://www.rbinternational.com/) | [Daniel Baumgartner](https://github.com/dabarbi) | From developers for developers: software catalog, techdocs and heavy use of scaffolder to drive reuse on engineering level forward. Part of inner source initiative. Multi national setup coming. | | [Spread Group](https://www.spreadgroup.com/) | [Luna Stadler](https://github.com/heyLu), [Iván González](https://github.com/ivangonzalezacuna) | Internal Developer Portal, an overview of all running software, architecture documentation and more; replacing and unifying a variety of internal tools. | | [RD Station](https://rdstation.com) | [Rogerio Angeliski](https://github.com/angeliski), [Paula Assis](https://github.com/paulassis), [Guilherme Eric](https://github.com/guilhermeeric), [Daniela Adamatti](https://github.com/daniadamatti), [Luana Negreiros](https://github.com/luananegreiros) | Developer portal, scaffolding, services catalog. We are looking to centralize automations and information for the whole engineering team . | @@ -206,7 +206,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [Paraná Banco](https://site.paranabanco.com.br/) | [Joao Antunes](mailto:joaopma@pbtech.net.br) | Internal software catalog, documentation and ownership, improve communication, democratize documentation and knowledge sharing, and coordinate the software lifecycle; all in service of a best-in-class developer experience. | | [Stone](https://stone.com.br/) | [Levy Fialho](mailto:lfialho@stone.com.br) | We're using Backstage as our Credit Team Developer Portal and microservices catalog for mapping ownership. We are also using mkdocs for microservices documentation. | | [REI](https://www.rei.com/) | [Jen Evans](mailto:jenevan@rei.com) | Developer portal focused on an enterprise-wide app catalog to track ownership and surface APIs. | -| [next](https://next.me) | [Devan Jeronimo Nack](mailto:devan.j.nack@next.me), [Everson Crusara](mailto:everson.crusara@next.me), [Thiago Carneiro da Silva](mailto:thiagoc.silva@next.me) | We are building our Internal Developer Portal using Backstage to improve developer's experience by centralizing our services catalog and identifing microservices' ownership. Also we are going to improve Technical Documentation and speed up development using software templates to help squads in creation and deployment of new microservices. | +| [next](https://next.me) | [Devan Jeronimo Nack](mailto:devan.j.nack@next.me), [Everson Crusara](mailto:everson.crusara@next.me), [Thiago Carneiro da Silva](mailto:thiagoc.silva@next.me) | We are building our Internal Developer Portal using Backstage to improve developer's experience by centralizing our services catalog and identifying microservices' ownership. Also we are going to improve Technical Documentation and speed up development using software templates to help squads in creation and deployment of new microservices. | | [Vipps](https://vipps.no) | [Martin Ehrnst](https://github.com/ehrnst) | Vipps use backstage for our service catalog, documentation, and developer portal. Using templates we are able to simplify the developer experience when deploying new services to our platform. | | [Ferrovial](https://ferrovial.com) | [Jose Luis Rosado](mailto:jlrosado@ferrovial.com) | Backstage is helping us to improve and acelerate dev experience helping teams to quickly find technical documentation, infrastructure templates, pipelines, software components and quickstarters that have been developed by our squads in a inner source friendly environment. | | [Inter&Co](https://bancointer.com.br) | [Arnaud Lanna](https://github.com/arnaudlanna), [Adriano Silva](https://github.com/adrianovss), [Bruno Grossi](https://github.com/begrossi) | We're using Backstage as our internal Developer Portal to catalog and collect repositories and microservices pieces of information like ownership, deployment time, and documentation. | @@ -229,7 +229,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [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. | | [N26](https://n26.com) | [Alexei Timofti](https://www.linkedin.com/in/alexeitimofti) | We use Backstage for our service catalog and are actively looking into adopting other plugins like TechDocs, TechInsights and Software Templates. | -| [The LEGO Group](https://www.lego.com) | [Waqas Ali](https://www.linkedin.com/in/waqasali47) | We are building our internal develper portal on top of Backstage. | +| [The LEGO Group](https://www.lego.com) | [Waqas Ali](https://www.linkedin.com/in/waqasali47) | We are building our internal developer portal on top of Backstage. | | [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. @@ -237,7 +237,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [B3](https://www.b3.com.br/) | [Marcos Rodrigues](https://www.linkedin.com/in/marcos-rodrigues-cloud/) | B3 (Brazilian Stock Exchange) will implement a self-service platform focused on software development based on Backstage. The tool will primarily focus on product development and software engineering teams, as well as professionals from other areas who are also involved in software delivery. The new platform will function as a portal where teams can access tools, codes, and templates that have already been tested and are available, serving as building blocks for the development of new solutions. | | [Porto](https://www.portoseguro.com.br/) | [Camilo Alessandro](https://www.linkedin.com/in/camilo-alessandro/) | Porto (Brazilian insurance company) Centralized developer portal with software catalog, application templates, maturity radar, component taxonomy standardization, and automation in the integration with DevSecOps processes. | | [Einride](https://github.com/einride) | [@odsod](https://github.com/odsod/) | We use Backstage to create a great developer experience across Einride's entire software stack - from autonomous and electric vehicles to cloud systems - and we've developed a [Backstage Go SDK](https://github.com/einride/backstage-go) for interfacing with Backstage from our Go tooling. -| [Chartboost](https://www.chartboost.com)| [@brucearctor](https://github.com/brucearctor), [@ArtemChekunov](https://github.com/ArtemChekunov) | We are building our internal develper portal on top of Backstage.| +| [Chartboost](https://www.chartboost.com)| [@brucearctor](https://github.com/brucearctor), [@ArtemChekunov](https://github.com/ArtemChekunov) | We are building our internal developer portal on top of Backstage.| | [Quantum Metric](https://www.quantummetric.com/) | [Eric Irwin](https://www.linkedin.com/in/ericirwin1124/) | Backstage is used within our Developer Experience Platform (DXP) in order to increase self-service, standardization and discoverability across our Engineering teams. | | [VodafoneZiggo](https://www.vodafoneziggo.nl/) | [Peter Macdonald](https://github.com/Parsifal-M) | We use Backstage as our go-to platform for managing our internal tools and services. With Backstage, we can easily discover and access all the services we need to do our work, whether it's deploying code, managing infrastructure, or accessing documentation. We appreciate the standardized, consistent interface and the ability to easily create custom plugins to integrate with our existing workflows. Overall, Backstage is streamlining our internal operations and helps us work more efficiently as a team. | | [Volvo Cars](https://www.volvocars.com) | [Martin Wänerskär](https://github.com/martin-wanerskar) | Internal developer portal with intent to unify infrastructure tooling, services, and developer documentation under a single, easy-to-use interface. | diff --git a/beps/0002-dynamic-frontend-plugins/README.md b/beps/0002-dynamic-frontend-plugins/README.md index 1007732eec..4787f0fb7a 100644 --- a/beps/0002-dynamic-frontend-plugins/README.md +++ b/beps/0002-dynamic-frontend-plugins/README.md @@ -357,7 +357,7 @@ Initializing the dynamic feature is just a case of mapping the `DynamicFrontendF ```ts import { processManifest, getModule } from '@scalprum/core'; -// a ID of the module withing module federation container, can be customized, depends on the build +// a ID of the module within module federation container, can be customized, depends on the build const DEFAULT_MODULE_NAME = 'pluginEntry'; async function loadScalprumFeature({ manifestLocation, name }) { @@ -680,7 +680,7 @@ const dynamicPluginPlugin = new DynamicRemotePlugin({ version: plugin.version || '0.0.0', exposedModules: { // path to the default export of the frontend plugin entry point - // the path should be sourced from the "main" attribute withing package.json + // the path should be sourced from the "main" attribute within package.json pluginEntry: './src/index.ts', }, }, diff --git a/canon-docs/src/app/(docs)/theme/theming/page.mdx b/canon-docs/src/app/(docs)/theme/theming/page.mdx index 665755c268..ed7f801db0 100644 --- a/canon-docs/src/app/(docs)/theme/theming/page.mdx +++ b/canon-docs/src/app/(docs)/theme/theming/page.mdx @@ -207,19 +207,19 @@ color of your app. --canon-bg-danger - Used to show errors informations. + Used to show errors information. --canon-bg-warning - Used to show warnings informations. + Used to show warnings information. --canon-bg-success - Used to show success informations. + Used to show success information. diff --git a/contrib/docs/tutorials/aws-alb-aad-oidc-auth.md b/contrib/docs/tutorials/aws-alb-aad-oidc-auth.md index 178c45567f..f4e991db27 100644 --- a/contrib/docs/tutorials/aws-alb-aad-oidc-auth.md +++ b/contrib/docs/tutorials/aws-alb-aad-oidc-auth.md @@ -39,7 +39,7 @@ Use the following advanced settings: - `Session cookie name` = `AWSELBAuthSessionCookie` - `Session timeout` = `604800` seconds - `Scope` = `openid profile offline_access` -- `Action on unauthenticated request` = `Autenticate (client reattempt)` +- `Action on unauthenticated request` = `Authenticate (client reattempt)` Once you've saved the action, you should see an authentication flow be triggered against Entra ID when visiting Backstage address at `https://backstage.yourdomain.com`. The flow will not complete successfully as the Backstage app isn't yet configured properly. diff --git a/contrib/docs/tutorials/jsx-migration-codemod.md b/contrib/docs/tutorials/jsx-migration-codemod.md index 82d4143572..14ccd44080 100644 --- a/contrib/docs/tutorials/jsx-migration-codemod.md +++ b/contrib/docs/tutorials/jsx-migration-codemod.md @@ -307,7 +307,7 @@ While a codemod for the New JSX Transform was originally introduced in the [Intr j(path).replaceWith(j.jsxIdentifier(property)); }); - // Add exisiting React imports to map + // Add existing React imports to map reactImportPaths.forEach(path => { const specifiers = path.value.specifiers; for (let i = 0; i < specifiers.length; i++) { diff --git a/docs/backend-system/building-plugins-and-modules/08-migrating.md b/docs/backend-system/building-plugins-and-modules/08-migrating.md index ea86854b18..5da443328c 100644 --- a/docs/backend-system/building-plugins-and-modules/08-migrating.md +++ b/docs/backend-system/building-plugins-and-modules/08-migrating.md @@ -237,7 +237,7 @@ The development server created above will be automatically configured with the d ```ts title="in dev/index.js" //... -// This package should be installed as `devDependecies` +// This package should be installed as `devDependencies` import { mockServices } from '@backstage/backend-test-utils'; const backend = createBackend(); diff --git a/docs/features/kubernetes/authenticationstrategy.md b/docs/features/kubernetes/authenticationstrategy.md index ffea69d610..c902995a19 100644 --- a/docs/features/kubernetes/authenticationstrategy.md +++ b/docs/features/kubernetes/authenticationstrategy.md @@ -13,7 +13,7 @@ it also defines what authentication metadata about a Kubernetes cluster is retur ## Context -Backstage includes by default some [Kubernetes Auth Providers](./authentication.md) to ease the authentication proccess to +Backstage includes by default some [Kubernetes Auth Providers](./authentication.md) to ease the authentication process to kubernetes clusters, it includes: - `Server Side Providers` like `localKubectlProxy` or `serviceAccount` where the same set diff --git a/docs/features/software-catalog/faq.md b/docs/features/software-catalog/faq.md index f4eb79d119..24b490ee13 100644 --- a/docs/features/software-catalog/faq.md +++ b/docs/features/software-catalog/faq.md @@ -29,7 +29,7 @@ On the user experience side, a Backstage experience without complete organizatio While it's possible to get hold of a catalog client via the `catalogServiceRef` from `@backstage/plugin-catalog-node`, it's almost never the right thing to do, and we strongly discourage from doing so. -The catalog processing loop is a very high-speed system where your entire catalog cluster collaborates to race through all entities at the highest possible rate. The ideal processor does an absolute minimum of work, and immediately relinquishes control back. Performing asynchronous requests to external systems - including the catalog - from processors, can quickly become overwhelming for that external system and starve their resources if they aren't prepared to deal with very high rates of small requests. It also significantly slows down the procesing loop, when each step needs to wait for responses. This can lead to work "piling up" in the catalog and delays in seeing entities get updated. The [life of an entity](./life-of-an-entity.md) article shows the sequence of events that happen when an entity goes from original ingestion, through processing, and to becoming final entities. +The catalog processing loop is a very high-speed system where your entire catalog cluster collaborates to race through all entities at the highest possible rate. The ideal processor does an absolute minimum of work, and immediately relinquishes control back. Performing asynchronous requests to external systems - including the catalog - from processors, can quickly become overwhelming for that external system and starve their resources if they aren't prepared to deal with very high rates of small requests. It also significantly slows down the processing loop, when each step needs to wait for responses. This can lead to work "piling up" in the catalog and delays in seeing entities get updated. The [life of an entity](./life-of-an-entity.md) article shows the sequence of events that happen when an entity goes from original ingestion, through processing, and to becoming final entities. See also [the related validation topic](#can-i-validate-relations-in-processors). diff --git a/docs/features/software-templates/experimental.md b/docs/features/software-templates/experimental.md index 432bc3fecc..929fe088cf 100644 --- a/docs/features/software-templates/experimental.md +++ b/docs/features/software-templates/experimental.md @@ -118,7 +118,7 @@ export const mockDecorator = createScaffolderFormDecorator({ // give the decorator a name id: 'mock-decorator', - // define the schema for the input that can be proided in `template.yaml` + // define the schema for the input that can be provided in `template.yaml` schema: { input: { test: z => z.string(), diff --git a/docs/features/software-templates/writing-custom-field-extensions.md b/docs/features/software-templates/writing-custom-field-extensions.md index 20f36fd1a6..477fa66e5b 100644 --- a/docs/features/software-templates/writing-custom-field-extensions.md +++ b/docs/features/software-templates/writing-custom-field-extensions.md @@ -151,7 +151,7 @@ const routes = ( ### Async Validation Function -A validation function can be asyncronous and use [Utility APIs](https://backstage.io/docs/api/utility-apis/) via the `ApiHolder` in the [field validation context](https://backstage.io/docs/reference/plugin-scaffolder-react.customfieldvalidator). The example below uses the `catalogApiRef` to check if the submitted value (in this scenario an entity ref) exists in the catalog. +A validation function can be asynchronous and use [Utility APIs](https://backstage.io/docs/api/utility-apis/) via the `ApiHolder` in the [field validation context](https://backstage.io/docs/reference/plugin-scaffolder-react.customfieldvalidator). The example below uses the `catalogApiRef` to check if the submitted value (in this scenario an entity ref) exists in the catalog. ```tsx import { FieldValidation } from '@rjsf/utils'; diff --git a/docs/features/software-templates/writing-templates.md b/docs/features/software-templates/writing-templates.md index 4abe8f1eb0..23786db54f 100644 --- a/docs/features/software-templates/writing-templates.md +++ b/docs/features/software-templates/writing-templates.md @@ -252,7 +252,7 @@ spec: type: service parameters: - - title: Authenticaion + - title: Authentication description: Provide authentication for the resource required: - username diff --git a/docs/features/techdocs/how-to-guides.md b/docs/features/techdocs/how-to-guides.md index 014c8309b0..8a95c86533 100644 --- a/docs/features/techdocs/how-to-guides.md +++ b/docs/features/techdocs/how-to-guides.md @@ -934,7 +934,7 @@ metadata: apiVersion: backstage.io/v1alpha1 kind: Component metadata: - name: example-platfrom + name: example-platform title: Example Application Platform namespace: default description: This is the child entity diff --git a/docs/frontend-system/utility-apis/02-creating.md b/docs/frontend-system/utility-apis/02-creating.md index 01c21fe656..a2b3bf06f6 100644 --- a/docs/frontend-system/utility-apis/02-creating.md +++ b/docs/frontend-system/utility-apis/02-creating.md @@ -93,7 +93,7 @@ The extension ID of the work API will be the kind `api:` followed by the plugin ## Adding configurability -Here we will describe how to amend a utility API with the capability of having extension config, which is driven by [your app-config](../../conf/writing.md). You do this by giving an extension config schema to your API extension factory function. Let's refactory the example above to also accept configuration, which will require us to use the [override method of the blueprint](../architecture/23-extension-blueprints.md#creating-an-extension-from-a-blueprint-with-overrides). +Here we will describe how to amend a utility API with the capability of having extension config, which is driven by [your app-config](../../conf/writing.md). You do this by giving an extension config schema to your API extension factory function. Let's refactor the example above to also accept configuration, which will require us to use the [override method of the blueprint](../architecture/23-extension-blueprints.md#creating-an-extension-from-a-blueprint-with-overrides). ```tsx title="in @internal/plugin-example" const exampleWorkApi = ApiBlueprint.makeWithOverrides({ @@ -123,7 +123,7 @@ We wanted users to be able to set a `goSlow` extension config parameter for our Note that the expression "extension config" as used here, is _not_ the same thing as the `configApi` which gives you access to the full app-config. The extension config discussed here is instead the particular configuration settings given to your utility API instance. This is discussed more [in the Configuring section](./04-configuring.md). -Note also that the extension config schema contained a default value fo the `goSlow` field. This is an important consideration. You want users of your API to be able to get maximum value out of it, without having to dive deep into how to configure it. For that reason you generally want to provide as many sane defaults as possible, while letting users override them rarely but with purpose, only when called for. If you have an extension config schema without defaults, the framework will refuse to instantiate the utility API on startup unless the user had configured those values explicitly. Since it had a default value, the TypeScript code and interfaces also don't have to defensively allow `undefined` - we know that it'll have either the default value or an overridden value when we start consuming the extension config data. +Note also that the extension config schema contained a default value for the `goSlow` field. This is an important consideration. You want users of your API to be able to get maximum value out of it, without having to dive deep into how to configure it. For that reason you generally want to provide as many sane defaults as possible, while letting users override them rarely but with purpose, only when called for. If you have an extension config schema without defaults, the framework will refuse to instantiate the utility API on startup unless the user had configured those values explicitly. Since it had a default value, the TypeScript code and interfaces also don't have to defensively allow `undefined` - we know that it'll have either the default value or an overridden value when we start consuming the extension config data. ## Adding inputs diff --git a/microsite/blog/2023-05-06-backstage-deploy-alpha.mdx b/microsite/blog/2023-05-06-backstage-deploy-alpha.mdx index 126bbb9e7d..d2c37caa31 100644 --- a/microsite/blog/2023-05-06-backstage-deploy-alpha.mdx +++ b/microsite/blog/2023-05-06-backstage-deploy-alpha.mdx @@ -25,7 +25,7 @@ For example: - Should the POC be deployed on Kubernetes? - How do you deploy the POC on my cloud provider? -To address these questions and reduce friction from deploying a POC, we built a [new CLI](https://github.com/backstage/backstage-deploy). The CLI is simply called `deploy` and is invokable with `npx`. With this new CLI, you can generate a Dockerfile and deploy a Backstage instance onto a preferred cloud provider. While the package’s infrastructure is built to support all cloud providers, currently the CLI only offers an AWS implementation. In the future, we plan to add additional cloud providers to the package and [welcome any contributions](https://github.com/backstage/backstage/blob/6996b3338d678efc03307112524060e9dc2ad769/CONTRIBUTING.md) extending the suite of cloud provider implementations! +To address these questions and reduce friction from deploying a POC, we built a [new CLI](https://github.com/backstage/backstage-deploy). The CLI is simply called `deploy` and is invocable with `npx`. With this new CLI, you can generate a Dockerfile and deploy a Backstage instance onto a preferred cloud provider. While the package’s infrastructure is built to support all cloud providers, currently the CLI only offers an AWS implementation. In the future, we plan to add additional cloud providers to the package and [welcome any contributions](https://github.com/backstage/backstage/blob/6996b3338d678efc03307112524060e9dc2ad769/CONTRIBUTING.md) extending the suite of cloud provider implementations! **So, what about Kubernetes?** Since the CLI is designed specifically for the POC phase, we believe that Kubernetes isn’t the right fit – as Kubernetes is better suited for production workloads. So, we explored lightweight, container-based solutions, and landed on [Amazon Lightsail](https://docs.aws.amazon.com/lightsail/index.html) as a hosting service for the POC. Amazon Lightsail supports [lightweight container](https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-container-services) deployments [at a low cost](https://aws.amazon.com/lightsail/pricing/), and has a [free trial for new users](https://aws.amazon.com/lightsail/pricing/?loc=ft#AWS_Free_Tier)! Given Lightsail’s ease of use and affordability, we recommend using Lightsail over Kubernetes to test out your Backstage POC. diff --git a/microsite/blog/2024-09-24-dynatrace-adopter-spotlight.mdx b/microsite/blog/2024-09-24-dynatrace-adopter-spotlight.mdx index 7e029e0aab..e49e0e8e90 100644 --- a/microsite/blog/2024-09-24-dynatrace-adopter-spotlight.mdx +++ b/microsite/blog/2024-09-24-dynatrace-adopter-spotlight.mdx @@ -74,7 +74,7 @@ While Kubernetes observability was requested to be provided out of the box, we q - Fetching runtime security vulnerability information across different stages -![Security vulnerabilities in context](assets/2024-09-24/backstage_catalog_security_vulnerabilites.png) +![Security vulnerabilities in context](assets/2024-09-24/backstage_catalog_security_vulnerabilities.png) ### Error logs at hand diff --git a/microsite/blog/assets/2024-09-24/backstage_catalog_security_vulnerabilites.png b/microsite/blog/assets/2024-09-24/backstage_catalog_security_vulnerabilities.png similarity index 100% rename from microsite/blog/assets/2024-09-24/backstage_catalog_security_vulnerabilites.png rename to microsite/blog/assets/2024-09-24/backstage_catalog_security_vulnerabilities.png diff --git a/microsite/data/plugins/backchat.yaml b/microsite/data/plugins/backchat.yaml index b375ad26bc..dd09938307 100644 --- a/microsite/data/plugins/backchat.yaml +++ b/microsite/data/plugins/backchat.yaml @@ -3,7 +3,7 @@ title: Backchat GenAI author: benwilcock authorUrl: https://github.com/benwilcock category: Services -description: Access your favorite open source GenAI GUIs privately from Backstage. Chat wth large language models in your portal. Choose from hundreds of LLMs. Run inferencing wherever you like - local or remote, CPU or GPU - it's up to you! +description: Access your favorite open source GenAI GUIs privately from Backstage. Chat with large language models in your portal. Choose from hundreds of LLMs. Run inferencing wherever you like - local or remote, CPU or GPU - it's up to you! documentation: https://github.com/benwilcock/backstage-plugin-backchat iconUrl: /img/backchat-logo.png npmPackageName: '@benbravo73/backstage-plugin-backchat' diff --git a/microsite/data/plugins/harness-iacm.yaml b/microsite/data/plugins/harness-iacm.yaml index 4463bab371..b9aa3b8ab4 100644 --- a/microsite/data/plugins/harness-iacm.yaml +++ b/microsite/data/plugins/harness-iacm.yaml @@ -8,6 +8,6 @@ documentation: https://github.com/harness/backstage-plugins/tree/main/plugins/ha iconUrl: https://static.harness.io/ng-static/images/favicon.png npmPackageName: '@harnessio/backstage-plugin-harness-iacm' tags: - - infrastrucure-as-code + - infrastructure-as-code - resource-management addedDate: '2024-07-03' diff --git a/microsite/data/plugins/statuspage.yaml b/microsite/data/plugins/statuspage.yaml index 652052defc..d5402c8ea3 100644 --- a/microsite/data/plugins/statuspage.yaml +++ b/microsite/data/plugins/statuspage.yaml @@ -3,7 +3,7 @@ title: Statuspage.io Plugin author: AxisCommunications authorUrl: https://github.com/AxisCommunications category: Monitoring -description: The Statuspage plugin allows you to embedd https://statuspage.io components, component groups and dashboards in Backstage. +description: The Statuspage plugin allows you to embed https://statuspage.io components, component groups and dashboards in Backstage. documentation: https://github.com/AxisCommunications/backstage-plugins/blob/main/plugins/statuspage/README.md iconUrl: https://raw.githubusercontent.com/AxisCommunications/backstage-plugins/main/plugins/statuspage/media/logo.png npmPackageName: '@axis-backstage/plugin-statuspage' diff --git a/microsite/src/pages/community/index.tsx b/microsite/src/pages/community/index.tsx index 1e31edeedc..0a45464805 100644 --- a/microsite/src/pages/community/index.tsx +++ b/microsite/src/pages/community/index.tsx @@ -165,7 +165,9 @@ const Community = () => { -

Offical Backstage Initiatives

+

+ Official Backstage Initiatives +

Stay tuned to the latest developments

From f3381d330eab624a616782d9892634ecf795bae7 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Sat, 19 Apr 2025 18:26:34 -0500 Subject: [PATCH 57/61] integration - Added missing `organizations` property to `azure` section Signed-off-by: Andre Wanlin --- .changeset/breezy-hotels-deny.md | 5 +++++ packages/integration/config.d.ts | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 .changeset/breezy-hotels-deny.md diff --git a/.changeset/breezy-hotels-deny.md b/.changeset/breezy-hotels-deny.md new file mode 100644 index 0000000000..13c8b47a7f --- /dev/null +++ b/.changeset/breezy-hotels-deny.md @@ -0,0 +1,5 @@ +--- +'@backstage/integration': patch +--- + +Added missing `organizations` property to `azure` section in `config.d.ts` file diff --git a/packages/integration/config.d.ts b/packages/integration/config.d.ts index 8205e0c71e..9e47e9a0ff 100644 --- a/packages/integration/config.d.ts +++ b/packages/integration/config.d.ts @@ -51,12 +51,13 @@ export interface Config { /** * The credentials to use for requests. If multiple credentials are specified the first one that matches the organization is used. - * If not organization matches the first credential without an organization is used. + * If no organization matches the first credential without an organization is used. * * If no credentials are specified at all, either a default credential (for Azure DevOps) or anonymous access (for Azure DevOps Server) is used. * @deepVisibility secret */ credentials?: { + organizations?: string[]; clientId?: string; clientSecret?: string; tenantId?: string; From 1a003ff1a30530d9d6e9e0904faab426d5d04027 Mon Sep 17 00:00:00 2001 From: Boris Bera Date: Mon, 3 Mar 2025 15:04:50 -0500 Subject: [PATCH 58/61] Add `CatalogApi.getLocations` Signed-off-by: Boris Bera --- .changeset/yellow-cows-tickle.md | 7 ++ .../catalog-client/report-testUtils.api.md | 2 + packages/catalog-client/report.api.md | 2 + .../catalog-client/src/CatalogClient.test.ts | 81 +++++++++++++++++++ packages/catalog-client/src/CatalogClient.ts | 10 +++ .../src/testUtils/InMemoryCatalogClient.ts | 4 + packages/catalog-client/src/types/api.ts | 7 ++ plugins/catalog-node/report-testUtils.api.md | 4 + plugins/catalog-node/report.api.md | 2 + plugins/catalog-node/src/catalogService.ts | 8 ++ .../src/testUtils/catalogServiceMock.ts | 1 + plugins/catalog-node/src/testUtils/types.ts | 4 + .../src/testUtils/catalogApiMock.ts | 1 + 13 files changed, 133 insertions(+) create mode 100644 .changeset/yellow-cows-tickle.md diff --git a/.changeset/yellow-cows-tickle.md b/.changeset/yellow-cows-tickle.md new file mode 100644 index 0000000000..026c7444f0 --- /dev/null +++ b/.changeset/yellow-cows-tickle.md @@ -0,0 +1,7 @@ +--- +'@backstage/catalog-client': minor +'@backstage/plugin-catalog-react': minor +'@backstage/plugin-catalog-node': minor +--- + +Add `getLocations` method to `CatalogApi` and `CatalogClient`. This method calls the [`GET /locations`](https://backstage.io/docs/features/software-catalog/software-catalog-api/#get-locations) endpoint from the catalog backend. diff --git a/packages/catalog-client/report-testUtils.api.md b/packages/catalog-client/report-testUtils.api.md index 88d14b4f7a..69aa26ae4d 100644 --- a/packages/catalog-client/report-testUtils.api.md +++ b/packages/catalog-client/report-testUtils.api.md @@ -53,6 +53,8 @@ export class InMemoryCatalogClient implements CatalogApi { // (undocumented) getLocationByRef(_locationRef: string): Promise; // (undocumented) + getLocations(): Promise; + // (undocumented) queryEntities(request?: QueryEntitiesRequest): Promise; // (undocumented) refreshEntity(_entityRef: string): Promise; diff --git a/packages/catalog-client/report.api.md b/packages/catalog-client/report.api.md index 203028edce..411db273de 100644 --- a/packages/catalog-client/report.api.md +++ b/packages/catalog-client/report.api.md @@ -62,6 +62,7 @@ export interface CatalogApi { locationRef: string, options?: CatalogRequestOptions, ): Promise; + getLocations(options?: CatalogRequestOptions): Promise; queryEntities( request?: QueryEntitiesRequest, options?: CatalogRequestOptions, @@ -136,6 +137,7 @@ export class CatalogClient implements CatalogApi { locationRef: string, options?: CatalogRequestOptions, ): Promise; + getLocations(options?: CatalogRequestOptions): Promise; queryEntities( request?: QueryEntitiesRequest, options?: CatalogRequestOptions, diff --git a/packages/catalog-client/src/CatalogClient.test.ts b/packages/catalog-client/src/CatalogClient.test.ts index ea61634a8b..ad64c194ce 100644 --- a/packages/catalog-client/src/CatalogClient.test.ts +++ b/packages/catalog-client/src/CatalogClient.test.ts @@ -24,6 +24,7 @@ import { QueryEntitiesResponse, } from './types/api'; import { DiscoveryApi } from './types/discovery'; +import { GetLocations200ResponseInner } from './schema/openapi'; const server = setupServer(); const token = 'fake-token'; @@ -593,6 +594,86 @@ describe('CatalogClient', () => { }); }); + describe('getLocations', () => { + const defaultResponse = [ + { + data: { + id: '42', + type: 'url', + target: 'https://example.com', + }, + }, + { + data: { + id: '43', + type: 'url', + target: 'https://example.com', + }, + }, + ] satisfies GetLocations200ResponseInner[]; + + beforeEach(() => { + server.use( + rest.get(`${mockBaseUrl}/locations`, (_, res, ctx) => { + return res(ctx.json(defaultResponse)); + }), + ); + }); + + it('should return locations from correct endpoint', async () => { + const response = await client.getLocations({ token }); + expect(response).toEqual([ + { + id: '42', + type: 'url', + target: 'https://example.com', + }, + { + id: '43', + type: 'url', + target: 'https://example.com', + }, + ]); + }); + + it('should return empty list with empty result', async () => { + server.use( + rest.get(`${mockBaseUrl}/locations`, (_, res, ctx) => { + return res(ctx.json([])); + }), + ); + + const response = await client.getLocations({ token }); + expect(response).toEqual([]); + }); + + it('should forward token', async () => { + expect.assertions(1); + + server.use( + rest.get(`${mockBaseUrl}/locations`, (req, res, ctx) => { + expect(req.headers.get('authorization')).toBe(`Bearer ${token}`); + return res(ctx.json(defaultResponse)); + }), + ); + + await client.getLocations({ token }); + }); + + it('should not forward token if omitted', async () => { + expect.assertions(1); + + server.use( + rest.get(`${mockBaseUrl}/locations`, (req, res, ctx) => { + expect(req.headers.get('authorization')).toBeNull(); + return res(ctx.json(defaultResponse)); + }), + ); + + await client.getLocations(); + }); + }); + describe('getLocationById', () => { const defaultResponse = { data: { diff --git a/packages/catalog-client/src/CatalogClient.ts b/packages/catalog-client/src/CatalogClient.ts index e820716945..93c2acfd77 100644 --- a/packages/catalog-client/src/CatalogClient.ts +++ b/packages/catalog-client/src/CatalogClient.ts @@ -75,6 +75,16 @@ export class CatalogClient implements CatalogApi { ); } + /** + * {@inheritdoc CatalogApi.getLocations} + */ + async getLocations(options?: CatalogRequestOptions): Promise { + const res = await this.requestRequired( + await this.apiClient.getLocations({}, options), + ); + return res.map(item => item.data); + } + /** * {@inheritdoc CatalogApi.getLocationById} */ diff --git a/packages/catalog-client/src/testUtils/InMemoryCatalogClient.ts b/packages/catalog-client/src/testUtils/InMemoryCatalogClient.ts index 13ce190e88..8c09c4ae98 100644 --- a/packages/catalog-client/src/testUtils/InMemoryCatalogClient.ts +++ b/packages/catalog-client/src/testUtils/InMemoryCatalogClient.ts @@ -228,6 +228,10 @@ export class InMemoryCatalogClient implements CatalogApi { }; } + async getLocations(): Promise { + throw new NotImplementedError('Method not implemented.'); + } + async getLocationById(_id: string): Promise { throw new NotImplementedError('Method not implemented.'); } diff --git a/packages/catalog-client/src/types/api.ts b/packages/catalog-client/src/types/api.ts index 85cea17660..86c957fdf4 100644 --- a/packages/catalog-client/src/types/api.ts +++ b/packages/catalog-client/src/types/api.ts @@ -590,6 +590,13 @@ export interface CatalogApi { // Locations + /** + * List locations + * + * @param options - Additional options + */ + getLocations(options?: CatalogRequestOptions): Promise; + /** * Gets a registered location by its ID. * diff --git a/plugins/catalog-node/report-testUtils.api.md b/plugins/catalog-node/report-testUtils.api.md index 35dee113c0..46a4777f51 100644 --- a/plugins/catalog-node/report-testUtils.api.md +++ b/plugins/catalog-node/report-testUtils.api.md @@ -74,6 +74,10 @@ export interface CatalogServiceMock extends CatalogService, CatalogApi { options?: CatalogServiceRequestOptions | CatalogRequestOptions, ): Promise; // (undocumented) + getLocations( + options?: CatalogServiceRequestOptions | CatalogRequestOptions, + ): Promise; + // (undocumented) queryEntities( request?: QueryEntitiesRequest, options?: CatalogServiceRequestOptions | CatalogRequestOptions, diff --git a/plugins/catalog-node/report.api.md b/plugins/catalog-node/report.api.md index a51212e412..42819dd3d6 100644 --- a/plugins/catalog-node/report.api.md +++ b/plugins/catalog-node/report.api.md @@ -164,6 +164,8 @@ export interface CatalogService { options: CatalogServiceRequestOptions, ): Promise; // (undocumented) + getLocations(options: CatalogServiceRequestOptions): Promise; + // (undocumented) queryEntities( request: QueryEntitiesRequest | undefined, options: CatalogServiceRequestOptions, diff --git a/plugins/catalog-node/src/catalogService.ts b/plugins/catalog-node/src/catalogService.ts index 5e8c920dad..eb2d59296c 100644 --- a/plugins/catalog-node/src/catalogService.ts +++ b/plugins/catalog-node/src/catalogService.ts @@ -96,6 +96,8 @@ export interface CatalogService { options: CatalogServiceRequestOptions, ): Promise; + getLocations(options: CatalogServiceRequestOptions): Promise; + getLocationById( id: string, options: CatalogServiceRequestOptions, @@ -223,6 +225,12 @@ class DefaultCatalogService implements CatalogService { ); } + async getLocations( + options: CatalogServiceRequestOptions, + ): Promise { + return this.#catalogApi.getLocations(await this.#getOptions(options)); + } + async getLocationById( id: string, options: CatalogServiceRequestOptions, diff --git a/plugins/catalog-node/src/testUtils/catalogServiceMock.ts b/plugins/catalog-node/src/testUtils/catalogServiceMock.ts index 2e8a772dc3..ec469fc927 100644 --- a/plugins/catalog-node/src/testUtils/catalogServiceMock.ts +++ b/plugins/catalog-node/src/testUtils/catalogServiceMock.ts @@ -95,6 +95,7 @@ export namespace catalogServiceMock { removeEntityByUid: jest.fn(), refreshEntity: jest.fn(), getEntityFacets: jest.fn(), + getLocations: jest.fn(), getLocationById: jest.fn(), getLocationByRef: jest.fn(), addLocation: jest.fn(), diff --git a/plugins/catalog-node/src/testUtils/types.ts b/plugins/catalog-node/src/testUtils/types.ts index 1fbbec98f1..6847d754a9 100644 --- a/plugins/catalog-node/src/testUtils/types.ts +++ b/plugins/catalog-node/src/testUtils/types.ts @@ -90,6 +90,10 @@ export interface CatalogServiceMock extends CatalogService, CatalogApi { options?: CatalogServiceRequestOptions | CatalogRequestOptions, ): Promise; + getLocations( + options?: CatalogServiceRequestOptions | CatalogRequestOptions, + ): Promise; + getLocationById( id: string, options?: CatalogServiceRequestOptions | CatalogRequestOptions, diff --git a/plugins/catalog-react/src/testUtils/catalogApiMock.ts b/plugins/catalog-react/src/testUtils/catalogApiMock.ts index 8cf3b740b0..08520e2a9b 100644 --- a/plugins/catalog-react/src/testUtils/catalogApiMock.ts +++ b/plugins/catalog-react/src/testUtils/catalogApiMock.ts @@ -94,6 +94,7 @@ export namespace catalogApiMock { removeEntityByUid: jest.fn(), refreshEntity: jest.fn(), getEntityFacets: jest.fn(), + getLocations: jest.fn(), getLocationById: jest.fn(), getLocationByRef: jest.fn(), addLocation: jest.fn(), From d9347c63c71c23f29a478a9b21571ef6cbc99d27 Mon Sep 17 00:00:00 2001 From: Boris Bera Date: Mon, 31 Mar 2025 13:07:16 -0400 Subject: [PATCH 59/61] Leave room for pagination later on Signed-off-by: Boris Bera --- .../catalog-client/report-testUtils.api.md | 3 +- packages/catalog-client/report.api.md | 16 +++++++-- .../catalog-client/src/CatalogClient.test.ts | 34 ++++++++++--------- packages/catalog-client/src/CatalogClient.ts | 12 +++++-- .../src/testUtils/InMemoryCatalogClient.ts | 3 +- packages/catalog-client/src/types/api.ts | 15 +++++++- packages/catalog-client/src/types/index.ts | 1 + plugins/catalog-node/report-testUtils.api.md | 4 ++- plugins/catalog-node/report.api.md | 6 +++- plugins/catalog-node/src/catalogService.ts | 14 ++++++-- plugins/catalog-node/src/testUtils/types.ts | 4 ++- 11 files changed, 82 insertions(+), 30 deletions(-) diff --git a/packages/catalog-client/report-testUtils.api.md b/packages/catalog-client/report-testUtils.api.md index 69aa26ae4d..bb6a8dd469 100644 --- a/packages/catalog-client/report-testUtils.api.md +++ b/packages/catalog-client/report-testUtils.api.md @@ -16,6 +16,7 @@ import { GetEntityAncestorsRequest } from '@backstage/catalog-client'; import { GetEntityAncestorsResponse } from '@backstage/catalog-client'; import { GetEntityFacetsRequest } from '@backstage/catalog-client'; import { GetEntityFacetsResponse } from '@backstage/catalog-client'; +import { GetLocationsResponse } from '@backstage/catalog-client'; import { Location as Location_2 } from '@backstage/catalog-client'; import { QueryEntitiesRequest } from '@backstage/catalog-client'; import { QueryEntitiesResponse } from '@backstage/catalog-client'; @@ -53,7 +54,7 @@ export class InMemoryCatalogClient implements CatalogApi { // (undocumented) getLocationByRef(_locationRef: string): Promise; // (undocumented) - getLocations(): Promise; + getLocations(_request?: {}): Promise; // (undocumented) queryEntities(request?: QueryEntitiesRequest): Promise; // (undocumented) diff --git a/packages/catalog-client/report.api.md b/packages/catalog-client/report.api.md index 411db273de..0a37ed7e42 100644 --- a/packages/catalog-client/report.api.md +++ b/packages/catalog-client/report.api.md @@ -62,7 +62,10 @@ export interface CatalogApi { locationRef: string, options?: CatalogRequestOptions, ): Promise; - getLocations(options?: CatalogRequestOptions): Promise; + getLocations( + request?: {}, + options?: CatalogRequestOptions, + ): Promise; queryEntities( request?: QueryEntitiesRequest, options?: CatalogRequestOptions, @@ -137,7 +140,10 @@ export class CatalogClient implements CatalogApi { locationRef: string, options?: CatalogRequestOptions, ): Promise; - getLocations(options?: CatalogRequestOptions): Promise; + getLocations( + request?: {}, + options?: CatalogRequestOptions, + ): Promise; queryEntities( request?: QueryEntitiesRequest, options?: CatalogRequestOptions, @@ -252,6 +258,12 @@ export interface GetEntityFacetsResponse { >; } +// @public +export interface GetLocationsResponse { + // (undocumented) + items: Location_2[]; +} + // @public type Location_2 = { id: string; diff --git a/packages/catalog-client/src/CatalogClient.test.ts b/packages/catalog-client/src/CatalogClient.test.ts index ad64c194ce..abafeb18a5 100644 --- a/packages/catalog-client/src/CatalogClient.test.ts +++ b/packages/catalog-client/src/CatalogClient.test.ts @@ -621,19 +621,21 @@ describe('CatalogClient', () => { }); it('should return locations from correct endpoint', async () => { - const response = await client.getLocations({ token }); - expect(response).toEqual([ - { - id: '42', - type: 'url', - target: 'https://example.com', - }, - { - id: '43', - type: 'url', - target: 'https://example.com', - }, - ]); + const response = await client.getLocations({}, { token }); + expect(response).toEqual({ + items: [ + { + id: '42', + type: 'url', + target: 'https://example.com', + }, + { + id: '43', + type: 'url', + target: 'https://example.com', + }, + ], + }); }); it('should return empty list with empty result', async () => { @@ -643,8 +645,8 @@ describe('CatalogClient', () => { }), ); - const response = await client.getLocations({ token }); - expect(response).toEqual([]); + const response = await client.getLocations({}, { token }); + expect(response).toEqual({ items: [] }); }); it('should forward token', async () => { @@ -657,7 +659,7 @@ describe('CatalogClient', () => { }), ); - await client.getLocations({ token }); + await client.getLocations({}, { token }); }); it('should not forward token if omitted', async () => { diff --git a/packages/catalog-client/src/CatalogClient.ts b/packages/catalog-client/src/CatalogClient.ts index 93c2acfd77..b3f8df1aa6 100644 --- a/packages/catalog-client/src/CatalogClient.ts +++ b/packages/catalog-client/src/CatalogClient.ts @@ -36,6 +36,7 @@ import { GetEntityAncestorsResponse, GetEntityFacetsRequest, GetEntityFacetsResponse, + GetLocationsResponse, Location, QueryEntitiesRequest, QueryEntitiesResponse, @@ -78,11 +79,16 @@ export class CatalogClient implements CatalogApi { /** * {@inheritdoc CatalogApi.getLocations} */ - async getLocations(options?: CatalogRequestOptions): Promise { + async getLocations( + request?: {}, + options?: CatalogRequestOptions, + ): Promise { const res = await this.requestRequired( - await this.apiClient.getLocations({}, options), + await this.apiClient.getLocations(request ?? {}, options), ); - return res.map(item => item.data); + return { + items: res.map(item => item.data), + }; } /** diff --git a/packages/catalog-client/src/testUtils/InMemoryCatalogClient.ts b/packages/catalog-client/src/testUtils/InMemoryCatalogClient.ts index 8c09c4ae98..a7dd333729 100644 --- a/packages/catalog-client/src/testUtils/InMemoryCatalogClient.ts +++ b/packages/catalog-client/src/testUtils/InMemoryCatalogClient.ts @@ -28,6 +28,7 @@ import { GetEntityAncestorsResponse, GetEntityFacetsRequest, GetEntityFacetsResponse, + GetLocationsResponse, Location, QueryEntitiesRequest, QueryEntitiesResponse, @@ -228,7 +229,7 @@ export class InMemoryCatalogClient implements CatalogApi { }; } - async getLocations(): Promise { + async getLocations(_request?: {}): Promise { throw new NotImplementedError('Method not implemented.'); } diff --git a/packages/catalog-client/src/types/api.ts b/packages/catalog-client/src/types/api.ts index 86c957fdf4..c999b29390 100644 --- a/packages/catalog-client/src/types/api.ts +++ b/packages/catalog-client/src/types/api.ts @@ -349,6 +349,15 @@ export type Location = { target: string; }; +/** + * The response type for {@link CatalogClient.getLocations} + * + * @public + */ +export interface GetLocationsResponse { + items: Location[]; +} + /** * The request type for {@link CatalogClient.addLocation}. * @@ -593,9 +602,13 @@ export interface CatalogApi { /** * List locations * + * @param request - Request parameters * @param options - Additional options */ - getLocations(options?: CatalogRequestOptions): Promise; + getLocations( + request?: {}, + options?: CatalogRequestOptions, + ): Promise; /** * Gets a registered location by its ID. diff --git a/packages/catalog-client/src/types/index.ts b/packages/catalog-client/src/types/index.ts index 9bf35886c8..73b16f4554 100644 --- a/packages/catalog-client/src/types/index.ts +++ b/packages/catalog-client/src/types/index.ts @@ -31,6 +31,7 @@ export type { GetEntityAncestorsResponse, GetEntityFacetsRequest, GetEntityFacetsResponse, + GetLocationsResponse, Location, ValidateEntityResponse, QueryEntitiesCursorRequest, diff --git a/plugins/catalog-node/report-testUtils.api.md b/plugins/catalog-node/report-testUtils.api.md index 46a4777f51..3098888fcb 100644 --- a/plugins/catalog-node/report-testUtils.api.md +++ b/plugins/catalog-node/report-testUtils.api.md @@ -19,6 +19,7 @@ import { GetEntityAncestorsRequest } from '@backstage/catalog-client'; import { GetEntityAncestorsResponse } from '@backstage/catalog-client'; import { GetEntityFacetsRequest } from '@backstage/catalog-client'; import { GetEntityFacetsResponse } from '@backstage/catalog-client'; +import { GetLocationsResponse } from '@backstage/catalog-client'; import { Location as Location_2 } from '@backstage/catalog-client'; import { QueryEntitiesRequest } from '@backstage/catalog-client'; import { QueryEntitiesResponse } from '@backstage/catalog-client'; @@ -75,8 +76,9 @@ export interface CatalogServiceMock extends CatalogService, CatalogApi { ): Promise; // (undocumented) getLocations( + request?: {}, options?: CatalogServiceRequestOptions | CatalogRequestOptions, - ): Promise; + ): Promise; // (undocumented) queryEntities( request?: QueryEntitiesRequest, diff --git a/plugins/catalog-node/report.api.md b/plugins/catalog-node/report.api.md index 42819dd3d6..f2fe86a38c 100644 --- a/plugins/catalog-node/report.api.md +++ b/plugins/catalog-node/report.api.md @@ -19,6 +19,7 @@ import { GetEntityAncestorsRequest } from '@backstage/catalog-client'; import { GetEntityAncestorsResponse } from '@backstage/catalog-client'; import { GetEntityFacetsRequest } from '@backstage/catalog-client'; import { GetEntityFacetsResponse } from '@backstage/catalog-client'; +import { GetLocationsResponse } from '@backstage/catalog-client'; import { JsonValue } from '@backstage/types'; import { Location as Location_2 } from '@backstage/catalog-client'; import { LocationEntityV1alpha1 } from '@backstage/catalog-model'; @@ -164,7 +165,10 @@ export interface CatalogService { options: CatalogServiceRequestOptions, ): Promise; // (undocumented) - getLocations(options: CatalogServiceRequestOptions): Promise; + getLocations( + request: {} | undefined, + options: CatalogServiceRequestOptions, + ): Promise; // (undocumented) queryEntities( request: QueryEntitiesRequest | undefined, diff --git a/plugins/catalog-node/src/catalogService.ts b/plugins/catalog-node/src/catalogService.ts index eb2d59296c..51bb1d92e5 100644 --- a/plugins/catalog-node/src/catalogService.ts +++ b/plugins/catalog-node/src/catalogService.ts @@ -35,6 +35,7 @@ import { GetEntityAncestorsResponse, GetEntityFacetsRequest, GetEntityFacetsResponse, + GetLocationsResponse, Location, QueryEntitiesRequest, QueryEntitiesResponse, @@ -96,7 +97,10 @@ export interface CatalogService { options: CatalogServiceRequestOptions, ): Promise; - getLocations(options: CatalogServiceRequestOptions): Promise; + getLocations( + request: {} | undefined, + options: CatalogServiceRequestOptions, + ): Promise; getLocationById( id: string, @@ -226,9 +230,13 @@ class DefaultCatalogService implements CatalogService { } async getLocations( + request: {} | undefined, options: CatalogServiceRequestOptions, - ): Promise { - return this.#catalogApi.getLocations(await this.#getOptions(options)); + ): Promise { + return this.#catalogApi.getLocations( + request, + await this.#getOptions(options), + ); } async getLocationById( diff --git a/plugins/catalog-node/src/testUtils/types.ts b/plugins/catalog-node/src/testUtils/types.ts index 6847d754a9..6e6331a630 100644 --- a/plugins/catalog-node/src/testUtils/types.ts +++ b/plugins/catalog-node/src/testUtils/types.ts @@ -27,6 +27,7 @@ import { GetEntityAncestorsResponse, GetEntityFacetsRequest, GetEntityFacetsResponse, + GetLocationsResponse, Location, QueryEntitiesRequest, QueryEntitiesResponse, @@ -91,8 +92,9 @@ export interface CatalogServiceMock extends CatalogService, CatalogApi { ): Promise; getLocations( + request?: {}, options?: CatalogServiceRequestOptions | CatalogRequestOptions, - ): Promise; + ): Promise; getLocationById( id: string, From cf8fd51b6197a5a47e0044c0f68160eb8db4d2c3 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Wed, 16 Apr 2025 12:18:05 -0500 Subject: [PATCH 60/61] permission-backend - Removed legacy backend support Signed-off-by: Andre Wanlin --- .changeset/silent-clubs-roll.md | 5 +++ plugins/permission-backend/package.json | 1 - plugins/permission-backend/report.api.md | 32 ------------------- plugins/permission-backend/src/index.ts | 1 - .../permission-backend/src/service/router.ts | 17 ++++------ yarn.lock | 1 - 6 files changed, 12 insertions(+), 45 deletions(-) create mode 100644 .changeset/silent-clubs-roll.md diff --git a/.changeset/silent-clubs-roll.md b/.changeset/silent-clubs-roll.md new file mode 100644 index 0000000000..c80f884331 --- /dev/null +++ b/.changeset/silent-clubs-roll.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-permission-backend': minor +--- + +**BREAKING** Removed support for the legacy backend system, please [migrate to the new backend system](https://backstage.io/docs/backend-system/building-backends/migrating) diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index 0408fb7031..847feb9faa 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -51,7 +51,6 @@ "test": "backstage-cli package test" }, "dependencies": { - "@backstage/backend-common": "^0.25.0", "@backstage/backend-plugin-api": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", diff --git a/plugins/permission-backend/report.api.md b/plugins/permission-backend/report.api.md index 48395265f7..a9b7720c6f 100644 --- a/plugins/permission-backend/report.api.md +++ b/plugins/permission-backend/report.api.md @@ -3,41 +3,9 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { AuthService } from '@backstage/backend-plugin-api'; import { BackendFeature } from '@backstage/backend-plugin-api'; -import { DiscoveryService } from '@backstage/backend-plugin-api'; -import express from 'express'; -import { HttpAuthService } from '@backstage/backend-plugin-api'; -import { IdentityApi } from '@backstage/plugin-auth-node'; -import { LoggerService } from '@backstage/backend-plugin-api'; -import { PermissionPolicy } from '@backstage/plugin-permission-node'; -import { RootConfigService } from '@backstage/backend-plugin-api'; -import { UserInfoService } from '@backstage/backend-plugin-api'; - -// @public @deprecated -export function createRouter(options: RouterOptions): Promise; // @public const permissionPlugin: BackendFeature; export default permissionPlugin; - -// @public @deprecated -export interface RouterOptions { - // (undocumented) - auth?: AuthService; - // (undocumented) - config: RootConfigService; - // (undocumented) - discovery: DiscoveryService; - // (undocumented) - httpAuth?: HttpAuthService; - // (undocumented) - identity?: IdentityApi; - // (undocumented) - logger: LoggerService; - // (undocumented) - policy: PermissionPolicy; - // (undocumented) - userInfo?: UserInfoService; -} ``` diff --git a/plugins/permission-backend/src/index.ts b/plugins/permission-backend/src/index.ts index b6d3366d37..42ac600821 100644 --- a/plugins/permission-backend/src/index.ts +++ b/plugins/permission-backend/src/index.ts @@ -19,4 +19,3 @@ * @packageDocumentation */ export { permissionPlugin as default } from './plugin'; -export * from './service'; diff --git a/plugins/permission-backend/src/service/router.ts b/plugins/permission-backend/src/service/router.ts index 83dc90a363..0759f6df3a 100644 --- a/plugins/permission-backend/src/service/router.ts +++ b/plugins/permission-backend/src/service/router.ts @@ -17,7 +17,6 @@ import { z } from 'zod'; import express, { Request, Response } from 'express'; import Router from 'express-promise-router'; -import { createLegacyAuthAdapters } from '@backstage/backend-common'; import { InputError } from '@backstage/errors'; import { IdentityApi } from '@backstage/plugin-auth-node'; import { @@ -99,8 +98,7 @@ const evaluatePermissionRequestBatchSchema: z.ZodSchema { - const { policy, discovery, config, logger } = options; - const { auth, httpAuth, userInfo } = createLegacyAuthAdapters(options); + const { policy, discovery, config, logger, auth, httpAuth, userInfo } = + options; if (!config.getOptionalBoolean('permission.enabled')) { logger.warn( diff --git a/yarn.lock b/yarn.lock index 20037a1652..3f4f005a71 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6980,7 +6980,6 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-permission-backend@workspace:plugins/permission-backend" dependencies: - "@backstage/backend-common": "npm:^0.25.0" "@backstage/backend-defaults": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-test-utils": "workspace:^" From 471e9e5cd3739319ada4a2d54e10869b05f1f94f Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Mon, 21 Apr 2025 13:56:08 -0500 Subject: [PATCH 61/61] Moved express types to devDependencies Signed-off-by: Andre Wanlin --- plugins/permission-backend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index 847feb9faa..452024a2cf 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -57,7 +57,6 @@ "@backstage/plugin-auth-node": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-permission-node": "workspace:^", - "@types/express": "^4.17.6", "dataloader": "^2.0.0", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -69,6 +68,7 @@ "@backstage/backend-defaults": "workspace:^", "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", + "@types/express": "^4.17.6", "@types/lodash": "^4.14.151", "@types/supertest": "^2.0.8", "msw": "^1.0.0",