From 06f6a4f0f14de66fe5372e5f9d773e9076ee3e96 Mon Sep 17 00:00:00 2001 From: Scott Guymer Date: Fri, 2 Dec 2022 16:48:22 +0100 Subject: [PATCH 01/99] fix: allow overriding of stackoverflow configuration Make it possible to override the config when instantiating for more flexibility. Signed-off-by: Scott Guymer --- .changeset/olive-eyes-sing.md | 5 +++++ .../src/search/StackOverflowQuestionsCollatorFactory.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/olive-eyes-sing.md diff --git a/.changeset/olive-eyes-sing.md b/.changeset/olive-eyes-sing.md new file mode 100644 index 0000000000..d0ae1dc08f --- /dev/null +++ b/.changeset/olive-eyes-sing.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-stack-overflow-backend': minor +--- + +Enable configuration override for StackOverflow backend plugin when instantiating the search indexer. This makes it possible to set different configuration for frontend and backend of the plugin. diff --git a/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.ts b/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.ts index ebbad99d0a..807d6637c1 100644 --- a/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.ts +++ b/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.ts @@ -95,11 +95,11 @@ export class StackOverflowQuestionsCollatorFactory 'https://api.stackexchange.com/2.2'; const maxPage = options.maxPage || 100; return new StackOverflowQuestionsCollatorFactory({ - ...options, baseUrl, maxPage, apiKey, apiAccessToken, + ...options, }); } From 6151f8e07166a25e7940a303609ab11bdd91adcc Mon Sep 17 00:00:00 2001 From: Scott Guymer Date: Mon, 5 Dec 2022 09:19:49 +0100 Subject: [PATCH 02/99] Added some basic tests for stackoverflow backend plugin Signed-off-by: Scott Guymer --- plugins/stack-overflow-backend/package.json | 8 +- ...ckOverflowQuestionsCollatorFactory.test.ts | 151 ++++++++++++++++++ 2 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.test.ts diff --git a/plugins/stack-overflow-backend/package.json b/plugins/stack-overflow-backend/package.json index 5a58f54958..1750ddbc6c 100644 --- a/plugins/stack-overflow-backend/package.json +++ b/plugins/stack-overflow-backend/package.json @@ -32,13 +32,19 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/cli": "workspace:^", + "@backstage/backend-common": "workspace:^", "@backstage/config": "workspace:^", "@backstage/plugin-search-common": "workspace:^", "node-fetch": "^2.6.7", "qs": "^6.9.4", "winston": "^3.2.1" }, + "devDependencies": { + "@backstage/backend-test-utils": "workspace:^", + "@backstage/cli": "workspace:^", + "@backstage/plugin-search-backend-node": "workspace:^", + "msw": "^0.49.0" + }, "files": [ "dist", "config.d.ts" diff --git a/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.test.ts b/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.test.ts new file mode 100644 index 0000000000..9f2c316be4 --- /dev/null +++ b/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.test.ts @@ -0,0 +1,151 @@ +/* + * 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 { getVoidLogger } from '@backstage/backend-common'; +import { + StackOverflowQuestionsCollatorFactory, + StackOverflowQuestionsCollatorFactoryOptions, +} from './StackOverflowQuestionsCollatorFactory'; +import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; +import { TestPipeline } from '@backstage/plugin-search-backend-node'; +import { ConfigReader } from '@backstage/config'; +import { Readable } from 'stream'; +import { setupServer } from 'msw/node'; +import { rest } from 'msw'; + +const logger = getVoidLogger(); + +const mockQuestion = { + items: [ + { + tags: ['backstage'], + owner: { + display_name: 'The Riddler', + }, + answer_count: 1, + link: 'https://stack.overflow.local/questions/2911', + title: 'This is the first question', + }, + ], + has_more: false, +}; + +const mockOverrideQuestion = { + items: [ + { + tags: ['backstage'], + owner: { + display_name: 'The Riddler', + }, + answer_count: 1, + link: 'https://stack.overflow.local/questions/1', + title: 'This is the first question', + }, + { + tags: ['backstage'], + owner: { + display_name: 'The Riddler', + }, + answer_count: 1, + link: 'https://stack.overflow.local/questions/2', + title: 'this is another question', + }, + ], + has_more: false, +}; + +describe('StackOverflowQuestionsCollatorFactory', () => { + const config = new ConfigReader({ + stackoverflow: { + baseUrl: 'http://stack.overflow.local', + }, + }); + + const defaultOptions: StackOverflowQuestionsCollatorFactoryOptions = { + logger, + requestParams: { + tagged: ['developer-portal'], + pagesize: 100, + order: 'desc', + sort: 'activity', + }, + }; + + it('has expected type', () => { + const factory = StackOverflowQuestionsCollatorFactory.fromConfig( + config, + defaultOptions, + ); + expect(factory.type).toBe('stack-overflow'); + }); + + describe('getCollator', () => { + const worker = setupServer(); + setupRequestMockHandlers(worker); + + afterEach(async () => { + worker.resetHandlers(); + }); + + afterAll(async () => { + worker.close(); + }); + + it('returns a readable stream', async () => { + const factory = StackOverflowQuestionsCollatorFactory.fromConfig( + config, + defaultOptions, + ); + const collator = await factory.getCollator(); + expect(collator).toBeInstanceOf(Readable); + }); + + it('fetches from the configured endpoint', async () => { + worker.use( + rest.get('http://stack.overflow.local/questions', (_, res, ctx) => + res(ctx.status(200), ctx.json(mockQuestion)), + ), + ); + const factory = StackOverflowQuestionsCollatorFactory.fromConfig( + config, + defaultOptions, + ); + const collator = await factory.getCollator(); + const pipeline = TestPipeline.fromCollator(collator); + const { documents } = await pipeline.execute(); + + expect(documents).toHaveLength(mockQuestion.items.length); + }); + + it('fetches from the overridden endpoint', async () => { + worker.use( + rest.get('http://stack.overflow.override/questions', (_, res, ctx) => + res(ctx.status(200), ctx.json(mockOverrideQuestion)), + ), + ); + const factory = StackOverflowQuestionsCollatorFactory.fromConfig(config, { + logger, + baseUrl: 'http://stack.overflow.override', + requestParams: defaultOptions.requestParams, + }); + const collator = await factory.getCollator(); + + const pipeline = TestPipeline.fromCollator(collator); + const { documents } = await pipeline.execute(); + + expect(documents).toHaveLength(mockOverrideQuestion.items.length); + }); + }); +}); From 9e4725f8f4736dbccccef47a8ed640abc383e5c0 Mon Sep 17 00:00:00 2001 From: Scott Guymer Date: Mon, 5 Dec 2022 09:38:20 +0100 Subject: [PATCH 03/99] Updated yarn.lock Signed-off-by: Scott Guymer --- yarn.lock | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/yarn.lock b/yarn.lock index 4af9e1862a..9b8f80db7e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7845,9 +7845,13 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-stack-overflow-backend@workspace:plugins/stack-overflow-backend" dependencies: + "@backstage/backend-common": "workspace:^" + "@backstage/backend-test-utils": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" + "@backstage/plugin-search-backend-node": "workspace:^" "@backstage/plugin-search-common": "workspace:^" + msw: ^0.49.0 node-fetch: ^2.6.7 qs: ^6.9.4 winston: ^3.2.1 From 2f52b1274009c3542f578d290a894885f5d1b75e Mon Sep 17 00:00:00 2001 From: Scott Guymer Date: Wed, 7 Dec 2022 17:13:11 +0100 Subject: [PATCH 04/99] Remove cleanup calls as they are handled in the setup of msw Signed-off-by: Scott Guymer --- .../search/StackOverflowQuestionsCollatorFactory.test.ts | 8 -------- 1 file changed, 8 deletions(-) diff --git a/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.test.ts b/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.test.ts index 9f2c316be4..bdc5be125c 100644 --- a/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.test.ts +++ b/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.test.ts @@ -95,14 +95,6 @@ describe('StackOverflowQuestionsCollatorFactory', () => { const worker = setupServer(); setupRequestMockHandlers(worker); - afterEach(async () => { - worker.resetHandlers(); - }); - - afterAll(async () => { - worker.close(); - }); - it('returns a readable stream', async () => { const factory = StackOverflowQuestionsCollatorFactory.fromConfig( config, From 5a42d712790f05f4c7b34cb2674e73b48c97e715 Mon Sep 17 00:00:00 2001 From: Sarah Medeiros Date: Thu, 15 Dec 2022 15:55:42 -0500 Subject: [PATCH 05/99] Fix tag picker and add test Signed-off-by: Sarah Medeiros --- .../EntityTagPicker/EntityTagPicker.test.tsx | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.test.tsx b/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.test.tsx index 7da357d806..de7bbb89be 100644 --- a/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.test.tsx +++ b/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.test.tsx @@ -202,4 +202,33 @@ describe('', () => { tags: new EntityTagFilter(['tag2']), }); }); + it('removes tags from filters if there are none available', async () => { + const updateFilters = jest.fn(); + const mockCatalogApiRefNoTags = { + getEntityFacets: async () => ({ + facets: { + 'metadata.tags': {}, + }, + }), + } as unknown as CatalogApi; + + render( + + + + + , + , + ); + await waitFor(() => + expect(updateFilters).toHaveBeenLastCalledWith({ + tags: undefined, + }), + ); + }); }); From 37426f6f5ef206325d1165cacee665240ccbcaf1 Mon Sep 17 00:00:00 2001 From: Sarah Medeiros Date: Thu, 15 Dec 2022 15:57:00 -0500 Subject: [PATCH 06/99] Add changeset Signed-off-by: Sarah Medeiros --- .changeset/funny-pianos-grow.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/funny-pianos-grow.md diff --git a/.changeset/funny-pianos-grow.md b/.changeset/funny-pianos-grow.md new file mode 100644 index 0000000000..b08b5f0768 --- /dev/null +++ b/.changeset/funny-pianos-grow.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': patch +--- + +Fix filter bug that leaves filters selected when they are not available for the selected kind. From 228f4db4fa541a4a070f8c805ac624f8ca7807d6 Mon Sep 17 00:00:00 2001 From: Sarah Medeiros Date: Thu, 15 Dec 2022 15:57:57 -0500 Subject: [PATCH 07/99] Fix tag filter bug Signed-off-by: Sarah Medeiros --- .../src/components/EntityTagPicker/EntityTagPicker.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.tsx b/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.tsx index 25f02e8adc..1b7b68cbde 100644 --- a/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.tsx +++ b/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.tsx @@ -94,9 +94,12 @@ export const EntityTagPicker = (props: EntityTagPickerProps) => { useEffect(() => { updateFilters({ - tags: selectedTags.length ? new EntityTagFilter(selectedTags) : undefined, + tags: + selectedTags.length && Object.keys(availableTags ?? {}).length + ? new EntityTagFilter(selectedTags) + : undefined, }); - }, [selectedTags, updateFilters]); + }, [selectedTags, updateFilters, availableTags]); if (!Object.keys(availableTags ?? {}).length) return null; From 7a7a53138b3a3a13fad970a046a3d6250350eaf5 Mon Sep 17 00:00:00 2001 From: Sarah Medeiros Date: Fri, 16 Dec 2022 09:58:18 -0500 Subject: [PATCH 08/99] Update .changeset/funny-pianos-grow.md Co-authored-by: Johan Haals Signed-off-by: Sarah Medeiros --- .changeset/funny-pianos-grow.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/funny-pianos-grow.md b/.changeset/funny-pianos-grow.md index b08b5f0768..7823ca82b0 100644 --- a/.changeset/funny-pianos-grow.md +++ b/.changeset/funny-pianos-grow.md @@ -2,4 +2,4 @@ '@backstage/plugin-catalog-react': patch --- -Fix filter bug that leaves filters selected when they are not available for the selected kind. +Fixed bug in `EntityTagPicker` that filtered on unavailable tags for the selected kind. From 2f45ef5cf275d256885c22b115809e4628776c26 Mon Sep 17 00:00:00 2001 From: Sarah Medeiros Date: Fri, 16 Dec 2022 10:34:38 -0500 Subject: [PATCH 09/99] Add changeset for pr #15058 Signed-off-by: Sarah Medeiros --- .changeset/funny-pianos-grow.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.changeset/funny-pianos-grow.md b/.changeset/funny-pianos-grow.md index 7823ca82b0..c9241cd818 100644 --- a/.changeset/funny-pianos-grow.md +++ b/.changeset/funny-pianos-grow.md @@ -3,3 +3,7 @@ --- Fixed bug in `EntityTagPicker` that filtered on unavailable tags for the selected kind. + +Fixed bug in `EntityOwnerPicker` that filtered on unavailable tags for the selected kind. + +Fixed bug in `EntityKindPicker` that filtered on unavailable tags for the selected kind. From 2bce511a1084b3088f3ce29a7111d30724a2b8c2 Mon Sep 17 00:00:00 2001 From: Sarah Medeiros Date: Fri, 16 Dec 2022 10:35:43 -0500 Subject: [PATCH 10/99] Fix wording Signed-off-by: Sarah Medeiros --- .changeset/funny-pianos-grow.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/funny-pianos-grow.md b/.changeset/funny-pianos-grow.md index c9241cd818..17f1d83927 100644 --- a/.changeset/funny-pianos-grow.md +++ b/.changeset/funny-pianos-grow.md @@ -6,4 +6,4 @@ Fixed bug in `EntityTagPicker` that filtered on unavailable tags for the selecte Fixed bug in `EntityOwnerPicker` that filtered on unavailable tags for the selected kind. -Fixed bug in `EntityKindPicker` that filtered on unavailable tags for the selected kind. +Fixed bug in `EntityLifecyclePicker` that filtered on unavailable tags for the selected kind. From f75bf763309b7a710b02cf8a5d88aeb17a7ebee7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Mon, 19 Dec 2022 13:44:30 +0100 Subject: [PATCH 11/99] implement ordering in the catalog backend and client MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/fifty-zoos-nail.md | 5 + .changeset/silver-chicken-travel.md | 5 + packages/catalog-client/api-report.md | 12 ++ .../catalog-client/src/CatalogClient.test.ts | 23 ++++ packages/catalog-client/src/CatalogClient.ts | 23 +++- packages/catalog-client/src/types/api.ts | 46 +++++++ packages/catalog-client/src/types/index.ts | 1 + plugins/catalog-backend/src/catalog/types.ts | 9 ++ .../service/DefaultEntitiesCatalog.test.ts | 124 ++++++++++++++++-- .../src/service/DefaultEntitiesCatalog.ts | 46 ++++++- .../src/service/createRouter.ts | 2 + .../request/parseEntityOrderParams.test.ts | 43 ++++++ .../service/request/parseEntityOrderParams.ts | 48 +++++++ 13 files changed, 370 insertions(+), 17 deletions(-) create mode 100644 .changeset/fifty-zoos-nail.md create mode 100644 .changeset/silver-chicken-travel.md create mode 100644 plugins/catalog-backend/src/service/request/parseEntityOrderParams.test.ts create mode 100644 plugins/catalog-backend/src/service/request/parseEntityOrderParams.ts diff --git a/.changeset/fifty-zoos-nail.md b/.changeset/fifty-zoos-nail.md new file mode 100644 index 0000000000..7260a0b542 --- /dev/null +++ b/.changeset/fifty-zoos-nail.md @@ -0,0 +1,5 @@ +--- +'@backstage/catalog-client': minor +--- + +Implemented support for the `order` directive on `getEntities` diff --git a/.changeset/silver-chicken-travel.md b/.changeset/silver-chicken-travel.md new file mode 100644 index 0000000000..e5dea6381d --- /dev/null +++ b/.changeset/silver-chicken-travel.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': minor +--- + +Implemented server side ordering in the entities endpoint diff --git a/packages/catalog-client/api-report.md b/packages/catalog-client/api-report.md index 2f76be79e2..a81314308b 100644 --- a/packages/catalog-client/api-report.md +++ b/packages/catalog-client/api-report.md @@ -161,6 +161,17 @@ export type EntityFilterQuery = | Record[] | Record; +// @public +export type EntityOrderQuery = + | { + field: string; + order: 'asc' | 'desc'; + } + | Array<{ + field: string; + order: 'asc' | 'desc'; + }>; + // @public export interface GetEntitiesByRefsRequest { entityRefs: string[]; @@ -179,6 +190,7 @@ export interface GetEntitiesRequest { filter?: EntityFilterQuery; limit?: number; offset?: number; + order?: EntityOrderQuery; } // @public diff --git a/packages/catalog-client/src/CatalogClient.test.ts b/packages/catalog-client/src/CatalogClient.test.ts index 1206d557c1..f87b12353d 100644 --- a/packages/catalog-client/src/CatalogClient.test.ts +++ b/packages/catalog-client/src/CatalogClient.test.ts @@ -193,6 +193,29 @@ describe('CatalogClient', () => { expect(response.items).toEqual([]); }); + + it('handles ordering properly', async () => { + expect.assertions(2); + + server.use( + rest.get(`${mockBaseUrl}/entities`, (req, res, ctx) => { + expect(req.url.search).toBe('?order=kind&order=-metadata.name'); + return res(ctx.json([])); + }), + ); + + const response = await client.getEntities( + { + order: [ + { field: 'kind', order: 'asc' }, + { field: 'metadata.name', order: 'desc' }, + ], + }, + { token }, + ); + + expect(response.items).toEqual([]); + }); }); describe('getEntitiesByRefs', () => { diff --git a/packages/catalog-client/src/CatalogClient.ts b/packages/catalog-client/src/CatalogClient.ts index d15f382ddd..0a5954d4bd 100644 --- a/packages/catalog-client/src/CatalogClient.ts +++ b/packages/catalog-client/src/CatalogClient.ts @@ -99,7 +99,14 @@ export class CatalogClient implements CatalogApi { request?: GetEntitiesRequest, options?: CatalogRequestOptions, ): Promise { - const { filter = [], fields = [], offset, limit, after } = request ?? {}; + const { + filter = [], + fields = [], + order, + offset, + limit, + after, + } = request ?? {}; const params: string[] = []; // filter param can occur multiple times, for example @@ -129,6 +136,20 @@ export class CatalogClient implements CatalogApi { params.push(`fields=${fields.map(encodeURIComponent).join(',')}`); } + if (order) { + for (const directive of [order].flat()) { + if (directive) { + // We could choose to always put in the + prefix, but it's not + // required (ascending sort is the default) and it always gets URL + // encoded to %2B which looks a bit less pretty - so we don't + const str = `${directive.order === 'desc' ? '-' : ''}${ + directive.field + }`; + params.push(`order=${encodeURIComponent(str)}`); + } + } + } + if (offset !== undefined) { params.push(`offset=${offset}`); } diff --git a/packages/catalog-client/src/types/api.ts b/packages/catalog-client/src/types/api.ts index 771adaaeee..d662a9d106 100644 --- a/packages/catalog-client/src/types/api.ts +++ b/packages/catalog-client/src/types/api.ts @@ -98,6 +98,48 @@ export type EntityFilterQuery = */ export type EntityFieldsQuery = string[]; +/** + * Dot-separated field based ordering directives, controlling the sort order of + * the output entities. + * + * @remarks + * + * Each field is a dot-separated path into an entity's keys. The order is either + * ascending (`asc`, lexicographical order) or descending (`desc`, reverse + * lexicographical order). The ordering is case insensitive. + * + * If more than one order directive is given, later directives have lower + * precedence (they are applied only when directives of higher precedence have + * equal values). + * + * Example: + * + * ``` + * [ + * { field: 'kind', order: 'asc' }, + * { field: 'metadata.name', order: 'desc' }, + * ] + * ``` + * + * This will order the output first by kind ascending, and then within each kind + * (if there's more than one of a given kind) by their name descending. + * + * When given a field that does NOT exist on all entities in the result set, + * those entities that do not have the field will always be sorted last in that + * particular order step, no matter what the desired order was. + * + * @public + */ +export type EntityOrderQuery = + | { + field: string; + order: 'asc' | 'desc'; + } + | Array<{ + field: string; + order: 'asc' | 'desc'; + }>; + /** * The request type for {@link CatalogClient.getEntities}. * @@ -113,6 +155,10 @@ export interface GetEntitiesRequest { * declarations. */ fields?: EntityFieldsQuery; + /** + *If given, order the result set by those directives. + */ + order?: EntityOrderQuery; /** * If given, skips over the first N items in the result set. */ diff --git a/packages/catalog-client/src/types/index.ts b/packages/catalog-client/src/types/index.ts index 5ac058e349..81b985eb42 100644 --- a/packages/catalog-client/src/types/index.ts +++ b/packages/catalog-client/src/types/index.ts @@ -22,6 +22,7 @@ export type { CatalogRequestOptions, EntityFieldsQuery, EntityFilterQuery, + EntityOrderQuery, GetEntitiesByRefsRequest, GetEntitiesByRefsResponse, GetEntitiesRequest, diff --git a/plugins/catalog-backend/src/catalog/types.ts b/plugins/catalog-backend/src/catalog/types.ts index 84673a3900..faf7451acd 100644 --- a/plugins/catalog-backend/src/catalog/types.ts +++ b/plugins/catalog-backend/src/catalog/types.ts @@ -38,6 +38,14 @@ export type EntityPagination = { after?: string; }; +/** + * A sorting rule for entities. + */ +export type EntityOrder = { + field: string; + order: 'asc' | 'desc'; +}; + /** * Matches rows in the search table. * @public @@ -71,6 +79,7 @@ export type PageInfo = export type EntitiesRequest = { filter?: EntityFilter; fields?: (entity: Entity) => Entity; + order?: EntityOrder[]; pagination?: EntityPagination; authorizationToken?: string; }; diff --git a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts index b84596c78c..6735709662 100644 --- a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts +++ b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts @@ -28,6 +28,7 @@ import { import { Stitcher } from '../stitching/Stitcher'; import { buildEntitySearch } from '../stitching/buildEntitySearch'; import { DefaultEntitiesCatalog } from './DefaultEntitiesCatalog'; +import { EntitiesRequest } from '../catalog/types'; describe('DefaultEntitiesCatalog', () => { const databases = TestDatabases.create({ @@ -254,7 +255,7 @@ describe('DefaultEntitiesCatalog', () => { describe('entities', () => { it.each(databases.eachSupportedId())( - 'should return correct entity for simple filter', + 'should return correct entity for simple filter, %p', async databaseId => { const { knex } = await createDatabase(databaseId); const entity1: Entity = { @@ -284,10 +285,11 @@ describe('DefaultEntitiesCatalog', () => { expect(entities.length).toBe(1); expect(entities[0]).toEqual(entity2); }, + 60_000, ); it.each(databases.eachSupportedId())( - 'should return correct entity for negation filter', + 'should return correct entity for negation filter, %p', async databaseId => { const { knex } = await createDatabase(databaseId); const entity1: Entity = { @@ -319,10 +321,11 @@ describe('DefaultEntitiesCatalog', () => { expect(entities.length).toBe(1); expect(entities[0]).toEqual(entity1); }, + 60_000, ); it.each(databases.eachSupportedId())( - 'should return correct entities for nested filter', + 'should return correct entities for nested filter, %p', async databaseId => { const { knex } = await createDatabase(databaseId); const entity1: Entity = { @@ -388,10 +391,11 @@ describe('DefaultEntitiesCatalog', () => { expect(entities).toContainEqual(entity2); expect(entities).toContainEqual(entity4); }, + 60_000, ); it.each(databases.eachSupportedId())( - 'should return correct entities for complex negation filter', + 'should return correct entities for complex negation filter, %p', async databaseId => { const { knex } = await createDatabase(databaseId); const entity1: Entity = { @@ -429,10 +433,11 @@ describe('DefaultEntitiesCatalog', () => { expect(entities.length).toBe(1); expect(entities).toContainEqual(entity1); }, + 60_000, ); it.each(databases.eachSupportedId())( - 'should return no matches for an empty values array', + 'should return no matches for an empty values array, %p', // NOTE: An empty values array is not a sensible input in a realistic scenario. async databaseId => { const { knex } = await createDatabase(databaseId); @@ -461,6 +466,7 @@ describe('DefaultEntitiesCatalog', () => { expect(entities.length).toBe(0); }, + 60_000, ); it.each(databases.eachSupportedId())( @@ -517,12 +523,105 @@ describe('DefaultEntitiesCatalog', () => { }, ]); }, + 60_000, + ); + + it.each(databases.eachSupportedId())( + 'can order and combine with filtering, %p', + async databaseId => { + const { knex } = await createDatabase(databaseId); + + const entity1: Entity = { + apiVersion: 'a', + kind: 'k', + metadata: { name: 'n1' }, + spec: { a: 'foo' }, + }; + const entity2: Entity = { + apiVersion: 'a', + kind: 'k', + metadata: { name: 'n2' }, + spec: { a: 'bar' }, + }; + const entity3: Entity = { + apiVersion: 'a', + kind: 'k', + metadata: { name: 'n3' }, + spec: { a: 'bar', b: 'lonely' }, + }; + const entity4: Entity = { + apiVersion: 'a', + kind: 'k', + metadata: { name: 'n4' }, + spec: { a: 'baz', b: 'only' }, + }; + await addEntityToSearch(knex, entity1); + await addEntityToSearch(knex, entity2); + await addEntityToSearch(knex, entity3); + await addEntityToSearch(knex, entity4); + + const catalog = new DefaultEntitiesCatalog(knex, stitcher); + + function f(request: EntitiesRequest): Promise { + return catalog + .entities(request) + .then(response => response.entities.map(e => e.metadata.name)); + } + + await expect( + f({ order: [{ field: 'metadata.name', order: 'asc' }] }), + ).resolves.toEqual(['n1', 'n2', 'n3', 'n4']); + + await expect( + f({ order: [{ field: 'metadata.name', order: 'desc' }] }), + ).resolves.toEqual(['n4', 'n3', 'n2', 'n1']); + + await expect( + f({ + order: [ + { field: 'spec.a', order: 'asc' }, + { field: 'metadata.name', order: 'desc' }, + ], + }), + ).resolves.toEqual(['n3', 'n2', 'n4', 'n1']); + + await expect( + f({ + filter: { not: { key: 'spec.b', values: ['lonely'] } }, + order: [ + { field: 'spec.a', order: 'asc' }, + { field: 'metadata.name', order: 'desc' }, + ], + }), + ).resolves.toEqual(['n2', 'n4', 'n1']); + + // only n3 and n4 has spec.b, nulls (no match) always goes last no matter the order + await expect( + f({ + order: [ + { field: 'spec.b', order: 'asc' }, + { field: 'metadata.name', order: 'asc' }, + ], + }), + ).resolves.toEqual(['n3', 'n4', 'n1', 'n2']); + + // only n3 and n4 has spec.b, nulls (no match) always goes last no matter the order + await expect( + f({ + order: [ + { field: 'spec.b', order: 'desc' }, + { field: 'metadata.name', order: 'asc' }, + ], + }), + ).resolves.toEqual(['n4', 'n3', 'n1', 'n2']); + }, + 60_000, ); }); describe('entitiesBatch', () => { it.each(databases.eachSupportedId())( - 'queries for entities by ref, including duplicates, and gracefully returns null for missing entities', + 'queries for entities by ref, including duplicates, and gracefully returns null for missing entities, %p', async databaseId => { const { knex } = await createDatabase(databaseId); @@ -571,12 +670,13 @@ describe('DefaultEntitiesCatalog', () => { 'k:default/two', ]); }, + 60_000, ); }); describe('removeEntityByUid', () => { it.each(databases.eachSupportedId())( - 'also clears parent hashes', + 'also clears parent hashes, %p', async databaseId => { const { knex } = await createDatabase(databaseId); @@ -659,12 +759,13 @@ describe('DefaultEntitiesCatalog', () => { new Set(['k:default/unrelated1', 'k:default/unrelated2']), ); }, + 60_000, ); }); describe('facets', () => { it.each(databases.eachSupportedId())( - 'can filter and collect properly', + 'can filter and collect properly, %p', async databaseId => { const { knex } = await createDatabase(databaseId); @@ -697,10 +798,11 @@ describe('DefaultEntitiesCatalog', () => { }, }); }, + 60_000, ); it.each(databases.eachSupportedId())( - 'can match on annotations and labels with dots in them', + 'can match on annotations and labels with dots in them, %p', async databaseId => { const { knex } = await createDatabase(databaseId); @@ -743,10 +845,11 @@ describe('DefaultEntitiesCatalog', () => { }, }); }, + 60_000, ); it.each(databases.eachSupportedId())( - 'can match on strings in arrays', + 'can match on strings in arrays, %p', async databaseId => { const { knex } = await createDatabase(databaseId); @@ -784,6 +887,7 @@ describe('DefaultEntitiesCatalog', () => { }, }); }, + 60_000, ); }); }); diff --git a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts index 14f22f862b..d598881371 100644 --- a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts +++ b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts @@ -97,7 +97,7 @@ function addCondition( // make a lot of sense. However, it had abysmal performance on sqlite // when datasets grew large, so we're using IN instead. const matchQuery = db('search') - .select(entityIdField) + .select('search.entity_id') .where({ key: filter.key.toLowerCase() }) .andWhere(function keyFilter() { if (filter.values) { @@ -178,14 +178,48 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog { let entitiesQuery = db('final_entities').select('final_entities.*'); + + request?.order?.forEach(({ field }, index) => { + const alias = `order_${index}`; + entitiesQuery = entitiesQuery.leftOuterJoin( + { [alias]: 'search' }, + function search(inner) { + inner + .on(`${alias}.entity_id`, 'final_entities.entity_id') + .andOn(`${alias}.key`, db.raw('?', [field])); + }, + ); + }); + + entitiesQuery = entitiesQuery.whereNotNull('final_entities.final_entity'); + if (request?.filter) { - entitiesQuery = parseFilter(request.filter, entitiesQuery, db); + entitiesQuery = parseFilter( + request.filter, + entitiesQuery, + db, + false, + 'final_entities.entity_id', + ); } - // TODO: move final_entities to use entity_ref - entitiesQuery = entitiesQuery - .whereNotNull('final_entities.final_entity') - .orderBy('entity_id', 'asc'); + request?.order?.forEach(({ order }, index) => { + if (db.client.config.client === 'pg') { + // pg correctly orders by the column value and handling nulls in one go + entitiesQuery = entitiesQuery.orderBy([ + { column: `order_${index}.value`, order, nulls: 'last' }, + ]); + } else { + // sqlite and mysql translate the above statement ONLY into "order by (value is null) asc" + // no matter what the order is, for some reason, so we have to manually add back the statement + // that translates to "order by value " while avoiding to give an order + entitiesQuery = entitiesQuery.orderBy([ + { column: `order_${index}.value`, order: undefined, nulls: 'last' }, + { column: `order_${index}.value`, order }, + ]); + } + }); + entitiesQuery = entitiesQuery.orderBy('final_entities.entity_id', 'asc'); // stable sort const { limit, offset } = parsePagination(request?.pagination); if (limit !== undefined) { diff --git a/plugins/catalog-backend/src/service/createRouter.ts b/plugins/catalog-backend/src/service/createRouter.ts index 4680dbb899..6a31fcd0b6 100644 --- a/plugins/catalog-backend/src/service/createRouter.ts +++ b/plugins/catalog-backend/src/service/createRouter.ts @@ -41,6 +41,7 @@ import { parseEntityTransformParams, } from './request'; import { parseEntityFacetParams } from './request/parseEntityFacetParams'; +import { parseEntityOrderParams } from './request/parseEntityOrderParams'; import { LocationService, RefreshOptions, RefreshService } from './types'; import { disallowReadonlyMode, @@ -113,6 +114,7 @@ export async function createRouter( const { entities, pageInfo } = await entitiesCatalog.entities({ filter: parseEntityFilterParams(req.query), fields: parseEntityTransformParams(req.query), + order: parseEntityOrderParams(req.query), pagination: parseEntityPaginationParams(req.query), authorizationToken: getBearerToken(req.header('authorization')), }); diff --git a/plugins/catalog-backend/src/service/request/parseEntityOrderParams.test.ts b/plugins/catalog-backend/src/service/request/parseEntityOrderParams.test.ts new file mode 100644 index 0000000000..77cf73f57b --- /dev/null +++ b/plugins/catalog-backend/src/service/request/parseEntityOrderParams.test.ts @@ -0,0 +1,43 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { parseEntityOrderParams } from './parseEntityOrderParams'; + +describe('parseEntityOrderParams', () => { + it('handles missing parameter', () => { + expect(parseEntityOrderParams({})).toBeUndefined(); + }); + + it('handles parameters with various orders', () => { + expect(parseEntityOrderParams({ order: ['a', '+b', '-c'] })).toEqual([ + { field: 'a', order: 'asc' }, + { field: 'b', order: 'asc' }, + { field: 'c', order: 'desc' }, + ]); + }); + + it('rejects missing order or key', () => { + expect(() => parseEntityOrderParams({ order: [''] })).toThrow( + 'Invalid order parameter "", no field given', + ); + expect(() => parseEntityOrderParams({ order: ['+'] })).toThrow( + 'Invalid order parameter "+", no field given', + ); + expect(() => parseEntityOrderParams({ order: ['-'] })).toThrow( + 'Invalid order parameter "-", no field given', + ); + }); +}); diff --git a/plugins/catalog-backend/src/service/request/parseEntityOrderParams.ts b/plugins/catalog-backend/src/service/request/parseEntityOrderParams.ts new file mode 100644 index 0000000000..d10119fd47 --- /dev/null +++ b/plugins/catalog-backend/src/service/request/parseEntityOrderParams.ts @@ -0,0 +1,48 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { InputError } from '@backstage/errors'; +import { EntityOrder } from '../../catalog/types'; +import { parseStringsParam } from './common'; + +export function parseEntityOrderParams( + params: Record, +): EntityOrder[] | undefined { + return parseStringsParam(params.order, 'order')?.map(item => { + let order: 'asc' | 'desc'; + let field: string; + switch (item[0]) { + case '+': + order = 'asc'; + field = item.slice(1).trim(); + break; + case '-': + order = 'desc'; + field = item.slice(1).trim(); + break; + default: + order = 'asc'; + field = item.trim(); + break; + } + + if (!field) { + throw new InputError(`Invalid order parameter "${item}", no field given`); + } + + return { field, order }; + }); +} From c37b9e4c68ab7a0243d9f25bd4a2f3efb27415f6 Mon Sep 17 00:00:00 2001 From: Sarah Medeiros Date: Mon, 19 Dec 2022 10:12:29 -0500 Subject: [PATCH 12/99] Clean up ternary Signed-off-by: Sarah Medeiros --- .../src/components/EntityTagPicker/EntityTagPicker.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.tsx b/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.tsx index 1b7b68cbde..4a1dc03e96 100644 --- a/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.tsx +++ b/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.tsx @@ -93,9 +93,10 @@ export const EntityTagPicker = (props: EntityTagPickerProps) => { }, [queryParamTags]); useEffect(() => { + const tags = Object.keys(availableTags ?? {}); updateFilters({ tags: - selectedTags.length && Object.keys(availableTags ?? {}).length + selectedTags.length && tags.length ? new EntityTagFilter(selectedTags) : undefined, }); From 3c112f69671652b7c0b082ca763f3aee7760cf5c Mon Sep 17 00:00:00 2001 From: Paul Cowan Date: Tue, 20 Dec 2022 10:43:10 +0000 Subject: [PATCH 13/99] rollback @rjsf/validator-ajv8 to @rjsf/validator-v6 Signed-off-by: Paul Cowan --- .changeset/eight-dragons-accept.md | 5 +++++ .yarnrc.yml | 2 ++ plugins/scaffolder/api-report.md | 8 ++++---- plugins/scaffolder/package.json | 2 +- .../src/next/TemplateWizardPage/Stepper/Stepper.tsx | 2 +- yarn.lock | 8 ++++---- 6 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 .changeset/eight-dragons-accept.md diff --git a/.changeset/eight-dragons-accept.md b/.changeset/eight-dragons-accept.md new file mode 100644 index 0000000000..733fd6ddbc --- /dev/null +++ b/.changeset/eight-dragons-accept.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +rollback @rjsf/validator-ajv8 to @rjsf/validator-v6 diff --git a/.yarnrc.yml b/.yarnrc.yml index 0b1cd8e1ae..c2d39a20f3 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -11,3 +11,5 @@ plugins: spec: '@yarnpkg/plugin-workspace-tools' yarnPath: .yarn/releases/yarn-3.2.3.cjs + +checksumBehavior: update diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index 7611e952dc..12436785d6 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -110,9 +110,9 @@ export type EntityPickerUiOptions = export const EntityTagsPickerFieldExtension: FieldExtensionComponent< string[], { - showCounts?: boolean | undefined; - kinds?: string[] | undefined; helperText?: string | undefined; + kinds?: string[] | undefined; + showCounts?: boolean | undefined; } >; @@ -120,9 +120,9 @@ export const EntityTagsPickerFieldExtension: FieldExtensionComponent< export const EntityTagsPickerFieldSchema: FieldSchema< string[], { - showCounts?: boolean | undefined; - kinds?: string[] | undefined; helperText?: string | undefined; + kinds?: string[] | undefined; + showCounts?: boolean | undefined; } >; diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 90c76fe9c9..2fcd4cf2cc 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -59,7 +59,7 @@ "@rjsf/material-ui": "^3.2.1", "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@^5.0.0-beta.14", "@rjsf/utils": "^5.0.0-beta.14", - "@rjsf/validator-ajv8": "^5.0.0-beta.14", + "@rjsf/validator-ajv6": "^5.0.0-beta.14", "@types/json-schema": "^7.0.9", "@uiw/react-codemirror": "^4.9.3", "classnames": "^2.2.6", diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx index 27230b2f7b..3d5cb1bfd2 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx @@ -34,7 +34,7 @@ import { TemplateParameterSchema } from '../../../types'; import { createAsyncValidators } from './createAsyncValidators'; import { useTemplateSchema } from './useTemplateSchema'; import { ReviewState } from './ReviewState'; -import validator from '@rjsf/validator-ajv8'; +import validator from '@rjsf/validator-ajv6'; import { selectedTemplateRouteRef } from '../../../routes'; import { getDefaultFormState } from '@rjsf/utils'; import { useFormData } from './useFormData'; diff --git a/yarn.lock b/yarn.lock index b20a8ce49b..7996f3e587 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7489,7 +7489,7 @@ __metadata: "@rjsf/material-ui": ^3.2.1 "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@^5.0.0-beta.14" "@rjsf/utils": ^5.0.0-beta.14 - "@rjsf/validator-ajv8": ^5.0.0-beta.14 + "@rjsf/validator-ajv6": ^5.0.0-beta.14 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -12762,9 +12762,9 @@ __metadata: languageName: node linkType: hard -"@rjsf/validator-ajv8@npm:^5.0.0-beta.14": +"@rjsf/validator-ajv6@npm:^5.0.0-beta.14": version: 5.0.0-beta.14 - resolution: "@rjsf/validator-ajv8@npm:5.0.0-beta.14" + resolution: "@rjsf/validator-ajv6@npm:5.0.0-beta.14" dependencies: ajv-formats: ^2.1.1 ajv8: "npm:ajv@^8.11.0" @@ -12772,7 +12772,7 @@ __metadata: lodash-es: ^4.17.15 peerDependencies: "@rjsf/utils": ^5.0.0-beta.12 - checksum: 14f31eabf6bb668953dcedd1c4b2c1dce4d98022600aa511451798a211a0b00a1f50abd861fce8891f7d6dfeb0a0885bcf1686b6d3a7f4add746abe8b58fc8b0 + checksum: 57b5c6968475a66762f644f2832aad077f8dde0ca9e71c8b0b27c06174855b7e6330f44fa6078fc0f347b728a4a5fd62399378fad26ada3cde32da89bddf6f9f languageName: node linkType: hard From 0089bb9065f95511df14db1375a90f1dea7120b0 Mon Sep 17 00:00:00 2001 From: Paul Cowan Date: Tue, 20 Dec 2022 10:50:36 +0000 Subject: [PATCH 14/99] remove chcksum setting in yarnrc Signed-off-by: Paul Cowan --- .yarnrc.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.yarnrc.yml b/.yarnrc.yml index c2d39a20f3..0b1cd8e1ae 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -11,5 +11,3 @@ plugins: spec: '@yarnpkg/plugin-workspace-tools' yarnPath: .yarn/releases/yarn-3.2.3.cjs - -checksumBehavior: update From 82bcb7b232c5e441fe8bfd216a3380723e461a4c Mon Sep 17 00:00:00 2001 From: Paul Cowan Date: Tue, 20 Dec 2022 10:53:33 +0000 Subject: [PATCH 15/99] update changeset Signed-off-by: Paul Cowan --- .changeset/eight-dragons-accept.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/eight-dragons-accept.md b/.changeset/eight-dragons-accept.md index 733fd6ddbc..a3d46de4a3 100644 --- a/.changeset/eight-dragons-accept.md +++ b/.changeset/eight-dragons-accept.md @@ -2,4 +2,4 @@ '@backstage/plugin-scaffolder': patch --- -rollback @rjsf/validator-ajv8 to @rjsf/validator-v6 +rollback `@rjsf/validator-ajv8` to `@rjsf/validator-v6` From b5c0bc2c505796dd8a8176cdbfd26f98fad01532 Mon Sep 17 00:00:00 2001 From: Paul Cowan Date: Tue, 20 Dec 2022 11:12:30 +0000 Subject: [PATCH 16/99] run api-report Signed-off-by: Paul Cowan --- plugins/scaffolder/api-report.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index 12436785d6..7611e952dc 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -110,9 +110,9 @@ export type EntityPickerUiOptions = export const EntityTagsPickerFieldExtension: FieldExtensionComponent< string[], { - helperText?: string | undefined; - kinds?: string[] | undefined; showCounts?: boolean | undefined; + kinds?: string[] | undefined; + helperText?: string | undefined; } >; @@ -120,9 +120,9 @@ export const EntityTagsPickerFieldExtension: FieldExtensionComponent< export const EntityTagsPickerFieldSchema: FieldSchema< string[], { - helperText?: string | undefined; - kinds?: string[] | undefined; showCounts?: boolean | undefined; + kinds?: string[] | undefined; + helperText?: string | undefined; } >; From da3acc344af315d5439f9f85d7ee423d1db4ff83 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 20 Dec 2022 14:58:40 +0000 Subject: [PATCH 17/99] chore(deps): update dependency esbuild to v0.16.10 Signed-off-by: Renovate Bot --- yarn.lock | 182 +++++++++++++++++++++++++++--------------------------- 1 file changed, 91 insertions(+), 91 deletions(-) diff --git a/yarn.lock b/yarn.lock index e0005eec02..1049b71bea 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8844,9 +8844,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/android-arm64@npm:0.16.7" +"@esbuild/android-arm64@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/android-arm64@npm:0.16.10" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -8858,65 +8858,65 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/android-arm@npm:0.16.7" +"@esbuild/android-arm@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/android-arm@npm:0.16.10" conditions: os=android & cpu=arm languageName: node linkType: hard -"@esbuild/android-x64@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/android-x64@npm:0.16.7" +"@esbuild/android-x64@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/android-x64@npm:0.16.10" conditions: os=android & cpu=x64 languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/darwin-arm64@npm:0.16.7" +"@esbuild/darwin-arm64@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/darwin-arm64@npm:0.16.10" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/darwin-x64@npm:0.16.7" +"@esbuild/darwin-x64@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/darwin-x64@npm:0.16.10" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/freebsd-arm64@npm:0.16.7" +"@esbuild/freebsd-arm64@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/freebsd-arm64@npm:0.16.10" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/freebsd-x64@npm:0.16.7" +"@esbuild/freebsd-x64@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/freebsd-x64@npm:0.16.10" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/linux-arm64@npm:0.16.7" +"@esbuild/linux-arm64@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/linux-arm64@npm:0.16.10" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/linux-arm@npm:0.16.7" +"@esbuild/linux-arm@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/linux-arm@npm:0.16.10" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/linux-ia32@npm:0.16.7" +"@esbuild/linux-ia32@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/linux-ia32@npm:0.16.10" conditions: os=linux & cpu=ia32 languageName: node linkType: hard @@ -8928,86 +8928,86 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/linux-loong64@npm:0.16.7" +"@esbuild/linux-loong64@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/linux-loong64@npm:0.16.10" conditions: os=linux & cpu=loong64 languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/linux-mips64el@npm:0.16.7" +"@esbuild/linux-mips64el@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/linux-mips64el@npm:0.16.10" conditions: os=linux & cpu=mips64el languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/linux-ppc64@npm:0.16.7" +"@esbuild/linux-ppc64@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/linux-ppc64@npm:0.16.10" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/linux-riscv64@npm:0.16.7" +"@esbuild/linux-riscv64@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/linux-riscv64@npm:0.16.10" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/linux-s390x@npm:0.16.7" +"@esbuild/linux-s390x@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/linux-s390x@npm:0.16.10" conditions: os=linux & cpu=s390x languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/linux-x64@npm:0.16.7" +"@esbuild/linux-x64@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/linux-x64@npm:0.16.10" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/netbsd-x64@npm:0.16.7" +"@esbuild/netbsd-x64@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/netbsd-x64@npm:0.16.10" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/openbsd-x64@npm:0.16.7" +"@esbuild/openbsd-x64@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/openbsd-x64@npm:0.16.10" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/sunos-x64@npm:0.16.7" +"@esbuild/sunos-x64@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/sunos-x64@npm:0.16.10" conditions: os=sunos & cpu=x64 languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/win32-arm64@npm:0.16.7" +"@esbuild/win32-arm64@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/win32-arm64@npm:0.16.10" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/win32-ia32@npm:0.16.7" +"@esbuild/win32-ia32@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/win32-ia32@npm:0.16.10" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.16.7": - version: 0.16.7 - resolution: "@esbuild/win32-x64@npm:0.16.7" +"@esbuild/win32-x64@npm:0.16.10": + version: 0.16.10 + resolution: "@esbuild/win32-x64@npm:0.16.10" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -21203,31 +21203,31 @@ __metadata: linkType: hard "esbuild@npm:^0.16.0": - version: 0.16.7 - resolution: "esbuild@npm:0.16.7" + version: 0.16.10 + resolution: "esbuild@npm:0.16.10" dependencies: - "@esbuild/android-arm": 0.16.7 - "@esbuild/android-arm64": 0.16.7 - "@esbuild/android-x64": 0.16.7 - "@esbuild/darwin-arm64": 0.16.7 - "@esbuild/darwin-x64": 0.16.7 - "@esbuild/freebsd-arm64": 0.16.7 - "@esbuild/freebsd-x64": 0.16.7 - "@esbuild/linux-arm": 0.16.7 - "@esbuild/linux-arm64": 0.16.7 - "@esbuild/linux-ia32": 0.16.7 - "@esbuild/linux-loong64": 0.16.7 - "@esbuild/linux-mips64el": 0.16.7 - "@esbuild/linux-ppc64": 0.16.7 - "@esbuild/linux-riscv64": 0.16.7 - "@esbuild/linux-s390x": 0.16.7 - "@esbuild/linux-x64": 0.16.7 - "@esbuild/netbsd-x64": 0.16.7 - "@esbuild/openbsd-x64": 0.16.7 - "@esbuild/sunos-x64": 0.16.7 - "@esbuild/win32-arm64": 0.16.7 - "@esbuild/win32-ia32": 0.16.7 - "@esbuild/win32-x64": 0.16.7 + "@esbuild/android-arm": 0.16.10 + "@esbuild/android-arm64": 0.16.10 + "@esbuild/android-x64": 0.16.10 + "@esbuild/darwin-arm64": 0.16.10 + "@esbuild/darwin-x64": 0.16.10 + "@esbuild/freebsd-arm64": 0.16.10 + "@esbuild/freebsd-x64": 0.16.10 + "@esbuild/linux-arm": 0.16.10 + "@esbuild/linux-arm64": 0.16.10 + "@esbuild/linux-ia32": 0.16.10 + "@esbuild/linux-loong64": 0.16.10 + "@esbuild/linux-mips64el": 0.16.10 + "@esbuild/linux-ppc64": 0.16.10 + "@esbuild/linux-riscv64": 0.16.10 + "@esbuild/linux-s390x": 0.16.10 + "@esbuild/linux-x64": 0.16.10 + "@esbuild/netbsd-x64": 0.16.10 + "@esbuild/openbsd-x64": 0.16.10 + "@esbuild/sunos-x64": 0.16.10 + "@esbuild/win32-arm64": 0.16.10 + "@esbuild/win32-ia32": 0.16.10 + "@esbuild/win32-x64": 0.16.10 dependenciesMeta: "@esbuild/android-arm": optional: true @@ -21275,7 +21275,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 53732942109a8a22d647810d90623dd48418f49fd9d1613688585a6f81677fd8525f53658778a7b92f1124cdfbf73e6efb74385be52cf6aa11aa97f8397ec93c + checksum: 0c5671fa4611fe70f3daa3e80e92804ca5908d1fcb0ed7a418d69db72504c4f457ceebeaa2668d55f79aaa63334a9ffd3f30e8f9dee821f6ad1f367f08ff157b languageName: node linkType: hard From dd7739039c0732b706679a4e198cb23e74227aeb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 20 Dec 2022 14:59:48 +0000 Subject: [PATCH 18/99] chore(deps): update dependency node-gyp to v9.3.1 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index e0005eec02..2437763f29 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29551,8 +29551,8 @@ __metadata: linkType: hard "node-gyp@npm:^9.1.0": - version: 9.3.0 - resolution: "node-gyp@npm:9.3.0" + version: 9.3.1 + resolution: "node-gyp@npm:9.3.1" dependencies: env-paths: ^2.2.0 glob: ^7.1.4 @@ -29566,7 +29566,7 @@ __metadata: which: ^2.0.2 bin: node-gyp: bin/node-gyp.js - checksum: 589ddd3ed967724ef425f9624bfa47cf73022640ab3eba6d556e92cdc4ddef33b63fce3a467c93b995a3f61df92eafd3c3d1e8dbe4a2c00c383334487dea99c3 + checksum: b860e9976fa645ca0789c69e25387401b4396b93c8375489b5151a6c55cf2640a3b6183c212b38625ef7c508994930b72198338e3d09b9d7ade5acc4aaf51ea7 languageName: node linkType: hard From 2885c1dc17a2f9b510ce852523fb014ba25ff973 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 20 Dec 2022 15:11:40 +0000 Subject: [PATCH 19/99] Update dependency @react-hookz/web to v20.0.3 Signed-off-by: Renovate Bot --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index e0005eec02..73f9124221 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12339,10 +12339,10 @@ __metadata: languageName: node linkType: hard -"@react-hookz/deep-equal@npm:^1.0.3": - version: 1.0.3 - resolution: "@react-hookz/deep-equal@npm:1.0.3" - checksum: d482b43746a0371094b90e1957d3e3a6aa70cbe8bd9cd88c759d8dcf21c2c1f57fbd1846b2103bccc20600e77d04d44e35c320ba9001fb5382c70a9a3385d34a +"@react-hookz/deep-equal@npm:^1.0.3, @react-hookz/deep-equal@npm:^1.0.4": + version: 1.0.4 + resolution: "@react-hookz/deep-equal@npm:1.0.4" + checksum: 0923e364d309e32ee54e0850471a86488faf149d7a04ee838552cf5d54f493964623a8d742880ec82410cc1105530123f056e66dfc72b7da235d4cc93fad708f languageName: node linkType: hard @@ -12363,10 +12363,10 @@ __metadata: linkType: hard "@react-hookz/web@npm:^20.0.0": - version: 20.0.2 - resolution: "@react-hookz/web@npm:20.0.2" + version: 20.0.3 + resolution: "@react-hookz/web@npm:20.0.3" dependencies: - "@react-hookz/deep-equal": ^1.0.3 + "@react-hookz/deep-equal": ^1.0.4 peerDependencies: js-cookie: ^3.0.1 react: ^16.8 || ^17 || ^18 @@ -12374,7 +12374,7 @@ __metadata: peerDependenciesMeta: js-cookie: optional: true - checksum: 38e9f660d247cd434d1de428f9ae49baf243f65187af3ebe2d4cd8ac1ecd660e37c64cec916dc9e9d4b7d609071b4c31d486ace3193e506fda64b11db96c5321 + checksum: b4942f422fc36c93138b9735ee9ef768214f9f32fca73e4b3d545e490bd043e92f2ee0ce65c0ffc57f7c47a8cec9742e6f80e9e06bf875a805ba606dffa06f3d languageName: node linkType: hard From 011bd518b771b41e37f9db342310e5ea8f36ac61 Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Wed, 23 Nov 2022 10:50:45 +1000 Subject: [PATCH 20/99] Update docs for all spelling errors, and add auth0 session and spec.presence Signed-off-by: Joe Patterson --- .changeset/fifty-paws-attack.md | 8 ++++++++ docs/auth/auth0/provider.md | 4 ++++ .../software-catalog/descriptor-format.md | 4 ++++ .../src/kinds/SystemEntityV1alpha1.ts | 4 ++-- plugins/scaffolder-common/src/TaskSpec.ts | 4 ++-- .../src/engines/ElasticSearchSearchEngine.ts | 19 ++++++++++--------- .../ElasticSearchSearchEngineIndexer.ts | 8 ++++---- .../NewlineDelimitedJsonCollatorFactory.ts | 10 +++++----- 8 files changed, 39 insertions(+), 22 deletions(-) create mode 100644 .changeset/fifty-paws-attack.md diff --git a/.changeset/fifty-paws-attack.md b/.changeset/fifty-paws-attack.md new file mode 100644 index 0000000000..d3aac21cb4 --- /dev/null +++ b/.changeset/fifty-paws-attack.md @@ -0,0 +1,8 @@ +--- +'@backstage/catalog-model': patch +'@backstage/plugin-scaffolder-common': patch +'@backstage/plugin-search-backend-module-elasticsearch': patch +'@backstage/plugin-search-backend-node': patch +--- + +Documentation update fixing the vale missing spellings, fixing errors, updating the `provider` document to include updates about auth0 needing a session, updating `descriptor-format` to include spec.presence on location which is missing diff --git a/docs/auth/auth0/provider.md b/docs/auth/auth0/provider.md index 6fb57a641b..4f33cda893 100644 --- a/docs/auth/auth0/provider.md +++ b/docs/auth/auth0/provider.md @@ -37,6 +37,8 @@ auth: audience: ${AUTH_AUTH0_AUDIENCE} connection: ${AUTH_AUTH0_CONNECTION} connectionScope: ${AUTH_AUTH0_CONNECTION_SCOPE} + session: + secret: 'supersecret' ``` The Auth0 provider is a structure with three configuration keys: @@ -46,6 +48,8 @@ The Auth0 provider is a structure with three configuration keys: page - `domain`: The Application domain, found on the Auth0 Application page +Because Auth0 requires a session you need to give the session a secret key. + ## Optional Configuration - `audience`: The intended recipients of the token diff --git a/docs/features/software-catalog/descriptor-format.md b/docs/features/software-catalog/descriptor-format.md index 6596e65464..f0151d7618 100644 --- a/docs/features/software-catalog/descriptor-format.md +++ b/docs/features/software-catalog/descriptor-format.md @@ -1309,3 +1309,7 @@ resolved relative to the location of this Location entity itself. A list of targets as strings. They can all be either absolute paths/URLs (depending on the type), or relative paths such as `./details/catalog-info.yaml` which are resolved relative to the location of this Location entity itself. + +### `spec.presence` [optional] + +Describes whether the target of a location is required to exist or not. It defaults to `'required'` if not specified, can also be `'optional'`. diff --git a/packages/catalog-model/src/kinds/SystemEntityV1alpha1.ts b/packages/catalog-model/src/kinds/SystemEntityV1alpha1.ts index 7d1ab703a2..88d405ec5b 100644 --- a/packages/catalog-model/src/kinds/SystemEntityV1alpha1.ts +++ b/packages/catalog-model/src/kinds/SystemEntityV1alpha1.ts @@ -15,11 +15,11 @@ */ import type { Entity } from '../entity/Entity'; -import schema from '../schema/kinds/System.v1alpha1.schema.json'; import { ajvCompiledJsonSchemaValidator } from './util'; +import schema from '../schema/kinds/System.v1alpha1.schema.json'; /** - * Backstage catalog System kind Entity. Systems group Comopnents, Resources and APIs together. + * Backstage catalog System kind Entity. Systems group Components, Resources and APIs together. * * @remarks * diff --git a/plugins/scaffolder-common/src/TaskSpec.ts b/plugins/scaffolder-common/src/TaskSpec.ts index 1c71790736..7c06fe2b99 100644 --- a/plugins/scaffolder-common/src/TaskSpec.ts +++ b/plugins/scaffolder-common/src/TaskSpec.ts @@ -15,7 +15,7 @@ */ import type { EntityMeta, UserEntity } from '@backstage/catalog-model'; -import type { JsonValue, JsonObject } from '@backstage/types'; +import type { JsonObject, JsonValue } from '@backstage/types'; /** * Information about a template that is stored on a task specification. @@ -51,7 +51,7 @@ export type TemplateInfo = { */ export interface TaskStep { /** - * A unqiue identifier for this step. + * A unique identifier for this step. */ id: string; /** diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts index ae7fcf7cff..0a2c2ce7df 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts @@ -14,8 +14,6 @@ * limitations under the License. */ -import { awsGetCredentials, createAWSConnection } from 'aws-os-connection'; -import { Config } from '@backstage/config'; import { IndexableDocument, IndexableResult, @@ -23,15 +21,18 @@ import { SearchEngine, SearchQuery, } from '@backstage/plugin-search-common'; +import { awsGetCredentials, createAWSConnection } from 'aws-os-connection'; +import { isEmpty, isNumber, isNaN as nan } from 'lodash'; + +import { Config } from '@backstage/config'; +import { ElasticSearchClientOptions } from './ElasticSearchClientOptions'; +import { ElasticSearchClientWrapper } from './ElasticSearchClientWrapper'; +import { ElasticSearchCustomIndexTemplate } from './types'; +import { ElasticSearchSearchEngineIndexer } from './ElasticSearchSearchEngineIndexer'; +import { Logger } from 'winston'; import { MissingIndexError } from '@backstage/plugin-search-backend-node'; import esb from 'elastic-builder'; -import { isEmpty, isNaN as nan, isNumber } from 'lodash'; import { v4 as uuid } from 'uuid'; -import { Logger } from 'winston'; -import { ElasticSearchClientOptions } from './ElasticSearchClientOptions'; -import { ElasticSearchSearchEngineIndexer } from './ElasticSearchSearchEngineIndexer'; -import { ElasticSearchCustomIndexTemplate } from './types'; -import { ElasticSearchClientWrapper } from './ElasticSearchClientWrapper'; export type { ElasticSearchClientOptions }; @@ -63,7 +64,7 @@ export type ElasticSearchQueryTranslator = ( ) => ElasticSearchConcreteQuery; /** - * Options for instansiate ElasticSearchSearchEngine + * Options for instantiate ElasticSearchSearchEngine * @public */ export type ElasticSearchOptions = { diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts index 1b1d47bb9b..29f20ea650 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts @@ -15,13 +15,13 @@ */ import { BatchSearchEngineIndexer } from '@backstage/plugin-search-backend-node'; -import { IndexableDocument } from '@backstage/plugin-search-common'; -import { Readable } from 'stream'; -import { Logger } from 'winston'; import { ElasticSearchClientWrapper } from './ElasticSearchClientWrapper'; +import { IndexableDocument } from '@backstage/plugin-search-common'; +import { Logger } from 'winston'; +import { Readable } from 'stream'; /** - * Options for instansiate ElasticSearchSearchEngineIndexer + * Options for instantiate ElasticSearchSearchEngineIndexer * @public */ export type ElasticSearchSearchEngineIndexerOptions = { diff --git a/plugins/search-backend-node/src/collators/NewlineDelimitedJsonCollatorFactory.ts b/plugins/search-backend-node/src/collators/NewlineDelimitedJsonCollatorFactory.ts index 9d922aace6..de77f5ba7a 100644 --- a/plugins/search-backend-node/src/collators/NewlineDelimitedJsonCollatorFactory.ts +++ b/plugins/search-backend-node/src/collators/NewlineDelimitedJsonCollatorFactory.ts @@ -14,16 +14,16 @@ * limitations under the License. */ -import { UrlReader } from '@backstage/backend-common'; import { Config } from '@backstage/config'; -import { Permission } from '@backstage/plugin-permission-common'; import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; -import { parse as parseNdjson } from 'ndjson'; -import { Readable } from 'stream'; import { Logger } from 'winston'; +import { Permission } from '@backstage/plugin-permission-common'; +import { Readable } from 'stream'; +import { UrlReader } from '@backstage/backend-common'; +import { parse as parseNdjson } from 'ndjson'; /** - * Options for instansiate NewlineDelimitedJsonCollatorFactory + * Options for instantiate NewlineDelimitedJsonCollatorFactory * @public */ export type NewlineDelimitedJsonCollatorFactoryOptions = { From fc2b89ca3909b8f73ed8cdd8b2b8b38d5bb5b5b5 Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Wed, 30 Nov 2022 09:41:48 +1000 Subject: [PATCH 21/99] Update .changeset/fifty-paws-attack.md Co-authored-by: Patrik Oldsberg Signed-off-by: Joe Patterson --- .changeset/fifty-paws-attack.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/fifty-paws-attack.md b/.changeset/fifty-paws-attack.md index d3aac21cb4..b7ad24204c 100644 --- a/.changeset/fifty-paws-attack.md +++ b/.changeset/fifty-paws-attack.md @@ -5,4 +5,4 @@ '@backstage/plugin-search-backend-node': patch --- -Documentation update fixing the vale missing spellings, fixing errors, updating the `provider` document to include updates about auth0 needing a session, updating `descriptor-format` to include spec.presence on location which is missing +Fixed spelling mistakes in documentation. From 25c8b2d04626858c60a0e141f86c80cf4e0a5e9b Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 20 Dec 2022 16:55:10 +0100 Subject: [PATCH 22/99] chore: modify the yarn lock resolution Signed-off-by: blam --- yarn.lock | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7996f3e587..e78f32baa8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12766,12 +12766,11 @@ __metadata: version: 5.0.0-beta.14 resolution: "@rjsf/validator-ajv6@npm:5.0.0-beta.14" dependencies: - ajv-formats: ^2.1.1 - ajv8: "npm:ajv@^8.11.0" + ajv: ^6.7.0 lodash: ^4.17.15 lodash-es: ^4.17.15 peerDependencies: - "@rjsf/utils": ^5.0.0-beta.12 + "@rjsf/utils": ^5.0.0-beta.1 checksum: 57b5c6968475a66762f644f2832aad077f8dde0ca9e71c8b0b27c06174855b7e6330f44fa6078fc0f347b728a4a5fd62399378fad26ada3cde32da89bddf6f9f languageName: node linkType: hard @@ -16259,18 +16258,6 @@ __metadata: languageName: node linkType: hard -"ajv8@npm:ajv@^8.11.0, ajv@npm:^8.0.0, ajv@npm:^8.10.0, ajv@npm:^8.8.0": - version: 8.11.2 - resolution: "ajv@npm:8.11.2" - dependencies: - fast-deep-equal: ^3.1.1 - json-schema-traverse: ^1.0.0 - require-from-string: ^2.0.2 - uri-js: ^4.2.2 - checksum: 53435bf79ee7d1eabba8085962dba4c08d08593334b304db7772887f0b7beebc1b3d957432f7437ed4b60e53b5d966a57b439869890209c50fed610459999e3e - languageName: node - linkType: hard - "ajv@npm:^6.10.0, ajv@npm:^6.10.1, ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:^6.5.5, ajv@npm:^6.7.0, ajv@npm:~6.12.6": version: 6.12.6 resolution: "ajv@npm:6.12.6" @@ -16283,6 +16270,18 @@ __metadata: languageName: node linkType: hard +"ajv@npm:^8.0.0, ajv@npm:^8.10.0, ajv@npm:^8.8.0": + version: 8.11.2 + resolution: "ajv@npm:8.11.2" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 53435bf79ee7d1eabba8085962dba4c08d08593334b304db7772887f0b7beebc1b3d957432f7437ed4b60e53b5d966a57b439869890209c50fed610459999e3e + languageName: node + linkType: hard + "alphanum-sort@npm:^1.0.2": version: 1.0.2 resolution: "alphanum-sort@npm:1.0.2" From 69aa54267d579a12188f71fba4d379f56c099413 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 20 Dec 2022 16:59:31 +0100 Subject: [PATCH 23/99] docs/auth: use env placeholder for secret Signed-off-by: Patrik Oldsberg --- docs/auth/auth0/provider.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/auth/auth0/provider.md b/docs/auth/auth0/provider.md index 4f33cda893..e9393cfa0b 100644 --- a/docs/auth/auth0/provider.md +++ b/docs/auth/auth0/provider.md @@ -38,7 +38,7 @@ auth: connection: ${AUTH_AUTH0_CONNECTION} connectionScope: ${AUTH_AUTH0_CONNECTION_SCOPE} session: - secret: 'supersecret' + secret: ${AUTH_SESSION_SECRET} ``` The Auth0 provider is a structure with three configuration keys: From ae2fea7335a1113c46d13bd23640e0774d004bc5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 20 Dec 2022 16:04:02 +0000 Subject: [PATCH 24/99] chore(deps): update storybook monorepo to v6.5.15 Signed-off-by: Renovate Bot --- storybook/yarn.lock | 544 ++++++++++++++++++++++---------------------- 1 file changed, 272 insertions(+), 272 deletions(-) diff --git a/storybook/yarn.lock b/storybook/yarn.lock index ef593ea7c8..9c2eb64ca9 100644 --- a/storybook/yarn.lock +++ b/storybook/yarn.lock @@ -1801,17 +1801,17 @@ __metadata: linkType: hard "@storybook/addon-a11y@npm:^6.5.9": - version: 6.5.14 - resolution: "@storybook/addon-a11y@npm:6.5.14" + version: 6.5.15 + resolution: "@storybook/addon-a11y@npm:6.5.15" dependencies: - "@storybook/addons": 6.5.14 - "@storybook/api": 6.5.14 - "@storybook/channels": 6.5.14 - "@storybook/client-logger": 6.5.14 - "@storybook/components": 6.5.14 - "@storybook/core-events": 6.5.14 + "@storybook/addons": 6.5.15 + "@storybook/api": 6.5.15 + "@storybook/channels": 6.5.15 + "@storybook/client-logger": 6.5.15 + "@storybook/components": 6.5.15 + "@storybook/core-events": 6.5.15 "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/theming": 6.5.14 + "@storybook/theming": 6.5.15 axe-core: ^4.2.0 core-js: ^3.8.2 global: ^4.4.0 @@ -1828,21 +1828,21 @@ __metadata: optional: true react-dom: optional: true - checksum: 2c35e693641b38e90989a656b8766cd2a86482e24164e62afd2cd1899d454b1a0c0b8f23df328c5350884d22615e9779dd617c71c642f4eada1df6345feba8e3 + checksum: 409e1393f655099b199dd3ba279d926b42d11ca8ce37255eec1e5d6ed3526cae559cd02d3485b70023846c3430b41630c2b6e14ed288580fcce00a12c34f7fcb languageName: node linkType: hard "@storybook/addon-actions@npm:^6.5.9": - version: 6.5.14 - resolution: "@storybook/addon-actions@npm:6.5.14" + version: 6.5.15 + resolution: "@storybook/addon-actions@npm:6.5.15" dependencies: - "@storybook/addons": 6.5.14 - "@storybook/api": 6.5.14 - "@storybook/client-logger": 6.5.14 - "@storybook/components": 6.5.14 - "@storybook/core-events": 6.5.14 + "@storybook/addons": 6.5.15 + "@storybook/api": 6.5.15 + "@storybook/client-logger": 6.5.15 + "@storybook/components": 6.5.15 + "@storybook/core-events": 6.5.15 "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/theming": 6.5.14 + "@storybook/theming": 6.5.15 core-js: ^3.8.2 fast-deep-equal: ^3.1.3 global: ^4.4.0 @@ -1863,23 +1863,23 @@ __metadata: optional: true react-dom: optional: true - checksum: 536a5afb4b9d2fbe6b250657deb36d5ef4eba128101fbe69bf00f9c363859f61e2337a460d0a724607ad48f54713bcc40ed54253df3fee4bdb23baf93a58defd + checksum: ce0ca5fddeb196adec7757dd287085c19d89d26506539d07445df3759eca9817a779f2923cc5fd7dfc9f515788628f6c0f604b10366659ca46562fab980c64f5 languageName: node linkType: hard "@storybook/addon-controls@npm:^6.5.9": - version: 6.5.14 - resolution: "@storybook/addon-controls@npm:6.5.14" + version: 6.5.15 + resolution: "@storybook/addon-controls@npm:6.5.15" dependencies: - "@storybook/addons": 6.5.14 - "@storybook/api": 6.5.14 - "@storybook/client-logger": 6.5.14 - "@storybook/components": 6.5.14 - "@storybook/core-common": 6.5.14 + "@storybook/addons": 6.5.15 + "@storybook/api": 6.5.15 + "@storybook/client-logger": 6.5.15 + "@storybook/components": 6.5.15 + "@storybook/core-common": 6.5.15 "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/node-logger": 6.5.14 - "@storybook/store": 6.5.14 - "@storybook/theming": 6.5.14 + "@storybook/node-logger": 6.5.15 + "@storybook/store": 6.5.15 + "@storybook/theming": 6.5.15 core-js: ^3.8.2 lodash: ^4.17.21 ts-dedent: ^2.0.0 @@ -1891,19 +1891,19 @@ __metadata: optional: true react-dom: optional: true - checksum: cebb9b33f944e9492527f4fd2bdfe73aa0f2737d53a36d7ea086499adc568ba06958e69c75191d5b266063ece513d5f7a484ec1da8f411f326aa4b022cce7ea0 + checksum: c87b01e035f7e0e6f3a1e864333c03e44f76ccd04a687cbe19cde59cfa1109eb2b124c288e1cf68c3a291dc6c28c056852aa2413c8157b92792ef339a33142ef languageName: node linkType: hard "@storybook/addon-links@npm:^6.5.9": - version: 6.5.14 - resolution: "@storybook/addon-links@npm:6.5.14" + version: 6.5.15 + resolution: "@storybook/addon-links@npm:6.5.15" dependencies: - "@storybook/addons": 6.5.14 - "@storybook/client-logger": 6.5.14 - "@storybook/core-events": 6.5.14 + "@storybook/addons": 6.5.15 + "@storybook/client-logger": 6.5.15 + "@storybook/core-events": 6.5.15 "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/router": 6.5.14 + "@storybook/router": 6.5.15 "@types/qs": ^6.9.5 core-js: ^3.8.2 global: ^4.4.0 @@ -1919,21 +1919,21 @@ __metadata: optional: true react-dom: optional: true - checksum: 7dc537aab36fd80ba704b8618c24aa0b9f59d6c28502dd43c01e7dae4194fbce37a95cb7797c4b52547d9662bf9619cd0901f946bddcec7580986df2e38da574 + checksum: ef40b02a3f48de2f591486fb04910e996bcb8d5fd406e2d6b81752659551b366ffc64f6cfdb461585e52c0ae98fa102be8595678e63a27171f9e2a0e20869bd6 languageName: node linkType: hard "@storybook/addon-storysource@npm:^6.5.9": - version: 6.5.14 - resolution: "@storybook/addon-storysource@npm:6.5.14" + version: 6.5.15 + resolution: "@storybook/addon-storysource@npm:6.5.15" dependencies: - "@storybook/addons": 6.5.14 - "@storybook/api": 6.5.14 - "@storybook/client-logger": 6.5.14 - "@storybook/components": 6.5.14 - "@storybook/router": 6.5.14 - "@storybook/source-loader": 6.5.14 - "@storybook/theming": 6.5.14 + "@storybook/addons": 6.5.15 + "@storybook/api": 6.5.15 + "@storybook/client-logger": 6.5.15 + "@storybook/components": 6.5.15 + "@storybook/router": 6.5.15 + "@storybook/source-loader": 6.5.15 + "@storybook/theming": 6.5.15 core-js: ^3.8.2 estraverse: ^5.2.0 loader-utils: ^2.0.4 @@ -1948,7 +1948,7 @@ __metadata: optional: true react-dom: optional: true - checksum: d9962b3f03245ab7dce405e7f1a24291d985aa1ecc594836b6322185bcde1c61a84397acfd46e85b2818f00c1de0f564bf7b6e1d84b960418cbe3dc37660d3f9 + checksum: e501c78ad8224b07a15fd8626399ebc63f131feb615ad6c6a3d6a7eac320b8fd01ec74d7406e8422c224771dfca17cfa159816b272e9f635e07dd67a8b4f8cb8 languageName: node linkType: hard @@ -1974,17 +1974,17 @@ __metadata: languageName: node linkType: hard -"@storybook/addons@npm:6.5.14, @storybook/addons@npm:^6.0.0, @storybook/addons@npm:^6.5.9": - version: 6.5.14 - resolution: "@storybook/addons@npm:6.5.14" +"@storybook/addons@npm:6.5.15, @storybook/addons@npm:^6.0.0, @storybook/addons@npm:^6.5.9": + version: 6.5.15 + resolution: "@storybook/addons@npm:6.5.15" dependencies: - "@storybook/api": 6.5.14 - "@storybook/channels": 6.5.14 - "@storybook/client-logger": 6.5.14 - "@storybook/core-events": 6.5.14 + "@storybook/api": 6.5.15 + "@storybook/channels": 6.5.15 + "@storybook/client-logger": 6.5.15 + "@storybook/core-events": 6.5.15 "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/router": 6.5.14 - "@storybook/theming": 6.5.14 + "@storybook/router": 6.5.15 + "@storybook/theming": 6.5.15 "@types/webpack-env": ^1.16.0 core-js: ^3.8.2 global: ^4.4.0 @@ -1992,7 +1992,7 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 99d06641bab06a3cc2821f309589d062c0efd8707b451ae24017449034da408bfddce3beda1ccdedadf59669d7d13348bee127f6fd4fc057200c84ff43288312 + checksum: 9de4cb9ff51cde37c456a0315f47c751daf4412a8d90321b5249a9b05f48a44dc48f01bbf83c9f369f63232da423d58ed47e4c03d50d16a8835d372022095b70 languageName: node linkType: hard @@ -2024,17 +2024,17 @@ __metadata: languageName: node linkType: hard -"@storybook/api@npm:6.5.14, @storybook/api@npm:^6.0.0": - version: 6.5.14 - resolution: "@storybook/api@npm:6.5.14" +"@storybook/api@npm:6.5.15, @storybook/api@npm:^6.0.0": + version: 6.5.15 + resolution: "@storybook/api@npm:6.5.15" dependencies: - "@storybook/channels": 6.5.14 - "@storybook/client-logger": 6.5.14 - "@storybook/core-events": 6.5.14 + "@storybook/channels": 6.5.15 + "@storybook/client-logger": 6.5.15 + "@storybook/core-events": 6.5.15 "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/router": 6.5.14 + "@storybook/router": 6.5.15 "@storybook/semver": ^7.3.2 - "@storybook/theming": 6.5.14 + "@storybook/theming": 6.5.15 core-js: ^3.8.2 fast-deep-equal: ^3.1.3 global: ^4.4.0 @@ -2048,31 +2048,31 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 0d421c3211a49cb8910dea647b898edd60af79755108ed321626a8fc134713dd1b018c830f15c2fc6c863f0528b571c2e2b34bb79df3c2f43497f5ab36fa9bbf + checksum: cebf1b70309c9c4a135c4ad8d3ebd85d01cfa4942e43231831e67514604199d3ed26395bbe0f89954718498a800085bd7d6eaef61c5d702e3a669532a227bd93 languageName: node linkType: hard -"@storybook/builder-webpack4@npm:6.5.14": - version: 6.5.14 - resolution: "@storybook/builder-webpack4@npm:6.5.14" +"@storybook/builder-webpack4@npm:6.5.15": + version: 6.5.15 + resolution: "@storybook/builder-webpack4@npm:6.5.15" dependencies: "@babel/core": ^7.12.10 - "@storybook/addons": 6.5.14 - "@storybook/api": 6.5.14 - "@storybook/channel-postmessage": 6.5.14 - "@storybook/channels": 6.5.14 - "@storybook/client-api": 6.5.14 - "@storybook/client-logger": 6.5.14 - "@storybook/components": 6.5.14 - "@storybook/core-common": 6.5.14 - "@storybook/core-events": 6.5.14 - "@storybook/node-logger": 6.5.14 - "@storybook/preview-web": 6.5.14 - "@storybook/router": 6.5.14 + "@storybook/addons": 6.5.15 + "@storybook/api": 6.5.15 + "@storybook/channel-postmessage": 6.5.15 + "@storybook/channels": 6.5.15 + "@storybook/client-api": 6.5.15 + "@storybook/client-logger": 6.5.15 + "@storybook/components": 6.5.15 + "@storybook/core-common": 6.5.15 + "@storybook/core-events": 6.5.15 + "@storybook/node-logger": 6.5.15 + "@storybook/preview-web": 6.5.15 + "@storybook/router": 6.5.15 "@storybook/semver": ^7.3.2 - "@storybook/store": 6.5.14 - "@storybook/theming": 6.5.14 - "@storybook/ui": 6.5.14 + "@storybook/store": 6.5.15 + "@storybook/theming": 6.5.15 + "@storybook/ui": 6.5.15 "@types/node": ^14.0.10 || ^16.0.0 "@types/webpack": ^4.41.26 autoprefixer: ^9.8.6 @@ -2109,30 +2109,30 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 16749d2d03b82e43e6b0fea02ebd4b63ac961229e4203cb371f36f11a9cd0a484d9bef73ee443053e09594ba7a7f2311470ade0e5a246b6d9345d1c7cc7b83b0 + checksum: bd676e9302d34445884376582c5d4cfe854ed8e64a9df6bbdcc76ef433534e65a23b1bf20c7225e85d21a27e1f1d905d0accd821fdef08afcd76569a8c8977c2 languageName: node linkType: hard "@storybook/builder-webpack5@npm:^6.5.9": - version: 6.5.14 - resolution: "@storybook/builder-webpack5@npm:6.5.14" + version: 6.5.15 + resolution: "@storybook/builder-webpack5@npm:6.5.15" dependencies: "@babel/core": ^7.12.10 - "@storybook/addons": 6.5.14 - "@storybook/api": 6.5.14 - "@storybook/channel-postmessage": 6.5.14 - "@storybook/channels": 6.5.14 - "@storybook/client-api": 6.5.14 - "@storybook/client-logger": 6.5.14 - "@storybook/components": 6.5.14 - "@storybook/core-common": 6.5.14 - "@storybook/core-events": 6.5.14 - "@storybook/node-logger": 6.5.14 - "@storybook/preview-web": 6.5.14 - "@storybook/router": 6.5.14 + "@storybook/addons": 6.5.15 + "@storybook/api": 6.5.15 + "@storybook/channel-postmessage": 6.5.15 + "@storybook/channels": 6.5.15 + "@storybook/client-api": 6.5.15 + "@storybook/client-logger": 6.5.15 + "@storybook/components": 6.5.15 + "@storybook/core-common": 6.5.15 + "@storybook/core-events": 6.5.15 + "@storybook/node-logger": 6.5.15 + "@storybook/preview-web": 6.5.15 + "@storybook/router": 6.5.15 "@storybook/semver": ^7.3.2 - "@storybook/store": 6.5.14 - "@storybook/theming": 6.5.14 + "@storybook/store": 6.5.15 + "@storybook/theming": 6.5.15 "@types/node": ^14.0.10 || ^16.0.0 babel-loader: ^8.0.0 babel-plugin-named-exports-order: ^0.0.2 @@ -2161,35 +2161,35 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 3aa60285baa51b3249b43b2fde92100ad24a5f383354b0e72a7915125f25386ace3e69a8718fb5baafc7cf8deca9e005c4ce0a9b356a1ca7016abe2254466115 + checksum: 9bde333540c41c55e7687b1230fdd92926074df1a3be900b969d6d9eea240fb962b6fafb59e5c3fe83eeb42e0f0c835d2e226fc332f460f8aba0f4f49d833ffd languageName: node linkType: hard -"@storybook/channel-postmessage@npm:6.5.14": - version: 6.5.14 - resolution: "@storybook/channel-postmessage@npm:6.5.14" +"@storybook/channel-postmessage@npm:6.5.15": + version: 6.5.15 + resolution: "@storybook/channel-postmessage@npm:6.5.15" dependencies: - "@storybook/channels": 6.5.14 - "@storybook/client-logger": 6.5.14 - "@storybook/core-events": 6.5.14 + "@storybook/channels": 6.5.15 + "@storybook/client-logger": 6.5.15 + "@storybook/core-events": 6.5.15 core-js: ^3.8.2 global: ^4.4.0 qs: ^6.10.0 telejson: ^6.0.8 - checksum: 2ea7aed1e49808875788746db75d61d3180a0b883892e978e93326d61617c0e01b7816b9eefcad402579d9f6dd923a13b527bcfcda3f415c0a135987d6c2042d + checksum: 7a09ba5bf163f8f5fef0bfd99eaab6c6391fa854e86bb44fcd0586bb73dd4ab5827cc23b7b38f993b81cbdb2ff8d58f81371be9301ddb3ea6f963ba560a42f09 languageName: node linkType: hard -"@storybook/channel-websocket@npm:6.5.14": - version: 6.5.14 - resolution: "@storybook/channel-websocket@npm:6.5.14" +"@storybook/channel-websocket@npm:6.5.15": + version: 6.5.15 + resolution: "@storybook/channel-websocket@npm:6.5.15" dependencies: - "@storybook/channels": 6.5.14 - "@storybook/client-logger": 6.5.14 + "@storybook/channels": 6.5.15 + "@storybook/client-logger": 6.5.15 core-js: ^3.8.2 global: ^4.4.0 telejson: ^6.0.8 - checksum: 76bd5734890836d6d7af8fd619015067db4680ae4336fdf86ee1c612e0060412c14cfcba22faee02534a63079af0864323370409730c7f3ee16af8fc3014e758 + checksum: c482b18b28f06644f684ed2b88ab53d6c5853925343e60a50a9bcfb2888123c4accfe30b51743905693e4d73c32c77e30d6dbaba377b486bee6e51faae39cf85 languageName: node linkType: hard @@ -2204,28 +2204,28 @@ __metadata: languageName: node linkType: hard -"@storybook/channels@npm:6.5.14": - version: 6.5.14 - resolution: "@storybook/channels@npm:6.5.14" +"@storybook/channels@npm:6.5.15": + version: 6.5.15 + resolution: "@storybook/channels@npm:6.5.15" dependencies: core-js: ^3.8.2 ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 - checksum: ff1ee3fea3c7b8591280ba7eabe13c999fc3e12a483ff2c0467cc9cca027662cbbc4676438da567865919157521df8a9a50bd20b35daed6896f39a3a7251a1e5 + checksum: 7963c34246b3cc84bb6fb0965834110d9b839a5c32cced0756948e4e88fb8bf23a0d584723abbab6d30a6282fa1023017bb82eba68c23389652c77d8d33cb4f9 languageName: node linkType: hard -"@storybook/client-api@npm:6.5.14": - version: 6.5.14 - resolution: "@storybook/client-api@npm:6.5.14" +"@storybook/client-api@npm:6.5.15": + version: 6.5.15 + resolution: "@storybook/client-api@npm:6.5.15" dependencies: - "@storybook/addons": 6.5.14 - "@storybook/channel-postmessage": 6.5.14 - "@storybook/channels": 6.5.14 - "@storybook/client-logger": 6.5.14 - "@storybook/core-events": 6.5.14 + "@storybook/addons": 6.5.15 + "@storybook/channel-postmessage": 6.5.15 + "@storybook/channels": 6.5.15 + "@storybook/client-logger": 6.5.15 + "@storybook/core-events": 6.5.15 "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/store": 6.5.14 + "@storybook/store": 6.5.15 "@types/qs": ^6.9.5 "@types/webpack-env": ^1.16.0 core-js: ^3.8.2 @@ -2242,7 +2242,7 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 46fe2bec19610a7ab59b41f25653261cb65b485a829a94f99f9aa01f1f5bbc13677979abfe94eb025f0d9c1138b284ddbeb6ce8a0ae392ce4995a813770be83b + checksum: 0c3b3f7febe16b00beb4aeafe79fd97cc4a6b4db868e37002856fc34878bc955336929362b3015ba1688b47131ca0b729c94ee70f69855da0e819dad6d48ee1b languageName: node linkType: hard @@ -2256,23 +2256,23 @@ __metadata: languageName: node linkType: hard -"@storybook/client-logger@npm:6.5.14, @storybook/client-logger@npm:^6.4.0": - version: 6.5.14 - resolution: "@storybook/client-logger@npm:6.5.14" +"@storybook/client-logger@npm:6.5.15, @storybook/client-logger@npm:^6.4.0": + version: 6.5.15 + resolution: "@storybook/client-logger@npm:6.5.15" dependencies: core-js: ^3.8.2 global: ^4.4.0 - checksum: 29cc0b58db7a8dc90484320c86b386975580c0e534791b29f6a8c00ce5b156f2bff9513994202f9f9ef99787e8d793988048ae88d2780ba151c6782f3bbf97ff + checksum: cee16aea089b60b33ad643bde5e0d62274230d38e2033f0bfd0780fc092bc24b5acff63a6c569c9db989e59b89518ec964d0665a51548450716c4c50d3a3e66e languageName: node linkType: hard -"@storybook/components@npm:6.5.14, @storybook/components@npm:^6.0.0": - version: 6.5.14 - resolution: "@storybook/components@npm:6.5.14" +"@storybook/components@npm:6.5.15, @storybook/components@npm:^6.0.0": + version: 6.5.15 + resolution: "@storybook/components@npm:6.5.15" dependencies: - "@storybook/client-logger": 6.5.14 + "@storybook/client-logger": 6.5.15 "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/theming": 6.5.14 + "@storybook/theming": 6.5.15 core-js: ^3.8.2 memoizerific: ^1.11.3 qs: ^6.10.0 @@ -2281,24 +2281,24 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 73d0ff418f2c5b1fc9f421f089ebee2342ef0684905e4959397a8bc6f67f32ff97f4ec3587847980cb7e4fc8e40278d8ecea11a8d267fea8d94ad3d8265a0c21 + checksum: c405643a002b7770567aba3f0e43cad975fbb0f728148f82c46c35b13958d3f6900eed619a60f22c0ee923c20828026d5f1c77cd950d21ebfd6cf57f8e64f791 languageName: node linkType: hard -"@storybook/core-client@npm:6.5.14": - version: 6.5.14 - resolution: "@storybook/core-client@npm:6.5.14" +"@storybook/core-client@npm:6.5.15": + version: 6.5.15 + resolution: "@storybook/core-client@npm:6.5.15" dependencies: - "@storybook/addons": 6.5.14 - "@storybook/channel-postmessage": 6.5.14 - "@storybook/channel-websocket": 6.5.14 - "@storybook/client-api": 6.5.14 - "@storybook/client-logger": 6.5.14 - "@storybook/core-events": 6.5.14 + "@storybook/addons": 6.5.15 + "@storybook/channel-postmessage": 6.5.15 + "@storybook/channel-websocket": 6.5.15 + "@storybook/client-api": 6.5.15 + "@storybook/client-logger": 6.5.15 + "@storybook/core-events": 6.5.15 "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/preview-web": 6.5.14 - "@storybook/store": 6.5.14 - "@storybook/ui": 6.5.14 + "@storybook/preview-web": 6.5.15 + "@storybook/store": 6.5.15 + "@storybook/ui": 6.5.15 airbnb-js-shims: ^2.2.1 ansi-to-html: ^0.6.11 core-js: ^3.8.2 @@ -2316,13 +2316,13 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: ff867021ab6c22408952b809f3c22e58474390062fb5417aecc0ea6dcf2eb0097a616c5b1377e9af6c16045ce0cd5f3a11b32072630085592998dbb6a7ee573d + checksum: 60f03d031fa87a1a116b0ccbffd2270b8d28757d89c17af6eb368224603dfd0d219fd5ac086bf859cb8bda0f80b444195c7df94c4486107b9c5a6fbab29c65ac languageName: node linkType: hard -"@storybook/core-common@npm:6.5.14": - version: 6.5.14 - resolution: "@storybook/core-common@npm:6.5.14" +"@storybook/core-common@npm:6.5.15": + version: 6.5.15 + resolution: "@storybook/core-common@npm:6.5.15" dependencies: "@babel/core": ^7.12.10 "@babel/plugin-proposal-class-properties": ^7.12.1 @@ -2346,7 +2346,7 @@ __metadata: "@babel/preset-react": ^7.12.10 "@babel/preset-typescript": ^7.12.7 "@babel/register": ^7.12.1 - "@storybook/node-logger": 6.5.14 + "@storybook/node-logger": 6.5.15 "@storybook/semver": ^7.3.2 "@types/node": ^14.0.10 || ^16.0.0 "@types/pretty-hrtime": ^1.0.0 @@ -2380,7 +2380,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: a1cd6e97524aa8173bc8a0af867cbf407f0542b8577a5be79a82154efb239d9362d05fae3bad0aac41e17d33d950cb69290042be46bbc841a8d12b71f6db1c82 + checksum: 9c19c348137bea23295ff330d3a62d3551b6a8a2933f254f3f1cace4ef05e46b6c97e0cbca67cc5be45164e223d5ff52eced54b76564891c8a2dd085e3be4cc4 languageName: node linkType: hard @@ -2393,31 +2393,31 @@ __metadata: languageName: node linkType: hard -"@storybook/core-events@npm:6.5.14, @storybook/core-events@npm:^6.0.0": - version: 6.5.14 - resolution: "@storybook/core-events@npm:6.5.14" +"@storybook/core-events@npm:6.5.15, @storybook/core-events@npm:^6.0.0": + version: 6.5.15 + resolution: "@storybook/core-events@npm:6.5.15" dependencies: core-js: ^3.8.2 - checksum: 6787925c520a6ee5aee748d4b7e2ec599c5ee16a87dbb62a94eeec88003ef42683d8e7ac8b98b49ea2a33205e0648805410c4759d16a997ba2f4215f6c8784ce + checksum: 89916720933bc4de0b1f25c7cb1b8580d3cdd213b21a360f18ebd0b790cce2c641696282fee29bbc482ab2cc656271b2f0569f79559d90fb01fb16473421e79e languageName: node linkType: hard -"@storybook/core-server@npm:6.5.14": - version: 6.5.14 - resolution: "@storybook/core-server@npm:6.5.14" +"@storybook/core-server@npm:6.5.15": + version: 6.5.15 + resolution: "@storybook/core-server@npm:6.5.15" dependencies: "@discoveryjs/json-ext": ^0.5.3 - "@storybook/builder-webpack4": 6.5.14 - "@storybook/core-client": 6.5.14 - "@storybook/core-common": 6.5.14 - "@storybook/core-events": 6.5.14 + "@storybook/builder-webpack4": 6.5.15 + "@storybook/core-client": 6.5.15 + "@storybook/core-common": 6.5.15 + "@storybook/core-events": 6.5.15 "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/csf-tools": 6.5.14 - "@storybook/manager-webpack4": 6.5.14 - "@storybook/node-logger": 6.5.14 + "@storybook/csf-tools": 6.5.15 + "@storybook/manager-webpack4": 6.5.15 + "@storybook/node-logger": 6.5.15 "@storybook/semver": ^7.3.2 - "@storybook/store": 6.5.14 - "@storybook/telemetry": 6.5.14 + "@storybook/store": 6.5.15 + "@storybook/telemetry": 6.5.15 "@types/node": ^14.0.10 || ^16.0.0 "@types/node-fetch": ^2.5.7 "@types/pretty-hrtime": ^1.0.0 @@ -2461,16 +2461,16 @@ __metadata: optional: true typescript: optional: true - checksum: ca61b13ff002f73f76f6d359fc7955f061806d13bb0f158d6ff299696901097329d082b4fdd7fac06dda93fd318bcdbba9f6a08390763d18851c8aa70e581c36 + checksum: 927085bd6e2c9cf756795760c5647ed5b40151e94a192e64313091fda8a06993541ecabb9c730cb01eb8baef0613b73ff63824812cfd7b8bbed3fd2ead8d1f18 languageName: node linkType: hard -"@storybook/core@npm:6.5.14": - version: 6.5.14 - resolution: "@storybook/core@npm:6.5.14" +"@storybook/core@npm:6.5.15": + version: 6.5.15 + resolution: "@storybook/core@npm:6.5.15" dependencies: - "@storybook/core-client": 6.5.14 - "@storybook/core-server": 6.5.14 + "@storybook/core-client": 6.5.15 + "@storybook/core-server": 6.5.15 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2482,13 +2482,13 @@ __metadata: optional: true typescript: optional: true - checksum: 16a2b8c589cbb8632ef6f1ba941abd7a422bca6fa54d4ef1dc5a60145bbea8dded10c7fa1fd4b8284e2e86867e779c26d4eebe69e2156123c49cfdf66c14718a + checksum: a7eca427b14a9c1f557d598e7ac599dc120d382d3d762437b3b6ebb4638b19a74e48f9e8e526365951ec623d10b82d67279226d7e6ff54ac095afee02992e666 languageName: node linkType: hard -"@storybook/csf-tools@npm:6.5.14": - version: 6.5.14 - resolution: "@storybook/csf-tools@npm:6.5.14" +"@storybook/csf-tools@npm:6.5.15": + version: 6.5.15 + resolution: "@storybook/csf-tools@npm:6.5.15" dependencies: "@babel/core": ^7.12.10 "@babel/generator": ^7.12.11 @@ -2509,7 +2509,7 @@ __metadata: peerDependenciesMeta: "@storybook/mdx2-csf": optional: true - checksum: 12e6bb4d9daa1f3ffd6a240edd9680c4088a20f2eba6dd91102fd2900188dcfcec60fc7e7b021aa2ae2232e15e0839aaf490d1c2ab2c9baa74a9dfea74ec713f + checksum: d7faafd175b232bb8fa6008ae6db5a40619a158ed7556686649dee665ac0cbbdb3cc404d2b9c0314ba7783c3f5baf1d87788f324d24136bd0f8cc671d573208b languageName: node linkType: hard @@ -2522,18 +2522,18 @@ __metadata: languageName: node linkType: hard -"@storybook/docs-tools@npm:6.5.14": - version: 6.5.14 - resolution: "@storybook/docs-tools@npm:6.5.14" +"@storybook/docs-tools@npm:6.5.15": + version: 6.5.15 + resolution: "@storybook/docs-tools@npm:6.5.15" dependencies: "@babel/core": ^7.12.10 "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/store": 6.5.14 + "@storybook/store": 6.5.15 core-js: ^3.8.2 doctrine: ^3.0.0 lodash: ^4.17.21 regenerator-runtime: ^0.13.7 - checksum: 1a69dae1f9ae4196a3517571d898097a69431cd6d92f490af3eb3e5504fe0bbde4cbdd82d1ff9648c3a1daa7eab10eaffd5d2ee485e634a6fa5701dec7875196 + checksum: 051239a82cff47dbc52fae112c4c144d6e103cbb169c239b0a99fb0cb3e82fba2e460c9487469fafc19ee81ef2ecc33d59b05457c3c74375685de0f537460071 languageName: node linkType: hard @@ -2550,19 +2550,19 @@ __metadata: languageName: node linkType: hard -"@storybook/manager-webpack4@npm:6.5.14": - version: 6.5.14 - resolution: "@storybook/manager-webpack4@npm:6.5.14" +"@storybook/manager-webpack4@npm:6.5.15": + version: 6.5.15 + resolution: "@storybook/manager-webpack4@npm:6.5.15" dependencies: "@babel/core": ^7.12.10 "@babel/plugin-transform-template-literals": ^7.12.1 "@babel/preset-react": ^7.12.10 - "@storybook/addons": 6.5.14 - "@storybook/core-client": 6.5.14 - "@storybook/core-common": 6.5.14 - "@storybook/node-logger": 6.5.14 - "@storybook/theming": 6.5.14 - "@storybook/ui": 6.5.14 + "@storybook/addons": 6.5.15 + "@storybook/core-client": 6.5.15 + "@storybook/core-common": 6.5.15 + "@storybook/node-logger": 6.5.15 + "@storybook/theming": 6.5.15 + "@storybook/ui": 6.5.15 "@types/node": ^14.0.10 || ^16.0.0 "@types/webpack": ^4.41.26 babel-loader: ^8.0.0 @@ -2595,23 +2595,23 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: c8547b64f80c87dd8590a3e7b784b6f72952607514f9e42858f89efce22ea077404033b25674aecc3874e61264ce74c38220b6130aecbce5361d182b018f7fc7 + checksum: de7b2624bf44cf4eb59839ac756e9e28715caae1d5efdfbd1e2cefb55a385cf80f3a651a29ed75a905f825d6b299ba46c3cd71068eecb3b985b5a315ed03470b languageName: node linkType: hard "@storybook/manager-webpack5@npm:^6.5.9": - version: 6.5.14 - resolution: "@storybook/manager-webpack5@npm:6.5.14" + version: 6.5.15 + resolution: "@storybook/manager-webpack5@npm:6.5.15" dependencies: "@babel/core": ^7.12.10 "@babel/plugin-transform-template-literals": ^7.12.1 "@babel/preset-react": ^7.12.10 - "@storybook/addons": 6.5.14 - "@storybook/core-client": 6.5.14 - "@storybook/core-common": 6.5.14 - "@storybook/node-logger": 6.5.14 - "@storybook/theming": 6.5.14 - "@storybook/ui": 6.5.14 + "@storybook/addons": 6.5.15 + "@storybook/core-client": 6.5.15 + "@storybook/core-common": 6.5.15 + "@storybook/node-logger": 6.5.15 + "@storybook/theming": 6.5.15 + "@storybook/ui": 6.5.15 "@types/node": ^14.0.10 || ^16.0.0 babel-loader: ^8.0.0 case-sensitive-paths-webpack-plugin: ^2.3.0 @@ -2641,7 +2641,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 1fe525b777694c90d1837911307fa5ef3ac976387ff9b8c5116e51bfe21437c7d83504d3edb63cc5d3c9d624ba50e467f500a3477b63a879fc5d6e73310894ba + checksum: 99f18a752230fa6360b216e3a7f85c70fe92baf01677571653b4f9fd62735d9ab12a0b91e4ae7eabd66b03f37e0b58f01fad8e5880a8e2012a98f6aedc944da1 languageName: node linkType: hard @@ -2664,29 +2664,29 @@ __metadata: languageName: node linkType: hard -"@storybook/node-logger@npm:6.5.14, @storybook/node-logger@npm:^6.5.9": - version: 6.5.14 - resolution: "@storybook/node-logger@npm:6.5.14" +"@storybook/node-logger@npm:6.5.15, @storybook/node-logger@npm:^6.5.9": + version: 6.5.15 + resolution: "@storybook/node-logger@npm:6.5.15" dependencies: "@types/npmlog": ^4.1.2 chalk: ^4.1.0 core-js: ^3.8.2 npmlog: ^5.0.1 pretty-hrtime: ^1.0.3 - checksum: d36d17816b20bf8409504f73b8fe7da2c1aa6b6f37c3cc910f544f4e3d9dfe8cfe5ab66930977413ab12a067f94477d5a1e3da8fa55c07af5dbc88160845ee47 + checksum: 9c01127d3b57db7a85759d2f179afec0e1207c0754e80e22472e73468f831e1dafa2a5bf1047e54f92d47b5103325c157c14655208a6ddcdb8f9e7ee0b256e48 languageName: node linkType: hard -"@storybook/preview-web@npm:6.5.14": - version: 6.5.14 - resolution: "@storybook/preview-web@npm:6.5.14" +"@storybook/preview-web@npm:6.5.15": + version: 6.5.15 + resolution: "@storybook/preview-web@npm:6.5.15" dependencies: - "@storybook/addons": 6.5.14 - "@storybook/channel-postmessage": 6.5.14 - "@storybook/client-logger": 6.5.14 - "@storybook/core-events": 6.5.14 + "@storybook/addons": 6.5.15 + "@storybook/channel-postmessage": 6.5.15 + "@storybook/client-logger": 6.5.15 + "@storybook/core-events": 6.5.15 "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/store": 6.5.14 + "@storybook/store": 6.5.15 ansi-to-html: ^0.6.11 core-js: ^3.8.2 global: ^4.4.0 @@ -2700,7 +2700,7 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: ef4d2222feaadd71067339ec93a13279162d0d0c72545ccb52681dd38c95451bb4257f0817dd3689af5d5e5b161602c8a57bc5805cd0d6bc0e066b78a2cfdd23 + checksum: fc178af772f39fcfe1b9926bf62bd7642984080442e8f7f2a0c6fe421513f9930ff5ccfea302d212199adf418c4bf9fc498ff65c30ad6e1cdd1b485a6d92b190 languageName: node linkType: hard @@ -2723,22 +2723,22 @@ __metadata: linkType: hard "@storybook/react@npm:^6.5.9": - version: 6.5.14 - resolution: "@storybook/react@npm:6.5.14" + version: 6.5.15 + resolution: "@storybook/react@npm:6.5.15" dependencies: "@babel/preset-flow": ^7.12.1 "@babel/preset-react": ^7.12.10 "@pmmmwh/react-refresh-webpack-plugin": ^0.5.3 - "@storybook/addons": 6.5.14 - "@storybook/client-logger": 6.5.14 - "@storybook/core": 6.5.14 - "@storybook/core-common": 6.5.14 + "@storybook/addons": 6.5.15 + "@storybook/client-logger": 6.5.15 + "@storybook/core": 6.5.15 + "@storybook/core-common": 6.5.15 "@storybook/csf": 0.0.2--canary.4566f4d.1 - "@storybook/docs-tools": 6.5.14 - "@storybook/node-logger": 6.5.14 + "@storybook/docs-tools": 6.5.15 + "@storybook/node-logger": 6.5.15 "@storybook/react-docgen-typescript-plugin": 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0 "@storybook/semver": ^7.3.2 - "@storybook/store": 6.5.14 + "@storybook/store": 6.5.15 "@types/estree": ^0.0.51 "@types/node": ^14.14.20 || ^16.0.0 "@types/webpack-env": ^1.16.0 @@ -2783,7 +2783,7 @@ __metadata: build-storybook: bin/build.js start-storybook: bin/index.js storybook-server: bin/index.js - checksum: b94b7b3ef19d6b9e9379242fb17afd8892100cdf5dd8beac640e8dcac62618977e8189891e87e0fab40484a3fc84eeb8bc17ebd8dc7cba6b29ee7b65f8f761c8 + checksum: c36f9a2401633b9632e5fce05bb43e8ea0a5338c8f0dc9e0da5eb87c7cfd1a3ef819124499679a3c797fbbe8278f03794d757563f388136a349e3815747036ae languageName: node linkType: hard @@ -2803,11 +2803,11 @@ __metadata: languageName: node linkType: hard -"@storybook/router@npm:6.5.14": - version: 6.5.14 - resolution: "@storybook/router@npm:6.5.14" +"@storybook/router@npm:6.5.15": + version: 6.5.15 + resolution: "@storybook/router@npm:6.5.15" dependencies: - "@storybook/client-logger": 6.5.14 + "@storybook/client-logger": 6.5.15 core-js: ^3.8.2 memoizerific: ^1.11.3 qs: ^6.10.0 @@ -2815,7 +2815,7 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: ec2550568c02f45de5307e77928eaeb39413049944e994adbc397d9c7e083ac7e110886e40517ddae40e3879c172f458167682f1d73d0bb150bc93ab9dd61514 + checksum: d5ac1ac0d161e53764411dc84febed3819c5cefe669f2933434bcdc25bf011f89d2df2a504af8bf77f454e6598a74c794a17d01aad734c6ebe28cc13c490fff9 languageName: node linkType: hard @@ -2831,12 +2831,12 @@ __metadata: languageName: node linkType: hard -"@storybook/source-loader@npm:6.5.14": - version: 6.5.14 - resolution: "@storybook/source-loader@npm:6.5.14" +"@storybook/source-loader@npm:6.5.15": + version: 6.5.15 + resolution: "@storybook/source-loader@npm:6.5.15" dependencies: - "@storybook/addons": 6.5.14 - "@storybook/client-logger": 6.5.14 + "@storybook/addons": 6.5.15 + "@storybook/client-logger": 6.5.15 "@storybook/csf": 0.0.2--canary.4566f4d.1 core-js: ^3.8.2 estraverse: ^5.2.0 @@ -2848,17 +2848,17 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 81f8908a31eb3428835a201418b89981c7ce7ece669bef2a6487b643025e45238956fe98f8fd70aa61843db0eee2c595a13e84b46835cb28b1eef59defe00740 + checksum: 2330d2b16f097c4be4b0eccc466ae0142c2e04198acc529204d80c1005c1c32b6da8313661b10e641020efdfe4f1dd4f0ac67bc2c3797ae49383815f668ede5d languageName: node linkType: hard -"@storybook/store@npm:6.5.14": - version: 6.5.14 - resolution: "@storybook/store@npm:6.5.14" +"@storybook/store@npm:6.5.15": + version: 6.5.15 + resolution: "@storybook/store@npm:6.5.15" dependencies: - "@storybook/addons": 6.5.14 - "@storybook/client-logger": 6.5.14 - "@storybook/core-events": 6.5.14 + "@storybook/addons": 6.5.15 + "@storybook/client-logger": 6.5.15 + "@storybook/core-events": 6.5.15 "@storybook/csf": 0.0.2--canary.4566f4d.1 core-js: ^3.8.2 fast-deep-equal: ^3.1.3 @@ -2874,16 +2874,16 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 7330a2492c469bbe989a522873486cbccf660080bf8d03c873029a8fa56f82976d7d71030c69aa9b2df48bf3b6fdc8063f5beecba298908783058ea675f0a159 + checksum: 918c3ed8c7a55ae4bf8bcb3a108d99a9d077c951b3f386cb0f8939d2eed7c9a9a2000075b341d5c934c0308c24287fc5cd110042a384411c25cec7632dfa5abb languageName: node linkType: hard -"@storybook/telemetry@npm:6.5.14": - version: 6.5.14 - resolution: "@storybook/telemetry@npm:6.5.14" +"@storybook/telemetry@npm:6.5.15": + version: 6.5.15 + resolution: "@storybook/telemetry@npm:6.5.15" dependencies: - "@storybook/client-logger": 6.5.14 - "@storybook/core-common": 6.5.14 + "@storybook/client-logger": 6.5.15 + "@storybook/core-common": 6.5.15 chalk: ^4.1.0 core-js: ^3.8.2 detect-package-manager: ^2.0.1 @@ -2894,7 +2894,7 @@ __metadata: nanoid: ^3.3.1 read-pkg-up: ^7.0.1 regenerator-runtime: ^0.13.7 - checksum: 6f6323fe0e0fe9301b63a951e4f2959a68847bc20b67e3910587e6979b3e0b058ce5ec1b2bc89e666b77e91211dd0bb2ed8bd23060831f599365b8f41630db53 + checksum: aebb83186ff7308e21185a7152b27aed43f6d3967a7253ac94e3d4c1bce4935c471500c37d195e03f98953944812d2b24518d4147704e7ffb211430b27a2354e languageName: node linkType: hard @@ -2926,34 +2926,34 @@ __metadata: languageName: node linkType: hard -"@storybook/theming@npm:6.5.14, @storybook/theming@npm:^6.0.0": - version: 6.5.14 - resolution: "@storybook/theming@npm:6.5.14" +"@storybook/theming@npm:6.5.15, @storybook/theming@npm:^6.0.0": + version: 6.5.15 + resolution: "@storybook/theming@npm:6.5.15" dependencies: - "@storybook/client-logger": 6.5.14 + "@storybook/client-logger": 6.5.15 core-js: ^3.8.2 memoizerific: ^1.11.3 regenerator-runtime: ^0.13.7 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: d139325dd51e8dfa58458a5c033104123b019fc02ddc899898e02de2b5d1358fd318b5def7ef82e6138420f9198e90d50b0fdfbea926987ac6852fc3a2e77c6d + checksum: 84d09b6bdd0a00246b207ef4307fc0ecbb5861792547a070ed45470335c323f18ba607cd1d3f0a5cea7e979dd73315cdb091548fe70e5946c1593d8c691be7ba languageName: node linkType: hard -"@storybook/ui@npm:6.5.14": - version: 6.5.14 - resolution: "@storybook/ui@npm:6.5.14" +"@storybook/ui@npm:6.5.15": + version: 6.5.15 + resolution: "@storybook/ui@npm:6.5.15" dependencies: - "@storybook/addons": 6.5.14 - "@storybook/api": 6.5.14 - "@storybook/channels": 6.5.14 - "@storybook/client-logger": 6.5.14 - "@storybook/components": 6.5.14 - "@storybook/core-events": 6.5.14 - "@storybook/router": 6.5.14 + "@storybook/addons": 6.5.15 + "@storybook/api": 6.5.15 + "@storybook/channels": 6.5.15 + "@storybook/client-logger": 6.5.15 + "@storybook/components": 6.5.15 + "@storybook/core-events": 6.5.15 + "@storybook/router": 6.5.15 "@storybook/semver": ^7.3.2 - "@storybook/theming": 6.5.14 + "@storybook/theming": 6.5.15 core-js: ^3.8.2 memoizerific: ^1.11.3 qs: ^6.10.0 @@ -2962,7 +2962,7 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 898bf81d9ab64d792bdca23b0ec465500af1e42ed5ebace5847416d0ec36d32043fb7c547452a626ce285efd966569e6bfd4f84ddd691367259553ca59538646 + checksum: 8b75290c65a6a2beb3db4157ed95ce74dab06d5499dc3fc7a848fa5c9fc0f506bf6533638bb50c3a1f27acfeaa6ade0acdde8beede2241eba8d577965d85d299 languageName: node linkType: hard From 81a2a1990a7e501feb64f98645f49cab6b28909a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 20 Dec 2022 20:37:07 +0000 Subject: [PATCH 25/99] fix(deps): update dependency @octokit/rest to v19.0.5 Signed-off-by: Renovate Bot --- yarn.lock | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/yarn.lock b/yarn.lock index 12fb4b6311..74a5127f7a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11743,18 +11743,18 @@ __metadata: languageName: node linkType: hard -"@octokit/core@npm:^4.0.0, @octokit/core@npm:^4.0.4": - version: 4.0.5 - resolution: "@octokit/core@npm:4.0.5" +"@octokit/core@npm:^4.0.0, @octokit/core@npm:^4.0.4, @octokit/core@npm:^4.1.0": + version: 4.1.0 + resolution: "@octokit/core@npm:4.1.0" dependencies: "@octokit/auth-token": ^3.0.0 "@octokit/graphql": ^5.0.0 "@octokit/request": ^6.0.0 "@octokit/request-error": ^3.0.0 - "@octokit/types": ^7.0.0 + "@octokit/types": ^8.0.0 before-after-hook: ^2.2.0 universal-user-agent: ^6.0.0 - checksum: 6e4a2161d22b9cb24cd1cf702e6d18200fc48a29dc66db08c37809d65243d29429123652072126d9f161e45aef6a57e72a5d56d7e975829c190e8c3c46b3f1b9 + checksum: 4e53e02ff3ebe808b74385be0055cc1cce4b548060b20e3f2d5dd1bf7877ff7b6556f11278edc070842bf24aa869f9f59a02638f1b14083eb290b9e297447a2d languageName: node linkType: hard @@ -11917,6 +11917,17 @@ __metadata: languageName: node linkType: hard +"@octokit/plugin-paginate-rest@npm:^5.0.0": + version: 5.0.1 + resolution: "@octokit/plugin-paginate-rest@npm:5.0.1" + dependencies: + "@octokit/types": ^8.0.0 + peerDependencies: + "@octokit/core": ">=4" + checksum: cfded297d9f66c7607bd34075eb0c5f7278a1617d6be86115997c0757151c9be2fcf7a8849c2a5cebab56931a263b5cc35742b6227935afe77f5ed61b0627a3d + languageName: node + linkType: hard + "@octokit/plugin-request-log@npm:^1.0.2, @octokit/plugin-request-log@npm:^1.0.4": version: 1.0.4 resolution: "@octokit/plugin-request-log@npm:1.0.4" @@ -11938,15 +11949,15 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-rest-endpoint-methods@npm:^6.0.0": - version: 6.3.0 - resolution: "@octokit/plugin-rest-endpoint-methods@npm:6.3.0" +"@octokit/plugin-rest-endpoint-methods@npm:^6.0.0, @octokit/plugin-rest-endpoint-methods@npm:^6.7.0": + version: 6.7.0 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:6.7.0" dependencies: - "@octokit/types": ^7.0.0 + "@octokit/types": ^8.0.0 deprecation: ^2.3.1 peerDependencies: "@octokit/core": ">=3" - checksum: 8fefbdcfc16fe39aa216c440cf52c2861f6c0c905f1fdfbd0e720fb59815c079100b877535bcd428cb782ef31a8d508470d69d4ecf307b8af4ccc34a5669c050 + checksum: 513c6c0717d08f3e85848029bd700412b7d9787750f78cc79a3dede356e94b238bf8a518b108f556a7efe626871720dd0466de9f31091578ea4e0f5a016f0ae7 languageName: node linkType: hard @@ -12035,14 +12046,14 @@ __metadata: linkType: hard "@octokit/rest@npm:^19.0.3": - version: 19.0.4 - resolution: "@octokit/rest@npm:19.0.4" + version: 19.0.5 + resolution: "@octokit/rest@npm:19.0.5" dependencies: - "@octokit/core": ^4.0.0 - "@octokit/plugin-paginate-rest": ^4.0.0 + "@octokit/core": ^4.1.0 + "@octokit/plugin-paginate-rest": ^5.0.0 "@octokit/plugin-request-log": ^1.0.4 - "@octokit/plugin-rest-endpoint-methods": ^6.0.0 - checksum: 7eba9148b707c713705ba8d75c25fbb22488f30abef7967ce92884a51e411e709b90ff56b0e6fa5521b261f343a7fd33b8ad5d0b87cab4bc2e178002b2566cf2 + "@octokit/plugin-rest-endpoint-methods": ^6.7.0 + checksum: ed4c36859aafb64e23f7f708086fe7e2ecda17ffd8c1594817d539f766f5855af79f17f5d225d96d34cd9b97cbfea988dac3df39a7cc928b2d2b7b75ed981056 languageName: node linkType: hard From 75275b0b0bdf0997a7c173e42b752d285fe567ec Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 20 Dec 2022 20:35:57 +0000 Subject: [PATCH 26/99] fix(deps): update dependency @microsoft/tsdoc-config to v0.16.2 Signed-off-by: Renovate Bot --- .changeset/renovate-968149a.md | 5 +++++ packages/repo-tools/package.json | 2 +- yarn.lock | 19 +++++++++++++------ 3 files changed, 19 insertions(+), 7 deletions(-) create mode 100644 .changeset/renovate-968149a.md diff --git a/.changeset/renovate-968149a.md b/.changeset/renovate-968149a.md new file mode 100644 index 0000000000..592a13132e --- /dev/null +++ b/.changeset/renovate-968149a.md @@ -0,0 +1,5 @@ +--- +'@backstage/repo-tools': patch +--- + +Updated dependency `@microsoft/tsdoc-config` to `0.16.2`. diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json index 0e1c39e272..09d5fe03f8 100644 --- a/packages/repo-tools/package.json +++ b/packages/repo-tools/package.json @@ -37,7 +37,7 @@ "@microsoft/api-extractor": "^7.23.0", "@microsoft/api-extractor-model": "^7.17.2", "@microsoft/tsdoc": "0.14.1", - "@microsoft/tsdoc-config": "0.16.1", + "@microsoft/tsdoc-config": "0.16.2", "chalk": "^4.0.0", "commander": "^9.1.0", "fs-extra": "10.1.0", diff --git a/yarn.lock b/yarn.lock index 12fb4b6311..ecddc30c95 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8227,7 +8227,7 @@ __metadata: "@microsoft/api-extractor": ^7.23.0 "@microsoft/api-extractor-model": ^7.17.2 "@microsoft/tsdoc": 0.14.1 - "@microsoft/tsdoc-config": 0.16.1 + "@microsoft/tsdoc-config": 0.16.2 "@types/is-glob": ^4.0.2 "@types/mock-fs": ^4.13.0 chalk: ^4.0.0 @@ -11268,15 +11268,15 @@ __metadata: languageName: node linkType: hard -"@microsoft/tsdoc-config@npm:0.16.1, @microsoft/tsdoc-config@npm:~0.16.1": - version: 0.16.1 - resolution: "@microsoft/tsdoc-config@npm:0.16.1" +"@microsoft/tsdoc-config@npm:0.16.2, @microsoft/tsdoc-config@npm:~0.16.1": + version: 0.16.2 + resolution: "@microsoft/tsdoc-config@npm:0.16.2" dependencies: - "@microsoft/tsdoc": 0.14.1 + "@microsoft/tsdoc": 0.14.2 ajv: ~6.12.6 jju: ~1.4.0 resolve: ~1.19.0 - checksum: 2b2121803caf6584fe0264ad16f8fa10de68438c0b82bd25f918606052af5312050f38b6abd4bcf3d40f120713aab144762a7a280fa22dd12e5571cd08e348e1 + checksum: 12b0d703154076bcaac75ca42e804e4fc292672396441e54346d7eadd0d6b57f90980eda2b1bab89b224af86da34a2389f9054002e282011e795ca5919a4386f languageName: node linkType: hard @@ -11287,6 +11287,13 @@ __metadata: languageName: node linkType: hard +"@microsoft/tsdoc@npm:0.14.2": + version: 0.14.2 + resolution: "@microsoft/tsdoc@npm:0.14.2" + checksum: b167c89e916ba73ee20b9c9d5dba6aa3a0de25ed3d50050e8a344dca7cd43cb2e1059bd515c820369b6e708901dd3fda476a42bc643ca74a35671ce77f724a3a + languageName: node + linkType: hard + "@mswjs/cookies@npm:^0.2.0, @mswjs/cookies@npm:^0.2.2": version: 0.2.2 resolution: "@mswjs/cookies@npm:0.2.2" From c084d54c26fc78a55d13e9ad4414d06e8a994ed7 Mon Sep 17 00:00:00 2001 From: Rogerio Moura Date: Tue, 20 Dec 2022 15:08:33 -0300 Subject: [PATCH 27/99] add hoop plugin to marketplace Signed-off-by: Rogerio Moura --- microsite/data/plugins/hoop.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 microsite/data/plugins/hoop.yaml diff --git a/microsite/data/plugins/hoop.yaml b/microsite/data/plugins/hoop.yaml new file mode 100644 index 0000000000..520eda0f27 --- /dev/null +++ b/microsite/data/plugins/hoop.yaml @@ -0,0 +1,14 @@ +--- + title: Hoop + author: hoop.dev + authorUrl: https://hoop.dev + category: Cloud-native ssh + description: hoop.dev is a cloud-native ssh implementation that lets you edit connections contents live. + documentation: https://github.com/hoophq/backstage-plugin + iconUrl: https://avatars.githubusercontent.com/u/113131551?s=200&v=4 + npmPackageName: '@hoophq/backstage-plugin' + tags: + - cloud-native ssh + - monitoring + - redact + addedDate: '2022-12-20' \ No newline at end of file From 9a8150251a88fba79959e59e2862f5020565e98b Mon Sep 17 00:00:00 2001 From: Rogerio Moura Date: Tue, 20 Dec 2022 17:40:23 -0300 Subject: [PATCH 28/99] add LF pattern Signed-off-by: Rogerio Moura --- microsite/data/plugins/hoop.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microsite/data/plugins/hoop.yaml b/microsite/data/plugins/hoop.yaml index 520eda0f27..50039af6c9 100644 --- a/microsite/data/plugins/hoop.yaml +++ b/microsite/data/plugins/hoop.yaml @@ -11,4 +11,4 @@ - cloud-native ssh - monitoring - redact - addedDate: '2022-12-20' \ No newline at end of file + addedDate: '2022-12-20' From 40b675b5daa2bd1b451a93754c59d2f284842025 Mon Sep 17 00:00:00 2001 From: Rogerio Moura Date: Tue, 20 Dec 2022 18:03:33 -0300 Subject: [PATCH 29/99] remove empty spaces Signed-off-by: Rogerio Moura --- microsite/data/plugins/hoop.yaml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/microsite/data/plugins/hoop.yaml b/microsite/data/plugins/hoop.yaml index 50039af6c9..9e41502807 100644 --- a/microsite/data/plugins/hoop.yaml +++ b/microsite/data/plugins/hoop.yaml @@ -1,14 +1,14 @@ --- - title: Hoop - author: hoop.dev - authorUrl: https://hoop.dev - category: Cloud-native ssh - description: hoop.dev is a cloud-native ssh implementation that lets you edit connections contents live. - documentation: https://github.com/hoophq/backstage-plugin - iconUrl: https://avatars.githubusercontent.com/u/113131551?s=200&v=4 - npmPackageName: '@hoophq/backstage-plugin' - tags: - - cloud-native ssh - - monitoring - - redact - addedDate: '2022-12-20' +title: Hoop +author: hoop.dev +authorUrl: https://hoop.dev +category: Cloud-native ssh +description: hoop.dev is a cloud-native ssh implementation that lets you edit connections contents live. +documentation: https://github.com/hoophq/backstage-plugin +iconUrl: https://avatars.githubusercontent.com/u/113131551?s=200&v=4 +npmPackageName: '@hoophq/backstage-plugin' +tags: + - cloud-native ssh + - monitoring + - redact +addedDate: '2022-12-20' From 69d9fd72863a86056c148b6c9b2377a94d2f0d50 Mon Sep 17 00:00:00 2001 From: Heikki Hellgren Date: Wed, 21 Dec 2022 10:05:28 +0200 Subject: [PATCH 30/99] Add Q&A plugin Signed-off-by: Heikki Hellgren --- microsite/data/plugins/qeta.yaml | 10 ++++++++++ microsite/static/img/qeta-logo.png | Bin 0 -> 23092 bytes 2 files changed, 10 insertions(+) create mode 100644 microsite/data/plugins/qeta.yaml create mode 100644 microsite/static/img/qeta-logo.png diff --git a/microsite/data/plugins/qeta.yaml b/microsite/data/plugins/qeta.yaml new file mode 100644 index 0000000000..a4a3c343a4 --- /dev/null +++ b/microsite/data/plugins/qeta.yaml @@ -0,0 +1,10 @@ +--- +title: Q&A +author: drodil +authorUrl: https://github.com/drodil +category: Services +description: Ask and answer questions within Backstage +documentation: https://github.com/drodil/backstage-plugin-qeta +iconUrl: img/qeta-logo.png +npmPackageName: '@drodil/backstage-plugin-qeta' +addedDate: '2022-12-21' diff --git a/microsite/static/img/qeta-logo.png b/microsite/static/img/qeta-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fd789e285259d04fec989a1be830a1531f0245c4 GIT binary patch literal 23092 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

Lc zdXf=K%G3#vHy{R8|JA1$HLVH}W5YHr6~rJbWDM}3##C&E9%w0Ytag{K@B?fR7o`O~ zBuH_&gs_aSV*oTSIdb}gYs%VX;PIFnM2_#|%Yl#vQQ}?m&S&5yl@vAdhJ}XA+-;Xv z&|Z_ids8ES?`w%u0MPp&baUGZaQqwaT6y?D_)?VO0c0hoG&D0Q3Xur6l)|U`SjUQJ zA_-%@OibqezjqT>OAG8)lweJLk+er`{&nQaHXOJuA-A=4d-@O0)oq4!tzd?hNsF^5 zUkuf?sX$8Y9vewe^7ph2zCt={3*-ig zh5Y#|5A}t3(h$3vK8yyFQD6_Pw2fK|Zvbq8m-m9P4^_})Tg1MP(3g^L%j2H_jNY8I0N77b)*YCrQHoHL{2j~a$X8YU5{dsc8H4{b zjJUuE5^^9W+seI87x8q~wId2wFmEtm<;8PyPZrRZ{imhluVzhEm8`2_T(~%>mh=$l zhq|cMB!s*BZ;Hy zN4>p6ynlN zt7r9N3%vO>xzFamfwKnHNi?XB|_l(!AbTSJ1gBVTb(L9db; zpFGKa;3(E+K?lTv>+A0623PHw$hXQ4lYtdo?HW9aeU z01wE-1=RgAdYHQ^M#FeK4%vAAJ-zP>JE3vVw+F6NgeZa-XaK8vN2NsB^40$Uxku^^ literal 0 HcmV?d00001 From c04f3658ac9da060c3d621ef7fcf2d8582c0d833 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 21 Dec 2022 10:49:50 +0100 Subject: [PATCH 31/99] fixup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- plugins/github-actions/src/__fixtures__/get-workflow-run.json | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/github-actions/src/__fixtures__/get-workflow-run.json b/plugins/github-actions/src/__fixtures__/get-workflow-run.json index 38c3513b15..7b6b3b3890 100644 --- a/plugins/github-actions/src/__fixtures__/get-workflow-run.json +++ b/plugins/github-actions/src/__fixtures__/get-workflow-run.json @@ -3,6 +3,7 @@ "name": "Build", "node_id": "MDEyOldvcmtmbG93IFJ1bjI2OTI4OQ==", "check_suite_id": 42, + "display_title": "foo", "check_suite_node_id": "MDEwOkNoZWNrU3VpdGU0Mg==", "head_branch": "main", "head_sha": "acb5820ced9479c074f688cc328bf03f341a511d", From 7aeb1fa73af8a7f1c20ef2c648ecefe5333b45ad Mon Sep 17 00:00:00 2001 From: Suzanne Daniels Date: Wed, 21 Dec 2022 11:25:56 +0100 Subject: [PATCH 32/99] Updating /live page Signed-off-by: Suzanne Daniels --- microsite/pages/en/live.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/microsite/pages/en/live.js b/microsite/pages/en/live.js index 11945fcd3b..5bd257f746 100644 --- a/microsite/pages/en/live.js +++ b/microsite/pages/en/live.js @@ -34,7 +34,7 @@ const Background = props => { From 8a97d472a3b27b74a9ef6db6402fae53092b9b35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 21 Dec 2022 11:47:45 +0100 Subject: [PATCH 33/99] change to asc and desc prefixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- docs/features/software-catalog/api.md | 23 +++++++++++++++ .../catalog-client/src/CatalogClient.test.ts | 4 ++- packages/catalog-client/src/CatalogClient.ts | 12 ++++---- .../request/parseEntityOrderParams.test.ts | 27 +++++++++-------- .../service/request/parseEntityOrderParams.ts | 29 ++++++------------- 5 files changed, 53 insertions(+), 42 deletions(-) diff --git a/docs/features/software-catalog/api.md b/docs/features/software-catalog/api.md index 3221b9e46a..57de9b7273 100644 --- a/docs/features/software-catalog/api.md +++ b/docs/features/software-catalog/api.md @@ -154,6 +154,29 @@ Some more real world usable examples: `/entities?fields=kind,metadata.namespace,metadata.name` +### Ordering + +By default the entities are returned in an undefined, but stable, order. You can +pass in one or more `order` query parameters to affect that ordering. + +Each parameter starts either with `asc:` for ascending lexicographical order or +`desc:` for descending (reverse) lexicographical order, followed by a +dot-separated path into an entity's keys. The ordering is case insensitive. If +more than one order directive is given, later directives have lower precedence +(they are applied only when directives of higher precedence have equal values). + +Example: + +```text +/entities?order=asc:kind&order=desc:metadata.name +``` + +This will order the output first by kind ascending, and then within each kind +(if there's more than one of a given kind) by their name descending. When given +a field that does NOT exist on all entities in the result set, those entities +that do not have the field will always be sorted last in that particular order +step, no matter what the desired order was. + #### Pagination You may pass the `offset` and `limit` query parameters to do classical diff --git a/packages/catalog-client/src/CatalogClient.test.ts b/packages/catalog-client/src/CatalogClient.test.ts index f87b12353d..8587a5a2e1 100644 --- a/packages/catalog-client/src/CatalogClient.test.ts +++ b/packages/catalog-client/src/CatalogClient.test.ts @@ -199,7 +199,9 @@ describe('CatalogClient', () => { server.use( rest.get(`${mockBaseUrl}/entities`, (req, res, ctx) => { - expect(req.url.search).toBe('?order=kind&order=-metadata.name'); + expect(req.url.search).toBe( + '?order=asc:kind&order=desc:metadata.name', + ); return res(ctx.json([])); }), ); diff --git a/packages/catalog-client/src/CatalogClient.ts b/packages/catalog-client/src/CatalogClient.ts index 0a5954d4bd..81f7343555 100644 --- a/packages/catalog-client/src/CatalogClient.ts +++ b/packages/catalog-client/src/CatalogClient.ts @@ -139,13 +139,11 @@ export class CatalogClient implements CatalogApi { if (order) { for (const directive of [order].flat()) { if (directive) { - // We could choose to always put in the + prefix, but it's not - // required (ascending sort is the default) and it always gets URL - // encoded to %2B which looks a bit less pretty - so we don't - const str = `${directive.order === 'desc' ? '-' : ''}${ - directive.field - }`; - params.push(`order=${encodeURIComponent(str)}`); + params.push( + `order=${encodeURIComponent(directive.order)}:${encodeURIComponent( + directive.field, + )}`, + ); } } } diff --git a/plugins/catalog-backend/src/service/request/parseEntityOrderParams.test.ts b/plugins/catalog-backend/src/service/request/parseEntityOrderParams.test.ts index 77cf73f57b..1433e6fd2b 100644 --- a/plugins/catalog-backend/src/service/request/parseEntityOrderParams.test.ts +++ b/plugins/catalog-backend/src/service/request/parseEntityOrderParams.test.ts @@ -22,22 +22,21 @@ describe('parseEntityOrderParams', () => { }); it('handles parameters with various orders', () => { - expect(parseEntityOrderParams({ order: ['a', '+b', '-c'] })).toEqual([ + expect( + parseEntityOrderParams({ order: ['asc:a', 'desc:b', 'asc:c:d'] }), + ).toEqual([ { field: 'a', order: 'asc' }, - { field: 'b', order: 'asc' }, - { field: 'c', order: 'desc' }, + { field: 'b', order: 'desc' }, + { field: 'c:d', order: 'asc' }, ]); }); - it('rejects missing order or key', () => { - expect(() => parseEntityOrderParams({ order: [''] })).toThrow( - 'Invalid order parameter "", no field given', - ); - expect(() => parseEntityOrderParams({ order: ['+'] })).toThrow( - 'Invalid order parameter "+", no field given', - ); - expect(() => parseEntityOrderParams({ order: ['-'] })).toThrow( - 'Invalid order parameter "-", no field given', - ); - }); + it.each(['', ':', 'ascii:', 'ascii:ebcdic', ':colon'])( + 'rejects missing/bad order or key, %p', + order => { + expect(() => parseEntityOrderParams({ order: [order] })).toThrow( + `Invalid order parameter "${order}", expected ":"`, + ); + }, + ); }); diff --git a/plugins/catalog-backend/src/service/request/parseEntityOrderParams.ts b/plugins/catalog-backend/src/service/request/parseEntityOrderParams.ts index d10119fd47..ff81a91ca5 100644 --- a/plugins/catalog-backend/src/service/request/parseEntityOrderParams.ts +++ b/plugins/catalog-backend/src/service/request/parseEntityOrderParams.ts @@ -22,27 +22,16 @@ export function parseEntityOrderParams( params: Record, ): EntityOrder[] | undefined { return parseStringsParam(params.order, 'order')?.map(item => { - let order: 'asc' | 'desc'; - let field: string; - switch (item[0]) { - case '+': - order = 'asc'; - field = item.slice(1).trim(); - break; - case '-': - order = 'desc'; - field = item.slice(1).trim(); - break; - default: - order = 'asc'; - field = item.trim(); - break; + const match = item.match(/^(asc|desc):(.+)$/); + if (!match) { + throw new InputError( + `Invalid order parameter "${item}", expected ":"`, + ); } - if (!field) { - throw new InputError(`Invalid order parameter "${item}", no field given`); - } - - return { field, order }; + return { + order: match[1] as 'asc' | 'desc', + field: match[2], + }; }); } From c6448ee50924cb08e6765a79d16787b852ca9e37 Mon Sep 17 00:00:00 2001 From: Eric Peterson Date: Wed, 21 Dec 2022 12:06:05 +0100 Subject: [PATCH 34/99] Document how to provide custom search result list items Signed-off-by: Eric Peterson --- .../integrating-search-into-plugins.md | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/docs/plugins/integrating-search-into-plugins.md b/docs/plugins/integrating-search-into-plugins.md index 3855dd5474..20026189d8 100644 --- a/docs/plugins/integrating-search-into-plugins.md +++ b/docs/plugins/integrating-search-into-plugins.md @@ -333,3 +333,85 @@ reading the search context. If you produce something generic and reusable, consider contributing your component upstream so that all users of the Backstage Search Platform can benefit. Issues and pull requests welcome. + +#### Custom search results + +Search results throughout Backstage are rendered as lists so that list items can easily be customized; although a default result list item is available, plugins are in the best position to provide custom result list items that surface relevant information only known to the plugin. + +The example below imagines `YourCustomSearchResult` as a type of search result that contains associated `tags` which could be rendered as chips below the title/text. + +```tsx +import { Link } from '@backstage/core-components'; +import { useAnalytics } from '@backstage/core-plugin-api'; +import { ResultHighlight } from '@backstage/plugin-search-common'; +import { HighlightedSearchResultText } from '@backstage/plugin-search-react'; + +type CustomSearchResultListItemProps = { + result: YourCustomSearchResult; + rank?: number; + highlight?: ResultHighlight; +}; + +export const CustomSearchResultListItem = ( + props: CustomSearchResultListItemProps, +) => { + const { title, text, location, tags } = props.result; + + const analytics = useAnalytics(); + const handleClick = () => { + analytics.captureEvent('discover', title, { + attributes: { to: location }, + value: props.rank, + }); + }; + + return ( + + + + + ) : ( + title + ) + } + secondary={ + highlight?.fields?.text ? ( + + ) : ( + text + ) + } + /> + {tags && + tags.map((tag: string) => ( + + ))} + + + + + ); +}; +``` + +The optional use of the `` component makes it possible to highlight relevant parts of the result based on the user's search query. + +**Note on Analytics**: In order to track and improve search experiences across Backstage, it's important to understand when and what users search for, as well as what they click on after searching. When implementing a custom result component, it's your responsibility to instrument it according to search analytics conventions. In particular: + +- You must use the `analytics.captureEvent` method, from the `useAnalytics()` hook. +- You must ensure that the action of the event, representing a click on a search result item, is `discover`, and the subject is the `title` of the clicked result. In addition, the `to` attribute should be set to the result's `location`, and the `value` of the event must be set to the `rank` (passed in as a prop). +- You must ensure that the aforementioned `captureEvent` method is called when a user clicks the link; you should further ensure that the `noTrack` prop is added to the link (which disables default link click tracking, in favor of this custom instrumentation). + +For other examples and inspiration on custom result list items, check out the [``](https://github.com/backstage/backstage/blob/c981e83/plugins/stack-overflow/src/search/StackOverflowSearchResultListItem/StackOverflowSearchResultListItem.tsx) or [``](https://github.com/backstage/backstage/blob/c981e83/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx) components. From 7cfbbb7801ed586ce1b960f114af0baeac8df45f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 21 Dec 2022 13:33:03 +0100 Subject: [PATCH 35/99] Update docs/features/software-catalog/api.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Johan Haals Signed-off-by: Fredrik Adelöw --- docs/features/software-catalog/api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/features/software-catalog/api.md b/docs/features/software-catalog/api.md index 57de9b7273..afd9a0af93 100644 --- a/docs/features/software-catalog/api.md +++ b/docs/features/software-catalog/api.md @@ -156,7 +156,7 @@ Some more real world usable examples: ### Ordering -By default the entities are returned in an undefined, but stable, order. You can +By default the entities are returned in an undefined, but stable order. You can pass in one or more `order` query parameters to affect that ordering. Each parameter starts either with `asc:` for ascending lexicographical order or From 47c10706dfab958feb85c7760eaf3169282c3325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 21 Dec 2022 14:03:24 +0100 Subject: [PATCH 36/99] attempt to unbreak the duplicated versions problem in master MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/bright-pants-cry.md | 5 +++++ packages/cli/src/lib/versioning/Lockfile.ts | 11 ++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 .changeset/bright-pants-cry.md diff --git a/.changeset/bright-pants-cry.md b/.changeset/bright-pants-cry.md new file mode 100644 index 0000000000..53ba0c9521 --- /dev/null +++ b/.changeset/bright-pants-cry.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Fixing the error `Error: No existing version was accepted for range ^0.12.0, searching through 0.11.2,0.0.0-use.local, for package @backstage/core-components`, which can happen when there are multiple matching versions for a package, and one of them uses `workspace:^` as its range. diff --git a/packages/cli/src/lib/versioning/Lockfile.ts b/packages/cli/src/lib/versioning/Lockfile.ts index 016593ea8d..ab6d98521f 100644 --- a/packages/cli/src/lib/versioning/Lockfile.ts +++ b/packages/cli/src/lib/versioning/Lockfile.ts @@ -190,9 +190,14 @@ export class Lockfile { } // Find all versions currently in use - const versions = Array.from(new Set(entries.map(e => e.version))).sort( - (v1, v2) => semver.rcompare(v1, v2), - ); + const versions = Array.from(new Set(entries.map(e => e.version))) + .map(v => { + // Translate workspace:^ references to the actual version + return v === '0.0.0-use.local' + ? require(`${name}/package.json`).version + : v; + }) + .sort((v1, v2) => semver.rcompare(v1, v2)); // If we're not using at least 2 different versions we're done if (versions.length < 2) { From 6a3384ada655206f162e46f1262584bda630b09e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Dec 2022 13:22:14 +0000 Subject: [PATCH 37/99] chore(deps): update dependency @changesets/cli to v2.26.0 Signed-off-by: Renovate Bot --- yarn.lock | 201 +++++++++++++++++++++++++++--------------------------- 1 file changed, 101 insertions(+), 100 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6deaf23353..e79a68049a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3297,12 +3297,12 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.18.9 - resolution: "@babel/runtime@npm:7.18.9" +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": + version: 7.20.6 + resolution: "@babel/runtime@npm:7.20.6" dependencies: - regenerator-runtime: ^0.13.4 - checksum: 36dd736baba7164e82b3cc9d43e081f0cb2d05ff867ad39cac515d99546cee75b7f782018b02a3dcf5f2ef3d27f319faa68965fdfec49d4912c60c6002353a2e + regenerator-runtime: ^0.13.11 + checksum: 42a8504db21031b1859fbc0f52d698a3d2f5ada9519eb76c6f96a7e657d8d555732a18fe71ef428a67cc9fc81ca0d3562fb7afdc70549c5fec343190cbaa9b03 languageName: node linkType: hard @@ -8334,15 +8334,15 @@ __metadata: languageName: node linkType: hard -"@changesets/apply-release-plan@npm:^6.1.2": - version: 6.1.2 - resolution: "@changesets/apply-release-plan@npm:6.1.2" +"@changesets/apply-release-plan@npm:^6.1.3": + version: 6.1.3 + resolution: "@changesets/apply-release-plan@npm:6.1.3" dependencies: - "@babel/runtime": ^7.10.4 - "@changesets/config": ^2.2.0 + "@babel/runtime": ^7.20.1 + "@changesets/config": ^2.3.0 "@changesets/get-version-range-type": ^0.3.2 - "@changesets/git": ^1.5.0 - "@changesets/types": ^5.2.0 + "@changesets/git": ^2.0.0 + "@changesets/types": ^5.2.1 "@manypkg/get-packages": ^1.1.3 detect-indent: ^6.0.0 fs-extra: ^7.0.1 @@ -8351,51 +8351,51 @@ __metadata: prettier: ^2.7.1 resolve-from: ^5.0.0 semver: ^5.4.1 - checksum: efe2cdc493cb2182140b73ff76e34ee7c90887bfa2f42b4ec07db0107ec94b9c0e95519912dafcf9eb530ad2414487fbd61ca6e6d5f853fe383db93856d0d362 + checksum: 3772a6e0ede33abdac6fcc52359307f770d5fafa53295c83e0a11b81e5802b2fe5e74e4d672c0a082f5d73dc1a9ef56509870b81824111396f74de99ada9526b languageName: node linkType: hard -"@changesets/assemble-release-plan@npm:^5.2.2": - version: 5.2.2 - resolution: "@changesets/assemble-release-plan@npm:5.2.2" +"@changesets/assemble-release-plan@npm:^5.2.3": + version: 5.2.3 + resolution: "@changesets/assemble-release-plan@npm:5.2.3" dependencies: - "@babel/runtime": ^7.10.4 + "@babel/runtime": ^7.20.1 "@changesets/errors": ^0.1.4 - "@changesets/get-dependents-graph": ^1.3.4 - "@changesets/types": ^5.2.0 + "@changesets/get-dependents-graph": ^1.3.5 + "@changesets/types": ^5.2.1 "@manypkg/get-packages": ^1.1.3 semver: ^5.4.1 - checksum: 4f4a2108537ecbfbf9a554e441f4899f9c6d7e2b933deddd186d6f670ea1e52ebbbef3da01bc61b5cb735470536258b94d7bbac1035fe98dc277615d5017c61a + checksum: 2c61894414736b12e9a26903d73c387b65f4caba398e280488b885f4d0f4bb307aaa6bae140dfd754c85de6557bd07645accda2af6b8794837ab43823ba6215c languageName: node linkType: hard -"@changesets/changelog-git@npm:^0.1.13": - version: 0.1.13 - resolution: "@changesets/changelog-git@npm:0.1.13" +"@changesets/changelog-git@npm:^0.1.14": + version: 0.1.14 + resolution: "@changesets/changelog-git@npm:0.1.14" dependencies: - "@changesets/types": ^5.2.0 - checksum: c0e3b11a0a63794304e064ef01444503a864a1fbfc4c592bd3aec91ba6aa5c24fac91a47f7f0159f449cd6ce99c334290b465d84b1c98b6577937ff55974cc7e + "@changesets/types": ^5.2.1 + checksum: 60b45bb899e66cec669ab3884d5d18550cd30bf5a8b06f335eb72aa6c9e018dd3e0187e4df61c91a22076153e346b735b792f0e9c6186e6245b1b7aec2fc42d4 languageName: node linkType: hard "@changesets/cli@npm:^2.14.0": - version: 2.25.2 - resolution: "@changesets/cli@npm:2.25.2" + version: 2.26.0 + resolution: "@changesets/cli@npm:2.26.0" dependencies: - "@babel/runtime": ^7.10.4 - "@changesets/apply-release-plan": ^6.1.2 - "@changesets/assemble-release-plan": ^5.2.2 - "@changesets/changelog-git": ^0.1.13 - "@changesets/config": ^2.2.0 + "@babel/runtime": ^7.20.1 + "@changesets/apply-release-plan": ^6.1.3 + "@changesets/assemble-release-plan": ^5.2.3 + "@changesets/changelog-git": ^0.1.14 + "@changesets/config": ^2.3.0 "@changesets/errors": ^0.1.4 - "@changesets/get-dependents-graph": ^1.3.4 - "@changesets/get-release-plan": ^3.0.15 - "@changesets/git": ^1.5.0 + "@changesets/get-dependents-graph": ^1.3.5 + "@changesets/get-release-plan": ^3.0.16 + "@changesets/git": ^2.0.0 "@changesets/logger": ^0.0.5 - "@changesets/pre": ^1.0.13 - "@changesets/read": ^0.5.8 - "@changesets/types": ^5.2.0 - "@changesets/write": ^0.2.2 + "@changesets/pre": ^1.0.14 + "@changesets/read": ^0.5.9 + "@changesets/types": ^5.2.1 + "@changesets/write": ^0.2.3 "@manypkg/get-packages": ^1.1.3 "@types/is-ci": ^3.0.0 "@types/semver": ^6.0.0 @@ -8417,22 +8417,22 @@ __metadata: tty-table: ^4.1.5 bin: changeset: bin.js - checksum: 815c69cb6cee75ede88361582581d94a860d96335e7bab179481cd5e2bb1e60cc39662dccd2b2b87818e9c63a84ff9eb469ed27f13b6adf4401a699e49beb79c + checksum: 12a911b4196ff390ce114e27b475e59f5f5e1fdc7049d1ab04effe73d4811d99db47a030de6abe332300b4b2c43cffc537cec4883476b59b69bc23aee07cd5c5 languageName: node linkType: hard -"@changesets/config@npm:^2.2.0": - version: 2.2.0 - resolution: "@changesets/config@npm:2.2.0" +"@changesets/config@npm:^2.3.0": + version: 2.3.0 + resolution: "@changesets/config@npm:2.3.0" dependencies: "@changesets/errors": ^0.1.4 - "@changesets/get-dependents-graph": ^1.3.4 + "@changesets/get-dependents-graph": ^1.3.5 "@changesets/logger": ^0.0.5 - "@changesets/types": ^5.2.0 + "@changesets/types": ^5.2.1 "@manypkg/get-packages": ^1.1.3 fs-extra: ^7.0.1 micromatch: ^4.0.2 - checksum: 18a6ae52150a7426bcaeb4018f7eb4e330dec69a448b093d604f1cd73d89b689eb791777cee5af57f9e572403ccbf196a572b33dbb702bae4bccfbbbd3be5ffc + checksum: 68a61437ffeda219f22f6d4d32bf8d428e6f284d7e0e191c0629f64f035a051b4068222b1ea3ff1866e5944a153004735dab82205404919f6806c97c546700b1 languageName: node linkType: hard @@ -8445,31 +8445,31 @@ __metadata: languageName: node linkType: hard -"@changesets/get-dependents-graph@npm:^1.3.4": - version: 1.3.4 - resolution: "@changesets/get-dependents-graph@npm:1.3.4" +"@changesets/get-dependents-graph@npm:^1.3.5": + version: 1.3.5 + resolution: "@changesets/get-dependents-graph@npm:1.3.5" dependencies: - "@changesets/types": ^5.2.0 + "@changesets/types": ^5.2.1 "@manypkg/get-packages": ^1.1.3 chalk: ^2.1.0 fs-extra: ^7.0.1 semver: ^5.4.1 - checksum: 584852e17fd102271dea520f851c85130605f232f7f52126d202b0041269af12d5681744bfa7fecf41048e5fd62a71da726be471207832060408d9cfb35ec3fb + checksum: d7abb1da21804fd66b1458e46be2f2aec741145a43500b0463a5acfbb420ac5ce776a7328fa660ad4e6e811f933bd6f36e7bbaf00fb3f591d46f0b8e7108fdcd languageName: node linkType: hard -"@changesets/get-release-plan@npm:^3.0.15": - version: 3.0.15 - resolution: "@changesets/get-release-plan@npm:3.0.15" +"@changesets/get-release-plan@npm:^3.0.16": + version: 3.0.16 + resolution: "@changesets/get-release-plan@npm:3.0.16" dependencies: - "@babel/runtime": ^7.10.4 - "@changesets/assemble-release-plan": ^5.2.2 - "@changesets/config": ^2.2.0 - "@changesets/pre": ^1.0.13 - "@changesets/read": ^0.5.8 - "@changesets/types": ^5.2.0 + "@babel/runtime": ^7.20.1 + "@changesets/assemble-release-plan": ^5.2.3 + "@changesets/config": ^2.3.0 + "@changesets/pre": ^1.0.14 + "@changesets/read": ^0.5.9 + "@changesets/types": ^5.2.1 "@manypkg/get-packages": ^1.1.3 - checksum: f2d33982dfeabe12e0eba976a3cc68e05bdd834b4dd6283f42464d028852e46f90cb14b84f0b5425813c787494d0490dc12df5d25d63559d07f47f9a7cb87c12 + checksum: ab8360c17f69437ad51edfd8910a2609ab8dc1e8cf006994b3938b2551b1eb08b7ab8043b8bf1e94916cbadd89e357a0c1148e20eab8bb5e3ae284384d239942 languageName: node linkType: hard @@ -8480,17 +8480,18 @@ __metadata: languageName: node linkType: hard -"@changesets/git@npm:^1.5.0": - version: 1.5.0 - resolution: "@changesets/git@npm:1.5.0" +"@changesets/git@npm:^2.0.0": + version: 2.0.0 + resolution: "@changesets/git@npm:2.0.0" dependencies: - "@babel/runtime": ^7.10.4 + "@babel/runtime": ^7.20.1 "@changesets/errors": ^0.1.4 - "@changesets/types": ^5.2.0 + "@changesets/types": ^5.2.1 "@manypkg/get-packages": ^1.1.3 is-subdir: ^1.1.1 + micromatch: ^4.0.2 spawndamnit: ^2.0.0 - checksum: 7208d5bff9c584aa752ca6f647ba5e97356213d00c88cce65c24c6bab1b3837c14f8977c2384a7fecb81e20a0586d4cc1fddb408a38e7dd818ef18377d01ee54 + checksum: 3820b7b689bbe8dfb93222c766bee214e68a45f07b2b5c8056891f9ffe6f1e369c0f84388246a9eea5317b496ae80ffd1508319190f79c359f060ebf8ccb7b13 languageName: node linkType: hard @@ -8503,42 +8504,42 @@ __metadata: languageName: node linkType: hard -"@changesets/parse@npm:^0.3.15": - version: 0.3.15 - resolution: "@changesets/parse@npm:0.3.15" +"@changesets/parse@npm:^0.3.16": + version: 0.3.16 + resolution: "@changesets/parse@npm:0.3.16" dependencies: - "@changesets/types": ^5.2.0 + "@changesets/types": ^5.2.1 js-yaml: ^3.13.1 - checksum: 1e17f494954140d7885f4be76ac7708c19930f08ecf0b58bcee09160ad6e59223da8899df0709a78e5b5fa419f0d60eccbb34bf0c11d564e24f766c4654e3384 + checksum: 475f808ac8d33ec90af3914d55af1da8eeb9336d6cab7dd9e5be74af844f0ec04f4a67d5237a1d3284a468e0c9198e2be01d0e5870a1b28e63bc240f5f1ffea9 languageName: node linkType: hard -"@changesets/pre@npm:^1.0.13": - version: 1.0.13 - resolution: "@changesets/pre@npm:1.0.13" +"@changesets/pre@npm:^1.0.14": + version: 1.0.14 + resolution: "@changesets/pre@npm:1.0.14" dependencies: - "@babel/runtime": ^7.10.4 + "@babel/runtime": ^7.20.1 "@changesets/errors": ^0.1.4 - "@changesets/types": ^5.2.0 + "@changesets/types": ^5.2.1 "@manypkg/get-packages": ^1.1.3 fs-extra: ^7.0.1 - checksum: f1cc5721546c66977a2fc62428aae9d62f78a04aefac224ac7014172807afa9d07f6da1e326d0a14b1ff12840b0379a7ec24e7984839deb337cd203b63c24b1d + checksum: 6b849bd6f916476a5b5664bc4286020bee506985c82f723a757fa4e681b0b7129db81751f16072ac55a980ffd83a4b234d6b8d0f8b6bc889aa0c0fd5377431e8 languageName: node linkType: hard -"@changesets/read@npm:^0.5.8": - version: 0.5.8 - resolution: "@changesets/read@npm:0.5.8" +"@changesets/read@npm:^0.5.9": + version: 0.5.9 + resolution: "@changesets/read@npm:0.5.9" dependencies: - "@babel/runtime": ^7.10.4 - "@changesets/git": ^1.5.0 + "@babel/runtime": ^7.20.1 + "@changesets/git": ^2.0.0 "@changesets/logger": ^0.0.5 - "@changesets/parse": ^0.3.15 - "@changesets/types": ^5.2.0 + "@changesets/parse": ^0.3.16 + "@changesets/types": ^5.2.1 chalk: ^2.1.0 fs-extra: ^7.0.1 p-filter: ^2.1.0 - checksum: cc32c5a3366be58c5b00988940eb6677898814de7ce60a3c4785d064e0df7563627f8dcfa0620f3ef9cea6f328ce538b2ba7d430c35c883f212b71a94026b2d8 + checksum: 0875a80829186de2da55bc0347601cc31b269d54fb6967a5093abacbbd9f949e352907b8340b61348a304228fdade670ded151327f16eea3424b5b4b2bb9888c languageName: node linkType: hard @@ -8549,23 +8550,23 @@ __metadata: languageName: node linkType: hard -"@changesets/types@npm:^5.2.0": - version: 5.2.0 - resolution: "@changesets/types@npm:5.2.0" - checksum: 579cf8bd2d3a03f293871976d8641531667527f248dc29310a70928d6400cef5df3d09e75beeb2ccf5d384fa1f294f0a2db243c6ebf53913d1f67e283e826f91 +"@changesets/types@npm:^5.2.1": + version: 5.2.1 + resolution: "@changesets/types@npm:5.2.1" + checksum: 527dc1aa41b040fe35bcd55f7d07bec710320b179b000c429723e25b87aac18be487daf5047d4fecf2781aad78f73abff111e76e411b652f7a2e812a464c69f2 languageName: node linkType: hard -"@changesets/write@npm:^0.2.2": - version: 0.2.2 - resolution: "@changesets/write@npm:0.2.2" +"@changesets/write@npm:^0.2.3": + version: 0.2.3 + resolution: "@changesets/write@npm:0.2.3" dependencies: - "@babel/runtime": ^7.10.4 - "@changesets/types": ^5.2.0 + "@babel/runtime": ^7.20.1 + "@changesets/types": ^5.2.1 fs-extra: ^7.0.1 human-id: ^1.0.2 prettier: ^2.7.1 - checksum: e23fb4a88e12af32db59d2f1866380ec4a50e7fa55cb55d860619f0735c5078ed170f832125672bb007b7a0cced67d9304a1b81260a7224af6afe0e3957dc999 + checksum: 40ad8069f9adc565b78a5f25992e31b41a12e551d94c29e1b4def49ce98871a1e358feda6536be8b363a6dba18b1226a22ecfc60fdd7bc1e74bfcf46b07f91be languageName: node linkType: hard @@ -33406,10 +33407,10 @@ __metadata: languageName: node linkType: hard -"regenerator-runtime@npm:^0.13.3, regenerator-runtime@npm:^0.13.4": - version: 0.13.9 - resolution: "regenerator-runtime@npm:0.13.9" - checksum: 65ed455fe5afd799e2897baf691ca21c2772e1a969d19bb0c4695757c2d96249eb74ee3553ea34a91062b2a676beedf630b4c1551cc6299afb937be1426ec55e +"regenerator-runtime@npm:^0.13.11, regenerator-runtime@npm:^0.13.3, regenerator-runtime@npm:^0.13.4": + version: 0.13.11 + resolution: "regenerator-runtime@npm:0.13.11" + checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 languageName: node linkType: hard From 2320225b4ac1f84bf30cfdd4e1a8ff5a7d8f5acc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Dec 2022 13:23:26 +0000 Subject: [PATCH 38/99] chore(deps): update dependency @types/sanitize-html to v2.8.0 Signed-off-by: Renovate Bot --- yarn.lock | 63 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 53 insertions(+), 10 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6deaf23353..aa2189e3aa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14940,11 +14940,11 @@ __metadata: linkType: hard "@types/sanitize-html@npm:^2.6.2": - version: 2.6.2 - resolution: "@types/sanitize-html@npm:2.6.2" + version: 2.8.0 + resolution: "@types/sanitize-html@npm:2.8.0" dependencies: - htmlparser2: ^6.0.0 - checksum: 08b43427427cbd8acd2843bbf9e00576c06e3916fc523d27fd9016f39563f7999f78b632ff473ef83a77f86bdea9286de2f81e3a8f8a05af6721687651c84f1c + htmlparser2: ^8.0.0 + checksum: 6e583cac673832536fac8da53890073f753baf2c49826fd0c2831e615cb5527692d03b2b5ba9eb8caf8694de4bfb1c31fd12398d2b68331725590a6ceb8f82fe languageName: node linkType: hard @@ -20470,6 +20470,17 @@ __metadata: languageName: node linkType: hard +"dom-serializer@npm:^2.0.0": + version: 2.0.0 + resolution: "dom-serializer@npm:2.0.0" + dependencies: + domelementtype: ^2.3.0 + domhandler: ^5.0.2 + entities: ^4.2.0 + checksum: cd1810544fd8cdfbd51fa2c0c1128ec3a13ba92f14e61b7650b5de421b88205fd2e3f0cc6ace82f13334114addb90ed1c2f23074a51770a8e9c1273acbc7f3e6 + languageName: node + linkType: hard + "dom-walk@npm:^0.1.0": version: 0.1.1 resolution: "dom-walk@npm:0.1.1" @@ -20484,10 +20495,10 @@ __metadata: languageName: node linkType: hard -"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": - version: 2.2.0 - resolution: "domelementtype@npm:2.2.0" - checksum: 24cb386198640cd58aa36f8c987f2ea61859929106d06ffcc8f547e70cb2ed82a6dc56dcb8252b21fba1f1ea07df6e4356d60bfe57f77114ca1aed6828362629 +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0": + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 languageName: node linkType: hard @@ -20518,6 +20529,15 @@ __metadata: languageName: node linkType: hard +"domhandler@npm:^5.0.1, domhandler@npm:^5.0.2": + version: 5.0.3 + resolution: "domhandler@npm:5.0.3" + dependencies: + domelementtype: ^2.3.0 + checksum: 0f58f4a6af63e6f3a4320aa446d28b5790a009018707bce2859dcb1d21144c7876482b5188395a188dfa974238c019e0a1e610d2fc269a12b2c192ea2b0b131c + languageName: node + linkType: hard + "dompurify@npm:=2.3.10": version: 2.3.10 resolution: "dompurify@npm:2.3.10" @@ -20543,6 +20563,17 @@ __metadata: languageName: node linkType: hard +"domutils@npm:^3.0.1": + version: 3.0.1 + resolution: "domutils@npm:3.0.1" + dependencies: + dom-serializer: ^2.0.0 + domelementtype: ^2.3.0 + domhandler: ^5.0.1 + checksum: 23aa7a840572d395220e173cb6263b0d028596e3950100520870a125af33ff819e6f609e1606d6f7d73bd9e7feb03bb404286e57a39063b5384c62b724d987b3 + languageName: node + linkType: hard + "dot-case@npm:^3.0.4": version: 3.0.4 resolution: "dot-case@npm:3.0.4" @@ -20860,7 +20891,7 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.3.0, entities@npm:^4.4.0": +"entities@npm:^4.2.0, entities@npm:^4.3.0, entities@npm:^4.4.0": version: 4.4.0 resolution: "entities@npm:4.4.0" checksum: 84d250329f4b56b40fa93ed067b194db21e8815e4eb9b59f43a086f0ecd342814f6bc483de8a77da5d64e0f626033192b1b4f1792232a7ea6b970ebe0f3187c2 @@ -24187,7 +24218,7 @@ __metadata: languageName: node linkType: hard -"htmlparser2@npm:^6.0.0, htmlparser2@npm:^6.1.0": +"htmlparser2@npm:^6.1.0": version: 6.1.0 resolution: "htmlparser2@npm:6.1.0" dependencies: @@ -24199,6 +24230,18 @@ __metadata: languageName: node linkType: hard +"htmlparser2@npm:^8.0.0": + version: 8.0.1 + resolution: "htmlparser2@npm:8.0.1" + dependencies: + domelementtype: ^2.3.0 + domhandler: ^5.0.2 + domutils: ^3.0.1 + entities: ^4.3.0 + checksum: 06d5c71e8313597722bc429ae2a7a8333d77bd3ab07ccb916628384b37332027b047f8619448d8f4a3312b6609c6ea3302a4e77435d859e9e686999e6699ca39 + languageName: node + linkType: hard + "http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0": version: 4.1.0 resolution: "http-cache-semantics@npm:4.1.0" From 9da74dcee627826c310c63e28065b1d1099fb035 Mon Sep 17 00:00:00 2001 From: Eric Peterson Date: Wed, 21 Dec 2022 14:48:12 +0100 Subject: [PATCH 39/99] Link to storybook and tweak language for intended audience Signed-off-by: Eric Peterson --- docs/plugins/integrating-search-into-plugins.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/plugins/integrating-search-into-plugins.md b/docs/plugins/integrating-search-into-plugins.md index 20026189d8..524daf18cd 100644 --- a/docs/plugins/integrating-search-into-plugins.md +++ b/docs/plugins/integrating-search-into-plugins.md @@ -336,7 +336,7 @@ benefit. Issues and pull requests welcome. #### Custom search results -Search results throughout Backstage are rendered as lists so that list items can easily be customized; although a default result list item is available, plugins are in the best position to provide custom result list items that surface relevant information only known to the plugin. +Search results throughout Backstage are rendered as lists so that list items can easily be customized; although a [default result list item](https://backstage.io/storybook/?path=/story/plugins-search-defaultresultlistitem--default) is available, plugins are in the best position to provide custom result list items that surface relevant information only known to the plugin. The example below imagines `YourCustomSearchResult` as a type of search result that contains associated `tags` which could be rendered as chips below the title/text. @@ -408,9 +408,9 @@ export const CustomSearchResultListItem = ( The optional use of the `` component makes it possible to highlight relevant parts of the result based on the user's search query. -**Note on Analytics**: In order to track and improve search experiences across Backstage, it's important to understand when and what users search for, as well as what they click on after searching. When implementing a custom result component, it's your responsibility to instrument it according to search analytics conventions. In particular: +**Note on Analytics**: In order for app integrators to track and improve search experiences across Backstage, it's important for them to understand when and what users search for, as well as what they click on after searching. When providing a custom result component, it's your responsibility as a plugin developer to instrument it according to search analytics conventions. In particular: -- You must use the `analytics.captureEvent` method, from the `useAnalytics()` hook. +- You must use the `analytics.captureEvent` method, from the `useAnalytics()` hook (detailed [plugin analytics docs are here](./analytics.md)). - You must ensure that the action of the event, representing a click on a search result item, is `discover`, and the subject is the `title` of the clicked result. In addition, the `to` attribute should be set to the result's `location`, and the `value` of the event must be set to the `rank` (passed in as a prop). - You must ensure that the aforementioned `captureEvent` method is called when a user clicks the link; you should further ensure that the `noTrack` prop is added to the link (which disables default link click tracking, in favor of this custom instrumentation). From e44419e32eeddb75597e0cc024e75eb0aba03fc8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Dec 2022 14:03:08 +0000 Subject: [PATCH 40/99] chore(deps): update dependency aws-sdk-mock to v5.8.0 Signed-off-by: Renovate Bot --- yarn.lock | 49 ++++++++++++------------------------------------- 1 file changed, 12 insertions(+), 37 deletions(-) diff --git a/yarn.lock b/yarn.lock index e79a68049a..e020a4ea65 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12806,7 +12806,7 @@ __metadata: languageName: node linkType: hard -"@sinonjs/commons@npm:^1.6.0, @sinonjs/commons@npm:^1.7.0, @sinonjs/commons@npm:^1.8.3": +"@sinonjs/commons@npm:^1.7.0": version: 1.8.3 resolution: "@sinonjs/commons@npm:1.8.3" dependencies: @@ -12842,17 +12842,6 @@ __metadata: languageName: node linkType: hard -"@sinonjs/samsam@npm:^6.1.1": - version: 6.1.1 - resolution: "@sinonjs/samsam@npm:6.1.1" - dependencies: - "@sinonjs/commons": ^1.6.0 - lodash.get: ^4.4.2 - type-detect: ^4.0.8 - checksum: a09b0914bf573f0da82bd03c64ba413df81a7c173818dc3f0a90c2652240ac835ef583f4d52f0b215e626633c91a4095c255e0669f6ead97241319f34f05e7fc - languageName: node - linkType: hard - "@sinonjs/samsam@npm:^7.0.1": version: 7.0.1 resolution: "@sinonjs/samsam@npm:7.0.1" @@ -16732,19 +16721,19 @@ __metadata: linkType: hard "aws-sdk-mock@npm:^5.2.1": - version: 5.7.0 - resolution: "aws-sdk-mock@npm:5.7.0" + version: 5.8.0 + resolution: "aws-sdk-mock@npm:5.8.0" dependencies: - aws-sdk: ^2.1122.0 - sinon: ^13.0.2 + aws-sdk: ^2.1231.0 + sinon: ^14.0.1 traverse: ^0.6.6 - checksum: 9ac22cffc2e99c64af7aa29d2b4030ff8fdbb36d98cb27008952371d159ce974d31538fded372484e5d89e3fa9c22df0b7835d635a325734696a68c96a09e668 + checksum: c0b06d63d375a6f6664a5860815bdcc21cbe752f227f3617db8bd9042e48604e5cc26834876909c8fc1e68ac937166f4cb0637b3cb565d05c9a64aa025fe3407 languageName: node linkType: hard -"aws-sdk@npm:^2.1122.0, aws-sdk@npm:^2.814.0, aws-sdk@npm:^2.840.0, aws-sdk@npm:^2.948.0": - version: 2.1224.0 - resolution: "aws-sdk@npm:2.1224.0" +"aws-sdk@npm:^2.1231.0, aws-sdk@npm:^2.814.0, aws-sdk@npm:^2.840.0, aws-sdk@npm:^2.948.0": + version: 2.1279.0 + resolution: "aws-sdk@npm:2.1279.0" dependencies: buffer: 4.9.2 events: 1.1.1 @@ -16756,7 +16745,7 @@ __metadata: util: ^0.12.4 uuid: 8.0.0 xml2js: 0.4.19 - checksum: 990b4db8b72462432cfd75b4fe2c71ff8b24abed2b0d6b6441d51211167afd00b002ff91d7c3ff02379b34f6e5dcae72bdf9e31f55a9c105f50ad96cfc8f08da + checksum: ee8e8ee7baea9abaa0e1d08294be8ff00795b9db606101ef69a45d1465dac936187e43079fbe7a28ff4a463c8f9cd728d9bfee3e3974b0b5b88eb437dc81295b languageName: node linkType: hard @@ -29463,7 +29452,7 @@ __metadata: languageName: node linkType: hard -"nise@npm:^5.1.1, nise@npm:^5.1.2": +"nise@npm:^5.1.2": version: 5.1.2 resolution: "nise@npm:5.1.2" dependencies: @@ -34755,21 +34744,7 @@ __metadata: languageName: node linkType: hard -"sinon@npm:^13.0.2": - version: 13.0.2 - resolution: "sinon@npm:13.0.2" - dependencies: - "@sinonjs/commons": ^1.8.3 - "@sinonjs/fake-timers": ^9.1.2 - "@sinonjs/samsam": ^6.1.1 - diff: ^5.0.0 - nise: ^5.1.1 - supports-color: ^7.2.0 - checksum: 237f21c8c4a8b31574c71b1b9f4c0f74a63dde5c0e86bd116effa4ce63c52467bd45fb4034a8fa32656a7919d9b19fc7b108ca9e1e6e3144f3735da96dad2877 - languageName: node - linkType: hard - -"sinon@npm:^14.0.2": +"sinon@npm:^14.0.1, sinon@npm:^14.0.2": version: 14.0.2 resolution: "sinon@npm:14.0.2" dependencies: From 9513a6fff9b0be6fd387380ba76f0d1fcaa13424 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 10:10:15 +0100 Subject: [PATCH 41/99] chore: add the examples to the dockerfile Signed-off-by: blam --- .github/workflows/uffizzi-build.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index 163531a755..5d66d4b610 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -55,6 +55,11 @@ jobs: images: registry.uffizzi.com/${{ env.UUID_TAG_APP }} tags: type=raw,value=60d + - name: Add examples directory to Dockerfile + run: | + echo "COPY examples /app/examples" >> ./example-app/packages/backend/Dockerfile + cat ./example-app/packages/backend/Dockerfile + - name: Build Image uses: docker/build-push-action@v2 with: From 8e964492b0c35aa9f9f59d16a319e50a39e336b8 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 10:30:06 +0100 Subject: [PATCH 42/99] chore: fix Signed-off-by: blam --- .github/workflows/uffizzi-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index 5d66d4b610..9e5c0e61df 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -57,7 +57,7 @@ jobs: - name: Add examples directory to Dockerfile run: | - echo "COPY examples /app/examples" >> ./example-app/packages/backend/Dockerfile + echo "COPY examples /examples" >> ./example-app/packages/backend/Dockerfile cat ./example-app/packages/backend/Dockerfile - name: Build Image From bf9d3fc29a47c1016a8f4cc6bbc7531b7c4abcff Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 10:42:15 +0100 Subject: [PATCH 43/99] chore: fixing addition of the examples Signed-off-by: blam --- .github/workflows/uffizzi-build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index 9e5c0e61df..55d0c63145 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -58,7 +58,6 @@ jobs: - name: Add examples directory to Dockerfile run: | echo "COPY examples /examples" >> ./example-app/packages/backend/Dockerfile - cat ./example-app/packages/backend/Dockerfile - name: Build Image uses: docker/build-push-action@v2 From 78b593f9ad10e630b66f229c195640a1b21b3b05 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 11:04:21 +0100 Subject: [PATCH 44/99] chore: use the e2e test method for building uffizi containers Signed-off-by: blam --- .github/workflows/uffizzi-build.yml | 2 +- packages/e2e-test/src/commands/index.ts | 3 ++- packages/e2e-test/src/commands/run.ts | 18 ++++++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index 55d0c63145..5a68ad9568 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -28,7 +28,7 @@ jobs: - name: backstage create-app | delete if already exists run: | rm -rf ./example-app - npx @backstage/create-app + node ./packages/e2e-test/.bin/e2e-test create -o ./example-app env: BACKSTAGE_APP_NAME: example-app diff --git a/packages/e2e-test/src/commands/index.ts b/packages/e2e-test/src/commands/index.ts index 95d311427c..db9ea225a3 100644 --- a/packages/e2e-test/src/commands/index.ts +++ b/packages/e2e-test/src/commands/index.ts @@ -15,8 +15,9 @@ */ import { Command } from 'commander'; -import { run } from './run'; +import { run, create } from './run'; export function registerCommands(program: Command) { program.command('run').description('Run e2e tests').action(run); + program.command('create').option('-o, --output ').action(create); } diff --git a/packages/e2e-test/src/commands/run.ts b/packages/e2e-test/src/commands/run.ts index 3eedb90b21..b022862c8c 100644 --- a/packages/e2e-test/src/commands/run.ts +++ b/packages/e2e-test/src/commands/run.ts @@ -43,6 +43,24 @@ const templatePackagePaths = [ 'packages/create-app/templates/default-app/packages/backend/package.json.hbs', ]; +export async function create({ output }: { output: string }) { + const outputDir = resolvePath(process.cwd(), output); + + const rootDir = await fs.mkdtemp(resolvePath(os.tmpdir(), 'backstage-e2e-')); + print(`CLI E2E test root: ${rootDir}\n`); + + print('Building dist workspace'); + const workspaceDir = await buildDistWorkspace('workspace', rootDir); + + // // Otherwise yarn will refuse to install with CI=true + process.env.YARN_ENABLE_IMMUTABLE_INSTALLS = 'false'; + + print('Creating a Backstage App'); + const appDir = await createApp('test-app', workspaceDir, rootDir); + + await fs.move(appDir, outputDir, { overwrite: true }); +} + export async function run() { const rootDir = await fs.mkdtemp(resolvePath(os.tmpdir(), 'backstage-e2e-')); print(`CLI E2E test root: ${rootDir}\n`); From 3357d8bc895a797dc18189e0e589644d8ed42f40 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 11:09:59 +0100 Subject: [PATCH 45/99] chore: revert e2e changes Signed-off-by: blam --- .github/workflows/uffizzi-build.yml | 22 +++++++--------------- packages/e2e-test/src/commands/index.ts | 1 - packages/e2e-test/src/commands/run.ts | 18 ------------------ 3 files changed, 7 insertions(+), 34 deletions(-) diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index 5a68ad9568..025b604c1a 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -25,21 +25,17 @@ jobs: node-version: 16.x registry-url: https://registry.npmjs.org/ - - name: backstage create-app | delete if already exists + - name: yarn install run: | - rm -rf ./example-app - node ./packages/e2e-test/.bin/e2e-test create -o ./example-app - env: - BACKSTAGE_APP_NAME: example-app + yarn install + + - name: Use Uffizzi's backstage app config + run: | + cp -f ./backstage/.github/uffizzi/uffizzi.production.app-config.yaml ./app-config.production.yaml; - name: yarn build run: | yarn build:all - working-directory: ./example-app - - - name: Use Uffizzi's backstage app config - run: | - cp ./backstage/.github/uffizzi/uffizzi.production.app-config.yaml ./example-app/app-config.production.yaml; - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 @@ -55,15 +51,11 @@ jobs: images: registry.uffizzi.com/${{ env.UUID_TAG_APP }} tags: type=raw,value=60d - - name: Add examples directory to Dockerfile - run: | - echo "COPY examples /examples" >> ./example-app/packages/backend/Dockerfile - - name: Build Image uses: docker/build-push-action@v2 with: context: example-app - file: example-app/packages/backend/Dockerfile + file: packages/backend/Dockerfile tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} push: true diff --git a/packages/e2e-test/src/commands/index.ts b/packages/e2e-test/src/commands/index.ts index db9ea225a3..4a7cb7272b 100644 --- a/packages/e2e-test/src/commands/index.ts +++ b/packages/e2e-test/src/commands/index.ts @@ -19,5 +19,4 @@ import { run, create } from './run'; export function registerCommands(program: Command) { program.command('run').description('Run e2e tests').action(run); - program.command('create').option('-o, --output ').action(create); } diff --git a/packages/e2e-test/src/commands/run.ts b/packages/e2e-test/src/commands/run.ts index b022862c8c..3eedb90b21 100644 --- a/packages/e2e-test/src/commands/run.ts +++ b/packages/e2e-test/src/commands/run.ts @@ -43,24 +43,6 @@ const templatePackagePaths = [ 'packages/create-app/templates/default-app/packages/backend/package.json.hbs', ]; -export async function create({ output }: { output: string }) { - const outputDir = resolvePath(process.cwd(), output); - - const rootDir = await fs.mkdtemp(resolvePath(os.tmpdir(), 'backstage-e2e-')); - print(`CLI E2E test root: ${rootDir}\n`); - - print('Building dist workspace'); - const workspaceDir = await buildDistWorkspace('workspace', rootDir); - - // // Otherwise yarn will refuse to install with CI=true - process.env.YARN_ENABLE_IMMUTABLE_INSTALLS = 'false'; - - print('Creating a Backstage App'); - const appDir = await createApp('test-app', workspaceDir, rootDir); - - await fs.move(appDir, outputDir, { overwrite: true }); -} - export async function run() { const rootDir = await fs.mkdtemp(resolvePath(os.tmpdir(), 'backstage-e2e-')); print(`CLI E2E test root: ${rootDir}\n`); From df53479f34c5bae30f2235c7e68fba8bdd65ce01 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 11:10:57 +0100 Subject: [PATCH 46/99] chore: revert Signed-off-by: blam Signed-off-by: blam --- packages/e2e-test/src/commands/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/e2e-test/src/commands/index.ts b/packages/e2e-test/src/commands/index.ts index 4a7cb7272b..95d311427c 100644 --- a/packages/e2e-test/src/commands/index.ts +++ b/packages/e2e-test/src/commands/index.ts @@ -15,7 +15,7 @@ */ import { Command } from 'commander'; -import { run, create } from './run'; +import { run } from './run'; export function registerCommands(program: Command) { program.command('run').description('Run e2e tests').action(run); From 90666d48d7e0fbcd0c7d26daa5425831dfdc2410 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 11:13:33 +0100 Subject: [PATCH 47/99] chore: fix checkout path Signed-off-by: blam --- .github/workflows/uffizzi-build.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index 025b604c1a..afeecd2347 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -16,8 +16,6 @@ jobs: steps: - name: checkout uses: actions/checkout@v3 - with: - path: backstage - name: setup-node uses: actions/setup-node@v3 @@ -31,7 +29,7 @@ jobs: - name: Use Uffizzi's backstage app config run: | - cp -f ./backstage/.github/uffizzi/uffizzi.production.app-config.yaml ./app-config.production.yaml; + cp -f ./.github/uffizzi/uffizzi.production.app-config.yaml ./app-config.production.yaml; - name: yarn build run: | From c2bcf2c720856cf7e67d43b0fb41876a18ca54d1 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 11:15:44 +0100 Subject: [PATCH 48/99] chore: install cache prefix Signed-off-by: blam --- .github/workflows/uffizzi-build.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index afeecd2347..7e50d2ce7b 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -24,8 +24,9 @@ jobs: registry-url: https://registry.npmjs.org/ - name: yarn install - run: | - yarn install + uses: backstage/actions/yarn-install@v0.5.12 + with: + cache-prefix: linux-v16 - name: Use Uffizzi's backstage app config run: | From 47f71e29184b62420607d945d52de20403fb09e8 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 11:36:48 +0100 Subject: [PATCH 49/99] chore: need to run typescript Signed-off-by: blam --- .github/workflows/uffizzi-build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index 7e50d2ce7b..ffa3f43b43 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -32,6 +32,10 @@ jobs: run: | cp -f ./.github/uffizzi/uffizzi.production.app-config.yaml ./app-config.production.yaml; + - name: yarn build + run: | + yarn tsc:full + - name: yarn build run: | yarn build:all From 49308859dcf49f1bf12908fbaa5557907942a40c Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 11:45:23 +0100 Subject: [PATCH 50/99] chore: fixing max old space Signed-off-by: blam --- .github/workflows/uffizzi-build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index ffa3f43b43..dde9739aba 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -8,6 +8,8 @@ on: jobs: build-backstage: + env: + NODE_OPTIONS: --max-old-space-size=4096 name: Build PR image runs-on: ubuntu-latest if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }} From 77fa4d45d5cc465830a8a360541db3b070129d21 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 11:55:58 +0100 Subject: [PATCH 51/99] chore: fix naming and remove example-app prefix Signed-off-by: blam --- .github/workflows/uffizzi-build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index dde9739aba..adee4473f0 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -34,11 +34,11 @@ jobs: run: | cp -f ./.github/uffizzi/uffizzi.production.app-config.yaml ./app-config.production.yaml; - - name: yarn build + - name: typescript build run: | yarn tsc:full - - name: yarn build + - name: backstage build run: | yarn build:all @@ -59,7 +59,7 @@ jobs: - name: Build Image uses: docker/build-push-action@v2 with: - context: example-app + context: . file: packages/backend/Dockerfile tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} From 164d5640d83d787140d6becd8ca501e5df1d4b9c Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 12:46:57 +0100 Subject: [PATCH 52/99] husky is not installed inside the docker container when running with --production installs Signed-off-by: blam --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6e99f4f176..f276d42416 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "techdocs-cli": "node scripts/techdocs-cli.js", "techdocs-cli:dev": "cross-env TECHDOCS_CLI_DEV_MODE=true node scripts/techdocs-cli.js", "prepare": "husky install", - "postinstall": "husky install" + "postinstall": "husky install || true" }, "workspaces": { "packages": [ From 23037b25fc9691a8a8f2db245b879fb2f242c013 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 13:24:28 +0100 Subject: [PATCH 53/99] chore: fixing app config Signed-off-by: blam --- .github/uffizzi/uffizzi.production.app-config.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/uffizzi/uffizzi.production.app-config.yaml b/.github/uffizzi/uffizzi.production.app-config.yaml index d6df12a6af..0d33ec5c38 100644 --- a/.github/uffizzi/uffizzi.production.app-config.yaml +++ b/.github/uffizzi/uffizzi.production.app-config.yaml @@ -8,3 +8,7 @@ backend: origin: ${UFFIZZI_URL} methods: [GET, POST, PUT, DELETE] credentials: true + auth: + keys: + # random mock key for uffizi deployments + - secret: 5TXvdjVZFxF7qf9K5RAYRDoGrLzJooqa From e37884e87f95101193074491e99c20a8c5cf35ab Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 13:25:01 +0100 Subject: [PATCH 54/99] chore; fixing dockerfile to include the production cofnig Signed-off-by: blam --- packages/backend/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/Dockerfile b/packages/backend/Dockerfile index eca6ce82c2..7dc11e2e12 100644 --- a/packages/backend/Dockerfile +++ b/packages/backend/Dockerfile @@ -46,4 +46,4 @@ RUN --mount=type=cache,target=/home/node/.yarn/berry/cache,sharing=locked,uid=10 COPY --chown=node:node packages/backend/dist/bundle.tar.gz app-config*.yaml ./ RUN tar xzf bundle.tar.gz && rm bundle.tar.gz -CMD ["node", "packages/backend", "--config", "app-config.yaml"] +CMD ["node", "packages/backend", "--config", "app-config.yaml", "--config", "app-config.production.yaml"] From e64ffefc5329f97cf1b18ea0aa81236387adb881 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 14:01:06 +0100 Subject: [PATCH 55/99] chore: more config Signed-off-by: blam --- .github/uffizzi/uffizzi.production.app-config.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/uffizzi/uffizzi.production.app-config.yaml b/.github/uffizzi/uffizzi.production.app-config.yaml index 0d33ec5c38..6e62fa2e38 100644 --- a/.github/uffizzi/uffizzi.production.app-config.yaml +++ b/.github/uffizzi/uffizzi.production.app-config.yaml @@ -12,3 +12,11 @@ backend: keys: # random mock key for uffizi deployments - secret: 5TXvdjVZFxF7qf9K5RAYRDoGrLzJooqa +auth: + environment: production + providers: {} + +catalog: + locations: + - type: url + target: https://github.com/backstage/backstage/blob/master/packages/catalog-model/examples/all.yaml From 02c1dee6a0df4f172bbb572a65281c0641cfdcce Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 14:20:37 +0100 Subject: [PATCH 56/99] chore: merging the config is bad Signed-off-by: blam --- .../uffizzi.production.app-config.yaml | 147 +++++++++++++++++- .github/workflows/uffizzi-build.yml | 2 +- packages/backend/Dockerfile | 2 +- 3 files changed, 144 insertions(+), 7 deletions(-) diff --git a/.github/uffizzi/uffizzi.production.app-config.yaml b/.github/uffizzi/uffizzi.production.app-config.yaml index 6e62fa2e38..1a48a38eb1 100644 --- a/.github/uffizzi/uffizzi.production.app-config.yaml +++ b/.github/uffizzi/uffizzi.production.app-config.yaml @@ -4,19 +4,156 @@ app: backend: baseUrl: ${UFFIZZI_URL} - cors: - origin: ${UFFIZZI_URL} - methods: [GET, POST, PUT, DELETE] - credentials: true auth: keys: # random mock key for uffizi deployments - secret: 5TXvdjVZFxF7qf9K5RAYRDoGrLzJooqa + listen: + port: 7007 + database: + client: pg + connection: + host: ${POSTGRES_HOST} + user: ${POSTGRES_USER} + password: ${POSTGRES_PASSWORD} + port: 5432 + cache: + store: memory + cors: + origin: http://localhost:3000 + methods: [GET, HEAD, PATCH, POST, PUT, DELETE] + credentials: true + csp: + connect-src: ["'self'", 'http:', 'https:'] + auth: environment: production - providers: {} + providers: + myproxy: + production: {} catalog: locations: - type: url target: https://github.com/backstage/backstage/blob/master/packages/catalog-model/examples/all.yaml + +techdocs: + builder: 'local' # Alternatives - 'external' + generator: + runIn: 'docker' + # dockerImage: my-org/techdocs # use a custom docker image + # pullImage: true # or false to disable automatic pulling of image (e.g. if custom docker login is required) + publisher: + type: 'local' # Alternatives - 'googleGcs' or 'awsS3' or 'azureBlobStorage' or 'openStackSwift'. Read documentation for using alternatives. + +dynatrace: + baseUrl: https://your.dynatrace.instance.com + +# Score-cards sample configuration. +scorecards: + jsonDataUrl: https://raw.githubusercontent.com/Oriflame/backstage-plugins/main/plugins/score-card/sample-data/ + wikiLinkTemplate: https://link-to-wiki/{id} + +sentry: + organization: my-company + +rollbar: + organization: my-company + # NOTE: The rollbar-backend & accountToken key may be deprecated in the future (replaced by a proxy config) + accountToken: my-rollbar-account-token + +lighthouse: + baseUrl: http://localhost:3003 + +kubernetes: + serviceLocatorMethod: + type: 'multiTenant' + clusterLocatorMethods: + - type: 'config' + clusters: [] +kafka: + clientId: backstage + clusters: + - name: cluster + dashboardUrl: https://akhq.io/ + brokers: + - localhost:9092 +allure: + baseUrl: http://localhost:5050/allure-docker-service +integrations: + github: + - host: github.com + token: ${GITHUB_TOKEN} +scaffolder: {} +costInsights: + engineerCost: 200000 + engineerThreshold: 0.5 + products: + computeEngine: + name: Compute Engine + icon: compute + cloudDataflow: + name: Cloud Dataflow + icon: data + cloudStorage: + name: Cloud Storage + icon: storage + bigQuery: + name: BigQuery + icon: search + events: + name: Events + icon: data + metrics: + DAU: + name: Daily Active Users + default: true + MSC: + name: Monthly Subscribers + currencies: + engineers: + label: 'Engineers 🛠' + unit: 'engineer' + usd: + label: 'US Dollars 💵' + kind: 'USD' + unit: 'dollar' + prefix: '$' + rate: 1 + carbonOffsetTons: + label: 'Carbon Offset Tons ♻️⚖️s' + kind: 'CARBON_OFFSET_TONS' + unit: 'carbon offset ton' + rate: 3.5 + beers: + label: 'Beers 🍺' + kind: 'BEERS' + unit: 'beer' + rate: 4.5 + pintsIceCream: + label: 'Pints of Ice Cream 🍦' + kind: 'PINTS_OF_ICE_CREAM' + unit: 'ice cream pint' + rate: 5.5 +pagerduty: + eventsBaseUrl: 'https://events.pagerduty.com/v2' +jenkins: + instances: + - name: default + baseUrl: https://jenkins.example.com + username: backstage-bot + apiKey: 123456789abcdef0123456789abcedf012 + +azureDevOps: + host: dev.azure.com + token: my-token + organization: my-company + +apacheAirflow: + baseUrl: https://your.airflow.instance.com + +gocd: + baseUrl: https://your.gocd.instance.com + +permission: + enabled: true diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index adee4473f0..54f100229a 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -32,7 +32,7 @@ jobs: - name: Use Uffizzi's backstage app config run: | - cp -f ./.github/uffizzi/uffizzi.production.app-config.yaml ./app-config.production.yaml; + cp -f ./.github/uffizzi/uffizzi.production.app-config.yaml ./app-config.yaml - name: typescript build run: | diff --git a/packages/backend/Dockerfile b/packages/backend/Dockerfile index 7dc11e2e12..eca6ce82c2 100644 --- a/packages/backend/Dockerfile +++ b/packages/backend/Dockerfile @@ -46,4 +46,4 @@ RUN --mount=type=cache,target=/home/node/.yarn/berry/cache,sharing=locked,uid=10 COPY --chown=node:node packages/backend/dist/bundle.tar.gz app-config*.yaml ./ RUN tar xzf bundle.tar.gz && rm bundle.tar.gz -CMD ["node", "packages/backend", "--config", "app-config.yaml", "--config", "app-config.production.yaml"] +CMD ["node", "packages/backend", "--config", "app-config.yaml"] From 745868199eeb75d4a513a36b827c5bb1837c5b91 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 14:24:50 +0100 Subject: [PATCH 57/99] chore: fix uffizzi link Signed-off-by: blam --- .github/uffizzi/docker-compose.uffizzi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/uffizzi/docker-compose.uffizzi.yml b/.github/uffizzi/docker-compose.uffizzi.yml index f505205505..d19979c8bb 100644 --- a/.github/uffizzi/docker-compose.uffizzi.yml +++ b/.github/uffizzi/docker-compose.uffizzi.yml @@ -21,7 +21,7 @@ services: entrypoint: '/bin/sh' command: - '-c' - - "APP_CONFIG_app_baseUrl=$$UFFIZZI_URL APP_CONFIG_backend_baseUrl=$$UFFIZZI_URL APP_CONFIG_auth_environment='production' node packages/backend --config app-config.yaml --config app-config.production.yaml" + - "APP_CONFIG_app_baseUrl=$$UFFIZZI_URL APP_CONFIG_backend_baseUrl=$$UFFIZZI_URL APP_CONFIG_auth_environment='production' node packages/backend --config app-config.yaml" db: image: postgres From b781c9458428538ef01acde248daf756f6718542 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 14:27:12 +0100 Subject: [PATCH 58/99] chore: mock Signed-off-by: blam Signed-off-by: blam --- .github/workflows/uffizzi-build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index 54f100229a..25306e0f57 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -10,6 +10,7 @@ jobs: build-backstage: env: NODE_OPTIONS: --max-old-space-size=4096 + UFFIZZI_URL: https://uffizzi.com name: Build PR image runs-on: ubuntu-latest if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }} From 033384c3b54f37cc5b41cd7bcb46031ec6a1dd28 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 14:41:21 +0100 Subject: [PATCH 59/99] chore: fixing compose file for uffizi and postgres Signed-off-by: blam --- .github/uffizzi/docker-compose.uffizzi.yml | 2 ++ .github/uffizzi/uffizzi.production.app-config.yaml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/uffizzi/docker-compose.uffizzi.yml b/.github/uffizzi/docker-compose.uffizzi.yml index d19979c8bb..8ac3bb7ab8 100644 --- a/.github/uffizzi/docker-compose.uffizzi.yml +++ b/.github/uffizzi/docker-compose.uffizzi.yml @@ -8,6 +8,8 @@ x-uffizzi: services: backstage: image: '${BACKSTAGE_IMAGE}' + depends_on: + - db environment: POSTGRES_HOST: localhost POSTGRES_USER: postgres diff --git a/.github/uffizzi/uffizzi.production.app-config.yaml b/.github/uffizzi/uffizzi.production.app-config.yaml index 1a48a38eb1..a962060fc8 100644 --- a/.github/uffizzi/uffizzi.production.app-config.yaml +++ b/.github/uffizzi/uffizzi.production.app-config.yaml @@ -13,7 +13,7 @@ backend: database: client: pg connection: - host: ${POSTGRES_HOST} + host: db user: ${POSTGRES_USER} password: ${POSTGRES_PASSWORD} port: 5432 From 570d2be33119c06ecc83ed672326ed1c4683744f Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 14:44:22 +0100 Subject: [PATCH 60/99] chore: remove permissions enabled Signed-off-by: blam --- .github/uffizzi/uffizzi.production.app-config.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/uffizzi/uffizzi.production.app-config.yaml b/.github/uffizzi/uffizzi.production.app-config.yaml index a962060fc8..faf78e7239 100644 --- a/.github/uffizzi/uffizzi.production.app-config.yaml +++ b/.github/uffizzi/uffizzi.production.app-config.yaml @@ -154,6 +154,3 @@ apacheAirflow: gocd: baseUrl: https://your.gocd.instance.com - -permission: - enabled: true From 7cef9c36232233e19de39d2faf4c47b252de4fef Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 14:46:04 +0100 Subject: [PATCH 61/99] chore: fixing reading allowlist Signed-off-by: blam --- .github/uffizzi/uffizzi.production.app-config.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/uffizzi/uffizzi.production.app-config.yaml b/.github/uffizzi/uffizzi.production.app-config.yaml index faf78e7239..a7880ad4a3 100644 --- a/.github/uffizzi/uffizzi.production.app-config.yaml +++ b/.github/uffizzi/uffizzi.production.app-config.yaml @@ -25,6 +25,10 @@ backend: credentials: true csp: connect-src: ["'self'", 'http:', 'https:'] + reading: + allow: + - host: github.com + - host: raw.githubusercontent.com auth: environment: production From 4c2b469e8e276c0e0272f32a9b9b41a3b3dd070c Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 14:46:48 +0100 Subject: [PATCH 62/99] chore: remove github token Signed-off-by: blam --- .github/uffizzi/docker-compose.uffizzi.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/uffizzi/docker-compose.uffizzi.yml b/.github/uffizzi/docker-compose.uffizzi.yml index 8ac3bb7ab8..53f3c13a2e 100644 --- a/.github/uffizzi/docker-compose.uffizzi.yml +++ b/.github/uffizzi/docker-compose.uffizzi.yml @@ -14,7 +14,6 @@ services: POSTGRES_HOST: localhost POSTGRES_USER: postgres POSTGRES_PASSWORD: example - GITHUB_TOKEN: abc NODE_ENV: production deploy: resources: From c6778236e575ca2607834be788f0489c8367a3ee Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 14:55:09 +0100 Subject: [PATCH 63/99] chore: fixing config Signed-off-by: blam --- .github/uffizzi/uffizzi.production.app-config.yaml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/uffizzi/uffizzi.production.app-config.yaml b/.github/uffizzi/uffizzi.production.app-config.yaml index a7880ad4a3..c65bc51786 100644 --- a/.github/uffizzi/uffizzi.production.app-config.yaml +++ b/.github/uffizzi/uffizzi.production.app-config.yaml @@ -25,16 +25,9 @@ backend: credentials: true csp: connect-src: ["'self'", 'http:', 'https:'] - reading: - allow: - - host: github.com - - host: raw.githubusercontent.com - auth: environment: production - providers: - myproxy: - production: {} + providers: {} catalog: locations: From 06c6bc786d6a3f2695d09f88b3497d21bbdd9592 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 15:30:35 +0100 Subject: [PATCH 64/99] chore: remove depends_on Signed-off-by: blam --- .github/uffizzi/docker-compose.uffizzi.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/uffizzi/docker-compose.uffizzi.yml b/.github/uffizzi/docker-compose.uffizzi.yml index 53f3c13a2e..74477e06aa 100644 --- a/.github/uffizzi/docker-compose.uffizzi.yml +++ b/.github/uffizzi/docker-compose.uffizzi.yml @@ -8,8 +8,7 @@ x-uffizzi: services: backstage: image: '${BACKSTAGE_IMAGE}' - depends_on: - - db + environment: POSTGRES_HOST: localhost POSTGRES_USER: postgres From 5e7cc957e9cd546e48d7c41a27037bbd1628ad62 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 15:31:03 +0100 Subject: [PATCH 65/99] chore: host is db Signed-off-by: blam --- .github/uffizzi/docker-compose.uffizzi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/uffizzi/docker-compose.uffizzi.yml b/.github/uffizzi/docker-compose.uffizzi.yml index 74477e06aa..49039cad2a 100644 --- a/.github/uffizzi/docker-compose.uffizzi.yml +++ b/.github/uffizzi/docker-compose.uffizzi.yml @@ -10,7 +10,7 @@ services: image: '${BACKSTAGE_IMAGE}' environment: - POSTGRES_HOST: localhost + POSTGRES_HOST: db POSTGRES_USER: postgres POSTGRES_PASSWORD: example NODE_ENV: production From a62a1f9dca0446424e806f5b4e0be0de09d7d4e1 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 21 Dec 2022 15:30:41 +0100 Subject: [PATCH 66/99] cli: apply package duplication filter during yarn start Signed-off-by: Patrik Oldsberg --- .changeset/forty-years-retire.md | 5 +++++ packages/cli/src/commands/start/startFrontend.ts | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 .changeset/forty-years-retire.md diff --git a/.changeset/forty-years-retire.md b/.changeset/forty-years-retire.md new file mode 100644 index 0000000000..e7b887a1e4 --- /dev/null +++ b/.changeset/forty-years-retire.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +The frontend serve task now filters out allowed package duplicates during its package check, just like `versions:bump` and `versions:check`. diff --git a/packages/cli/src/commands/start/startFrontend.ts b/packages/cli/src/commands/start/startFrontend.ts index f6923632c8..689fb28466 100644 --- a/packages/cli/src/commands/start/startFrontend.ts +++ b/packages/cli/src/commands/start/startFrontend.ts @@ -21,7 +21,7 @@ import { serveBundle } from '../../lib/bundler'; import { loadCliConfig } from '../../lib/config'; import { paths } from '../../lib/paths'; import { Lockfile } from '../../lib/versioning'; -import { includedFilter } from '../versions/lint'; +import { forbiddenDuplicatesFilter, includedFilter } from '../versions/lint'; interface StartAppOptions { verifyVersions?: boolean; @@ -37,9 +37,9 @@ export async function startFrontend(options: StartAppOptions) { const result = lockfile.analyze({ filter: includedFilter, }); - const problemPackages = [...result.newVersions, ...result.newRanges].map( - ({ name }) => name, - ); + const problemPackages = [...result.newVersions, ...result.newRanges] + .map(({ name }) => name) + .filter(forbiddenDuplicatesFilter); if (problemPackages.length > 1) { console.log( From e1b71e142e908abdada7c0e5f7a63e896117d56e Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 21 Dec 2022 16:01:50 +0100 Subject: [PATCH 67/99] cli: no longer treat workspace ranges as invalid Signed-off-by: Patrik Oldsberg --- .changeset/witty-eels-itch.md | 5 +++++ packages/cli/src/lib/versioning/Lockfile.ts | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 .changeset/witty-eels-itch.md diff --git a/.changeset/witty-eels-itch.md b/.changeset/witty-eels-itch.md new file mode 100644 index 0000000000..5a2da8b570 --- /dev/null +++ b/.changeset/witty-eels-itch.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Workspace ranges are no longer considered invalid by version commands. diff --git a/packages/cli/src/lib/versioning/Lockfile.ts b/packages/cli/src/lib/versioning/Lockfile.ts index ab6d98521f..ac2206cd83 100644 --- a/packages/cli/src/lib/versioning/Lockfile.ts +++ b/packages/cli/src/lib/versioning/Lockfile.ts @@ -178,7 +178,9 @@ export class Lockfile { } // Get rid of and signal any invalid ranges upfront - const invalid = allEntries.filter(e => !semver.validRange(e.range)); + const invalid = allEntries.filter( + e => !semver.validRange(e.range) && !e.range.startsWith('workspace:'), + ); result.invalidRanges.push( ...invalid.map(({ range }) => ({ name, range })), ); From df9864ab8acf302446954539a6e7941acb0233e7 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 16:11:53 +0100 Subject: [PATCH 68/99] fix: fixing the sidebar link issue Signed-off-by: blam --- packages/core-components/src/layout/Sidebar/Bar.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/core-components/src/layout/Sidebar/Bar.tsx b/packages/core-components/src/layout/Sidebar/Bar.tsx index 69b77dd5e1..95ed88b1ec 100644 --- a/packages/core-components/src/layout/Sidebar/Bar.tsx +++ b/packages/core-components/src/layout/Sidebar/Bar.tsx @@ -63,6 +63,9 @@ const useStyles = makeStyles( '&::-webkit-scrollbar': { display: 'none', }, + '& .MuiButtonBase-root': { + textTransform: 'none', + }, }), drawerOpen: props => ({ width: props.sidebarConfig.drawerWidthOpen, From f2ea446de0c05472a6a9ab89dc7bb81256c71790 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 21 Dec 2022 16:24:52 +0100 Subject: [PATCH 69/99] chore: apply changesets from hotfix Signed-off-by: blam --- .changeset/hungry-falcons-cross.md | 5 ++ packages/app-defaults/CHANGELOG.md | 7 +++ packages/app/CHANGELOG.md | 55 +++++++++++++++++++ packages/core-components/CHANGELOG.md | 6 ++ packages/dev-utils/CHANGELOG.md | 10 ++++ packages/integration-react/CHANGELOG.md | 7 +++ .../techdocs-cli-embedded-app/CHANGELOG.md | 13 +++++ plugins/adr/CHANGELOG.md | 10 ++++ plugins/airbrake/CHANGELOG.md | 9 +++ plugins/allure/CHANGELOG.md | 8 +++ plugins/analytics-module-ga/CHANGELOG.md | 7 +++ plugins/apache-airflow/CHANGELOG.md | 7 +++ plugins/api-docs/CHANGELOG.md | 9 +++ plugins/apollo-explorer/CHANGELOG.md | 7 +++ plugins/azure-devops/CHANGELOG.md | 8 +++ plugins/azure-sites/CHANGELOG.md | 8 +++ plugins/badges/CHANGELOG.md | 8 +++ plugins/bazaar/CHANGELOG.md | 10 ++++ plugins/bitrise/CHANGELOG.md | 8 +++ plugins/catalog-customized/CHANGELOG.md | 8 +++ plugins/catalog-graph/CHANGELOG.md | 8 +++ plugins/catalog-import/CHANGELOG.md | 9 +++ plugins/catalog-react/CHANGELOG.md | 7 +++ plugins/catalog/CHANGELOG.md | 10 ++++ .../CHANGELOG.md | 7 +++ plugins/cicd-statistics/CHANGELOG.md | 7 +++ plugins/circleci/CHANGELOG.md | 8 +++ plugins/cloudbuild/CHANGELOG.md | 8 +++ plugins/code-climate/CHANGELOG.md | 8 +++ plugins/code-coverage/CHANGELOG.md | 8 +++ plugins/codescene/CHANGELOG.md | 7 +++ plugins/config-schema/CHANGELOG.md | 7 +++ plugins/cost-insights/CHANGELOG.md | 8 +++ plugins/dynatrace/CHANGELOG.md | 8 +++ plugins/example-todo-list/CHANGELOG.md | 7 +++ plugins/explore/CHANGELOG.md | 10 ++++ plugins/firehydrant/CHANGELOG.md | 8 +++ plugins/fossa/CHANGELOG.md | 8 +++ plugins/gcalendar/CHANGELOG.md | 7 +++ plugins/gcp-projects/CHANGELOG.md | 7 +++ plugins/git-release-manager/CHANGELOG.md | 7 +++ plugins/github-actions/CHANGELOG.md | 8 +++ plugins/github-deployments/CHANGELOG.md | 9 +++ plugins/github-issues/CHANGELOG.md | 8 +++ .../github-pull-requests-board/CHANGELOG.md | 8 +++ plugins/gitops-profiles/CHANGELOG.md | 7 +++ plugins/gocd/CHANGELOG.md | 8 +++ plugins/graphiql/CHANGELOG.md | 7 +++ plugins/home/CHANGELOG.md | 9 +++ plugins/ilert/CHANGELOG.md | 8 +++ plugins/jenkins/CHANGELOG.md | 8 +++ plugins/kafka/CHANGELOG.md | 8 +++ plugins/kubernetes/CHANGELOG.md | 8 +++ plugins/lighthouse/CHANGELOG.md | 8 +++ plugins/newrelic-dashboard/CHANGELOG.md | 8 +++ plugins/newrelic/CHANGELOG.md | 7 +++ plugins/org-react/CHANGELOG.md | 8 +++ plugins/org/CHANGELOG.md | 8 +++ plugins/pagerduty/CHANGELOG.md | 8 +++ plugins/periskop/CHANGELOG.md | 8 +++ plugins/playlist/CHANGELOG.md | 9 +++ plugins/rollbar/CHANGELOG.md | 8 +++ plugins/scaffolder/CHANGELOG.md | 9 +++ plugins/search-react/CHANGELOG.md | 7 +++ plugins/search/CHANGELOG.md | 9 +++ plugins/sentry/CHANGELOG.md | 8 +++ plugins/shortcuts/CHANGELOG.md | 7 +++ plugins/sonarqube/CHANGELOG.md | 8 +++ plugins/splunk-on-call/CHANGELOG.md | 8 +++ plugins/stack-overflow/CHANGELOG.md | 9 +++ plugins/tech-insights/CHANGELOG.md | 8 +++ plugins/tech-radar/CHANGELOG.md | 7 +++ .../techdocs-addons-test-utils/CHANGELOG.md | 12 ++++ .../CHANGELOG.md | 9 +++ plugins/techdocs-react/CHANGELOG.md | 7 +++ plugins/techdocs/CHANGELOG.md | 11 ++++ plugins/todo/CHANGELOG.md | 8 +++ plugins/user-settings/CHANGELOG.md | 7 +++ plugins/vault/CHANGELOG.md | 8 +++ plugins/xcmetrics/CHANGELOG.md | 7 +++ 80 files changed, 691 insertions(+) create mode 100644 .changeset/hungry-falcons-cross.md diff --git a/.changeset/hungry-falcons-cross.md b/.changeset/hungry-falcons-cross.md new file mode 100644 index 0000000000..73c31ca7d6 --- /dev/null +++ b/.changeset/hungry-falcons-cross.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Applied fix from v1.9.1 diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index a30d0c56fb..27f441671b 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/app-defaults +## 1.0.10 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 1.0.9 ### Patch Changes diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 80023bb662..f9a6433d6f 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,60 @@ # example-app +## 0.2.79 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/app-defaults@1.0.10 + - @backstage/cli@0.22.0 + - @backstage/integration-react@1.1.8 + - @backstage/plugin-airbrake@0.3.13 + - @backstage/plugin-apache-airflow@0.2.6 + - @backstage/plugin-api-docs@0.8.13 + - @backstage/plugin-azure-devops@0.2.4 + - @backstage/plugin-azure-sites@0.1.2 + - @backstage/plugin-badges@0.2.37 + - @backstage/plugin-catalog-graph@0.2.25 + - @backstage/plugin-catalog-import@0.9.3 + - @backstage/plugin-catalog-react@1.2.3 + - @backstage/plugin-circleci@0.3.13 + - @backstage/plugin-cloudbuild@0.3.13 + - @backstage/plugin-code-coverage@0.2.6 + - @backstage/plugin-cost-insights@0.12.2 + - @backstage/plugin-dynatrace@1.0.3 + - @backstage/plugin-explore@0.3.44 + - @backstage/plugin-gcalendar@0.3.9 + - @backstage/plugin-gcp-projects@0.3.32 + - @backstage/plugin-github-actions@0.5.13 + - @backstage/plugin-gocd@0.1.19 + - @backstage/plugin-graphiql@0.2.45 + - @backstage/plugin-home@0.4.29 + - @backstage/plugin-jenkins@0.7.12 + - @backstage/plugin-kafka@0.3.13 + - @backstage/plugin-kubernetes@0.7.6 + - @backstage/plugin-lighthouse@0.3.13 + - @backstage/plugin-newrelic@0.3.31 + - @backstage/plugin-newrelic-dashboard@0.2.6 + - @backstage/plugin-org@0.6.3 + - @backstage/plugin-pagerduty@0.5.6 + - @backstage/plugin-playlist@0.1.4 + - @backstage/plugin-rollbar@0.4.13 + - @backstage/plugin-scaffolder@1.9.1 + - @backstage/plugin-search@1.0.6 + - @backstage/plugin-search-react@1.3.1 + - @backstage/plugin-sentry@0.4.6 + - @backstage/plugin-shortcuts@0.3.5 + - @backstage/plugin-stack-overflow@0.1.9 + - @backstage/plugin-tech-insights@0.3.5 + - @backstage/plugin-tech-radar@0.5.20 + - @backstage/plugin-techdocs@1.4.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.8 + - @backstage/plugin-techdocs-react@1.1.1 + - @backstage/plugin-todo@0.2.15 + - @backstage/plugin-user-settings@0.6.1 + - @internal/plugin-catalog-customized@0.0.6 + ## 0.2.78 ### Patch Changes diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index 8e5941c1df..c8dad2ef8b 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/core-components +## 0.12.2 + +### Patch Changes + +- Fixing the UPPERCASED links in the sidebar + ## 0.12.1 ### Patch Changes diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 797e70dd16..f75de52dcf 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/dev-utils +## 1.0.10 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/app-defaults@1.0.10 + - @backstage/integration-react@1.1.8 + - @backstage/plugin-catalog-react@1.2.3 + ## 1.0.9 ### Patch Changes diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index def062af2a..f359f4ea87 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/integration-react +## 1.1.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 1.1.7 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index d6a660ad32..f79140a2a6 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,18 @@ # techdocs-cli-embedded-app +## 0.2.78 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/app-defaults@1.0.10 + - @backstage/cli@0.22.0 + - @backstage/integration-react@1.1.8 + - @backstage/plugin-catalog@1.7.1 + - @backstage/plugin-techdocs@1.4.2 + - @backstage/plugin-techdocs-react@1.1.1 + ## 0.2.77 ### Patch Changes diff --git a/plugins/adr/CHANGELOG.md b/plugins/adr/CHANGELOG.md index c6f2ce3b2c..a4100b72e8 100644 --- a/plugins/adr/CHANGELOG.md +++ b/plugins/adr/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-adr +## 0.2.5 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/integration-react@1.1.8 + - @backstage/plugin-catalog-react@1.2.3 + - @backstage/plugin-search-react@1.3.1 + ## 0.2.4 ### Patch Changes diff --git a/plugins/airbrake/CHANGELOG.md b/plugins/airbrake/CHANGELOG.md index 0b97a2e2c3..f70f9de6cc 100644 --- a/plugins/airbrake/CHANGELOG.md +++ b/plugins/airbrake/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-airbrake +## 0.3.13 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/dev-utils@1.0.10 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.3.12 ### Patch Changes diff --git a/plugins/allure/CHANGELOG.md b/plugins/allure/CHANGELOG.md index 85355353ab..3ceb702535 100644 --- a/plugins/allure/CHANGELOG.md +++ b/plugins/allure/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-allure +## 0.1.29 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.1.28 ### Patch Changes diff --git a/plugins/analytics-module-ga/CHANGELOG.md b/plugins/analytics-module-ga/CHANGELOG.md index af05af7480..d58dcfc9af 100644 --- a/plugins/analytics-module-ga/CHANGELOG.md +++ b/plugins/analytics-module-ga/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-analytics-module-ga +## 0.1.24 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 0.1.23 ### Patch Changes diff --git a/plugins/apache-airflow/CHANGELOG.md b/plugins/apache-airflow/CHANGELOG.md index 388cf024ea..3e8b0fe432 100644 --- a/plugins/apache-airflow/CHANGELOG.md +++ b/plugins/apache-airflow/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-apache-airflow +## 0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 0.2.5 ### Patch Changes diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index 8f37897583..54c79c55a7 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-api-docs +## 0.8.13 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog@1.7.1 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.8.12 ### Patch Changes diff --git a/plugins/apollo-explorer/CHANGELOG.md b/plugins/apollo-explorer/CHANGELOG.md index fbbb1fd372..428bc261dd 100644 --- a/plugins/apollo-explorer/CHANGELOG.md +++ b/plugins/apollo-explorer/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-apollo-explorer +## 0.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 0.1.5 ### Patch Changes diff --git a/plugins/azure-devops/CHANGELOG.md b/plugins/azure-devops/CHANGELOG.md index 3dd1546a57..287ea2fe25 100644 --- a/plugins/azure-devops/CHANGELOG.md +++ b/plugins/azure-devops/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-azure-devops +## 0.2.4 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.2.3 ### Patch Changes diff --git a/plugins/azure-sites/CHANGELOG.md b/plugins/azure-sites/CHANGELOG.md index 1eed86c4bd..38d21df511 100644 --- a/plugins/azure-sites/CHANGELOG.md +++ b/plugins/azure-sites/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-azure-sites +## 0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.1.1 ### Patch Changes diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md index c6e354e93c..a1e0773ffb 100644 --- a/plugins/badges/CHANGELOG.md +++ b/plugins/badges/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-badges +## 0.2.37 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.2.36 ### Patch Changes diff --git a/plugins/bazaar/CHANGELOG.md b/plugins/bazaar/CHANGELOG.md index 453e9bb11a..e2b039c4b2 100644 --- a/plugins/bazaar/CHANGELOG.md +++ b/plugins/bazaar/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-bazaar +## 0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/cli@0.22.0 + - @backstage/plugin-catalog@1.7.1 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.2.1 ### Patch Changes diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md index b8581b6830..b274d25bfe 100644 --- a/plugins/bitrise/CHANGELOG.md +++ b/plugins/bitrise/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-bitrise +## 0.1.40 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.1.39 ### Patch Changes diff --git a/plugins/catalog-customized/CHANGELOG.md b/plugins/catalog-customized/CHANGELOG.md index c2293dbef2..f56901d2f4 100644 --- a/plugins/catalog-customized/CHANGELOG.md +++ b/plugins/catalog-customized/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/plugin-catalog-customized +## 0.0.6 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.7.1 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.0.5 ### Patch Changes diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md index bcd7eee04c..0d941652c7 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-catalog-graph +## 0.2.25 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.2.24 ### Patch Changes diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index a85078fb6b..2327f692e8 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-import +## 0.9.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/integration-react@1.1.8 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.9.2 ### Patch Changes diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index 45bd94a1a7..17372fa42b 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-catalog-react +## 1.2.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 1.2.2 ### Patch Changes diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 4bad115735..f154f5d260 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog +## 1.7.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/integration-react@1.1.8 + - @backstage/plugin-catalog-react@1.2.3 + - @backstage/plugin-search-react@1.3.1 + ## 1.7.0 ### Minor Changes diff --git a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md index 487e1afd53..dca85d1c00 100644 --- a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md +++ b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-cicd-statistics-module-gitlab +## 0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-cicd-statistics@0.1.15 + ## 0.1.8 ### Patch Changes diff --git a/plugins/cicd-statistics/CHANGELOG.md b/plugins/cicd-statistics/CHANGELOG.md index 1ec8aa72bc..ff0877c7a5 100644 --- a/plugins/cicd-statistics/CHANGELOG.md +++ b/plugins/cicd-statistics/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-cicd-statistics +## 0.1.15 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.3 + ## 0.1.14 ### Patch Changes diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md index 07442ef199..f6a7c15545 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-circleci +## 0.3.13 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.3.12 ### Patch Changes diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index 9feb84c9cc..a4338da90f 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-cloudbuild +## 0.3.13 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.3.12 ### Patch Changes diff --git a/plugins/code-climate/CHANGELOG.md b/plugins/code-climate/CHANGELOG.md index aa4bf7a8f7..09626076d0 100644 --- a/plugins/code-climate/CHANGELOG.md +++ b/plugins/code-climate/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-code-climate +## 0.1.13 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.1.12 ### Patch Changes diff --git a/plugins/code-coverage/CHANGELOG.md b/plugins/code-coverage/CHANGELOG.md index e53661e437..a3dab7b6aa 100644 --- a/plugins/code-coverage/CHANGELOG.md +++ b/plugins/code-coverage/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-code-coverage +## 0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.2.5 ### Patch Changes diff --git a/plugins/codescene/CHANGELOG.md b/plugins/codescene/CHANGELOG.md index fb4404bb75..eef5987551 100644 --- a/plugins/codescene/CHANGELOG.md +++ b/plugins/codescene/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-codescene +## 0.1.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 0.1.7 ### Patch Changes diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index 52d5a70f5f..7fe68a41fd 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-config-schema +## 0.1.36 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 0.1.35 ### Patch Changes diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md index 55bd8aaac8..187b8416cb 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-cost-insights +## 0.12.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.12.1 ### Patch Changes diff --git a/plugins/dynatrace/CHANGELOG.md b/plugins/dynatrace/CHANGELOG.md index c85156fbbf..e477ee1c1b 100644 --- a/plugins/dynatrace/CHANGELOG.md +++ b/plugins/dynatrace/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-dynatrace +## 1.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 1.0.2 ### Patch Changes diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index 74b1eb0985..bc012467a4 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,12 @@ # @internal/plugin-todo-list +## 1.0.9 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 1.0.8 ### Patch Changes diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md index 776aeb1d91..50fd45e426 100644 --- a/plugins/explore/CHANGELOG.md +++ b/plugins/explore/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-explore +## 0.3.44 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + - @backstage/plugin-search-react@1.3.1 + - @backstage/plugin-explore-react@0.0.24 + ## 0.3.43 ### Patch Changes diff --git a/plugins/firehydrant/CHANGELOG.md b/plugins/firehydrant/CHANGELOG.md index d48143d536..513c3cb6ec 100644 --- a/plugins/firehydrant/CHANGELOG.md +++ b/plugins/firehydrant/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-firehydrant +## 0.1.30 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.1.29 ### Patch Changes diff --git a/plugins/fossa/CHANGELOG.md b/plugins/fossa/CHANGELOG.md index a2a9bdc2b9..4513e8b733 100644 --- a/plugins/fossa/CHANGELOG.md +++ b/plugins/fossa/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-fossa +## 0.2.45 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.2.44 ### Patch Changes diff --git a/plugins/gcalendar/CHANGELOG.md b/plugins/gcalendar/CHANGELOG.md index 4c0a29dd58..ac13f9ab37 100644 --- a/plugins/gcalendar/CHANGELOG.md +++ b/plugins/gcalendar/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-gcalendar +## 0.3.9 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 0.3.8 ### Patch Changes diff --git a/plugins/gcp-projects/CHANGELOG.md b/plugins/gcp-projects/CHANGELOG.md index eea93cfa72..43bb34a972 100644 --- a/plugins/gcp-projects/CHANGELOG.md +++ b/plugins/gcp-projects/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-gcp-projects +## 0.3.32 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 0.3.31 ### Patch Changes diff --git a/plugins/git-release-manager/CHANGELOG.md b/plugins/git-release-manager/CHANGELOG.md index 36ad6032aa..6f5750b4fe 100644 --- a/plugins/git-release-manager/CHANGELOG.md +++ b/plugins/git-release-manager/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-git-release-manager +## 0.3.26 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 0.3.25 ### Patch Changes diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md index b07881013a..7fa266e31f 100644 --- a/plugins/github-actions/CHANGELOG.md +++ b/plugins/github-actions/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-github-actions +## 0.5.13 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.5.12 ### Patch Changes diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md index 4a4d9c05ec..5d7609cb7a 100644 --- a/plugins/github-deployments/CHANGELOG.md +++ b/plugins/github-deployments/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-github-deployments +## 0.1.44 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/integration-react@1.1.8 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.1.43 ### Patch Changes diff --git a/plugins/github-issues/CHANGELOG.md b/plugins/github-issues/CHANGELOG.md index dab4fd740d..7152069b86 100644 --- a/plugins/github-issues/CHANGELOG.md +++ b/plugins/github-issues/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-github-issues +## 0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.2.1 ### Patch Changes diff --git a/plugins/github-pull-requests-board/CHANGELOG.md b/plugins/github-pull-requests-board/CHANGELOG.md index c5d1666701..4593291133 100644 --- a/plugins/github-pull-requests-board/CHANGELOG.md +++ b/plugins/github-pull-requests-board/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-github-pull-requests-board +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.1.6 ### Patch Changes diff --git a/plugins/gitops-profiles/CHANGELOG.md b/plugins/gitops-profiles/CHANGELOG.md index b3b8b8d844..d5d07b87f0 100644 --- a/plugins/gitops-profiles/CHANGELOG.md +++ b/plugins/gitops-profiles/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-gitops-profiles +## 0.3.31 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 0.3.30 ### Patch Changes diff --git a/plugins/gocd/CHANGELOG.md b/plugins/gocd/CHANGELOG.md index 0096ec096a..1b257486ac 100644 --- a/plugins/gocd/CHANGELOG.md +++ b/plugins/gocd/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-gocd +## 0.1.19 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.1.18 ### Patch Changes diff --git a/plugins/graphiql/CHANGELOG.md b/plugins/graphiql/CHANGELOG.md index 25a753cddd..a499bb2f7e 100644 --- a/plugins/graphiql/CHANGELOG.md +++ b/plugins/graphiql/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-graphiql +## 0.2.45 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 0.2.44 ### Patch Changes diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md index 8afd364136..0fd26937a8 100644 --- a/plugins/home/CHANGELOG.md +++ b/plugins/home/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-home +## 0.4.29 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + - @backstage/plugin-stack-overflow@0.1.9 + ## 0.4.28 ### Patch Changes diff --git a/plugins/ilert/CHANGELOG.md b/plugins/ilert/CHANGELOG.md index c509f60e00..79a87148b4 100644 --- a/plugins/ilert/CHANGELOG.md +++ b/plugins/ilert/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-ilert +## 0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.2.1 ### Patch Changes diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md index c81fd2474a..8b5c2d4c88 100644 --- a/plugins/jenkins/CHANGELOG.md +++ b/plugins/jenkins/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-jenkins +## 0.7.12 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.7.11 ### Patch Changes diff --git a/plugins/kafka/CHANGELOG.md b/plugins/kafka/CHANGELOG.md index d5f02615c8..bde6951455 100644 --- a/plugins/kafka/CHANGELOG.md +++ b/plugins/kafka/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-kafka +## 0.3.13 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.3.12 ### Patch Changes diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index d8d086d189..4295426b6f 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-kubernetes +## 0.7.6 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.7.5 ### Patch Changes diff --git a/plugins/lighthouse/CHANGELOG.md b/plugins/lighthouse/CHANGELOG.md index 671eb232e2..73efb99869 100644 --- a/plugins/lighthouse/CHANGELOG.md +++ b/plugins/lighthouse/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-lighthouse +## 0.3.13 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.3.12 ### Patch Changes diff --git a/plugins/newrelic-dashboard/CHANGELOG.md b/plugins/newrelic-dashboard/CHANGELOG.md index 9054bd205d..e16250ccef 100644 --- a/plugins/newrelic-dashboard/CHANGELOG.md +++ b/plugins/newrelic-dashboard/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-newrelic-dashboard +## 0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.2.5 ### Patch Changes diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md index 5ae4313421..aa636a1e99 100644 --- a/plugins/newrelic/CHANGELOG.md +++ b/plugins/newrelic/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-newrelic +## 0.3.31 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 0.3.30 ### Patch Changes diff --git a/plugins/org-react/CHANGELOG.md b/plugins/org-react/CHANGELOG.md index 38f992369a..9b53209201 100644 --- a/plugins/org-react/CHANGELOG.md +++ b/plugins/org-react/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-org-react +## 0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.1.1 ### Patch Changes diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index 12cef56ddb..a3bff0d6ec 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-org +## 0.6.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.6.2 ### Patch Changes diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md index 855b1b0b10..38b5e0c5bc 100644 --- a/plugins/pagerduty/CHANGELOG.md +++ b/plugins/pagerduty/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-pagerduty +## 0.5.6 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.5.5 ### Patch Changes diff --git a/plugins/periskop/CHANGELOG.md b/plugins/periskop/CHANGELOG.md index 854b124d89..eee49c545d 100644 --- a/plugins/periskop/CHANGELOG.md +++ b/plugins/periskop/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-periskop +## 0.1.11 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.1.10 ### Patch Changes diff --git a/plugins/playlist/CHANGELOG.md b/plugins/playlist/CHANGELOG.md index 0f0625b7b0..0434a916f2 100644 --- a/plugins/playlist/CHANGELOG.md +++ b/plugins/playlist/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-playlist +## 0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + - @backstage/plugin-search-react@1.3.1 + ## 0.1.3 ### Patch Changes diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md index 99be990c2f..5c41131e97 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-rollbar +## 0.4.13 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.4.12 ### Patch Changes diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index e742e2c6ff..6126798c2c 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder +## 1.9.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/integration-react@1.1.8 + - @backstage/plugin-catalog-react@1.2.3 + ## 1.9.0 ### Minor Changes diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md index 2df1d8f47c..a08a1f43dd 100644 --- a/plugins/search-react/CHANGELOG.md +++ b/plugins/search-react/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-search-react +## 1.3.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 1.3.0 ### Minor Changes diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md index 29d17c63db..46f8fde85e 100644 --- a/plugins/search/CHANGELOG.md +++ b/plugins/search/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-search +## 1.0.6 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + - @backstage/plugin-search-react@1.3.1 + ## 1.0.5 ### Patch Changes diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md index 4d36b14ead..c34eab0bb6 100644 --- a/plugins/sentry/CHANGELOG.md +++ b/plugins/sentry/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-sentry +## 0.4.6 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.4.5 ### Patch Changes diff --git a/plugins/shortcuts/CHANGELOG.md b/plugins/shortcuts/CHANGELOG.md index 6903839534..22698bf7f2 100644 --- a/plugins/shortcuts/CHANGELOG.md +++ b/plugins/shortcuts/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-shortcuts +## 0.3.5 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 0.3.4 ### Patch Changes diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md index 10f6e984ad..28c4acc72f 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-sonarqube +## 0.6.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.6.0 ### Minor Changes diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md index 739fea3c6c..31d9bd58e1 100644 --- a/plugins/splunk-on-call/CHANGELOG.md +++ b/plugins/splunk-on-call/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-splunk-on-call +## 0.4.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.4.1 ### Patch Changes diff --git a/plugins/stack-overflow/CHANGELOG.md b/plugins/stack-overflow/CHANGELOG.md index 5241a47513..713bb6c330 100644 --- a/plugins/stack-overflow/CHANGELOG.md +++ b/plugins/stack-overflow/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-stack-overflow +## 0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-home@0.4.29 + - @backstage/plugin-search-react@1.3.1 + ## 0.1.8 ### Patch Changes diff --git a/plugins/tech-insights/CHANGELOG.md b/plugins/tech-insights/CHANGELOG.md index 17a332ea14..57e36f5924 100644 --- a/plugins/tech-insights/CHANGELOG.md +++ b/plugins/tech-insights/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-tech-insights +## 0.3.5 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.3.4 ### Patch Changes diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md index 6103f9729e..e5fe9f2b64 100644 --- a/plugins/tech-radar/CHANGELOG.md +++ b/plugins/tech-radar/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-tech-radar +## 0.5.20 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 0.5.19 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index 79c1d7da9b..4739e91191 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.0.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/integration-react@1.1.8 + - @backstage/plugin-catalog@1.7.1 + - @backstage/plugin-search-react@1.3.1 + - @backstage/plugin-techdocs@1.4.2 + - @backstage/plugin-techdocs-react@1.1.1 + ## 1.0.7 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index 193637f595..6b87304dae 100644 --- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md +++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-techdocs-module-addons-contrib +## 1.0.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/integration-react@1.1.8 + - @backstage/plugin-techdocs-react@1.1.1 + ## 1.0.7 ### Patch Changes diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index 8ce56c165d..19e8527f9a 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-techdocs-react +## 1.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 1.1.0 ### Minor Changes diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index f9b402dee9..d83d5bd075 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-techdocs +## 1.4.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/integration-react@1.1.8 + - @backstage/plugin-catalog-react@1.2.3 + - @backstage/plugin-search-react@1.3.1 + - @backstage/plugin-techdocs-react@1.1.1 + ## 1.4.1 ### Patch Changes diff --git a/plugins/todo/CHANGELOG.md b/plugins/todo/CHANGELOG.md index 1d0e0793e3..4cd17a216c 100644 --- a/plugins/todo/CHANGELOG.md +++ b/plugins/todo/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-todo +## 0.2.15 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.2.14 ### Patch Changes diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index 3debc58658..4987fe8b13 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-user-settings +## 0.6.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 0.6.0 ### Minor Changes diff --git a/plugins/vault/CHANGELOG.md b/plugins/vault/CHANGELOG.md index 6d25edc0ec..baab6ca848 100644 --- a/plugins/vault/CHANGELOG.md +++ b/plugins/vault/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-vault +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + - @backstage/plugin-catalog-react@1.2.3 + ## 0.1.6 ### Patch Changes diff --git a/plugins/xcmetrics/CHANGELOG.md b/plugins/xcmetrics/CHANGELOG.md index 487b953f42..48c727f1da 100644 --- a/plugins/xcmetrics/CHANGELOG.md +++ b/plugins/xcmetrics/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-xcmetrics +## 0.2.33 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.12.2 + ## 0.2.32 ### Patch Changes From 3e174587fcf293ceb00ae96ff92810f667622c33 Mon Sep 17 00:00:00 2001 From: Sarah Medeiros Date: Wed, 21 Dec 2022 10:39:25 -0500 Subject: [PATCH 70/99] Fix changeset Signed-off-by: Sarah Medeiros --- .changeset/funny-pianos-grow.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.changeset/funny-pianos-grow.md b/.changeset/funny-pianos-grow.md index 17f1d83927..7823ca82b0 100644 --- a/.changeset/funny-pianos-grow.md +++ b/.changeset/funny-pianos-grow.md @@ -3,7 +3,3 @@ --- Fixed bug in `EntityTagPicker` that filtered on unavailable tags for the selected kind. - -Fixed bug in `EntityOwnerPicker` that filtered on unavailable tags for the selected kind. - -Fixed bug in `EntityLifecyclePicker` that filtered on unavailable tags for the selected kind. From 5d05f14de63ac5812ea7a53cf0c00eaca57a54e5 Mon Sep 17 00:00:00 2001 From: Sarah Medeiros Date: Wed, 21 Dec 2022 10:52:49 -0500 Subject: [PATCH 71/99] Add missing changeset Signed-off-by: Sarah Medeiros --- plugins/catalog-react/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index 45bd94a1a7..13fb46fa91 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -4,6 +4,7 @@ ### Patch Changes +- 2cb9998: Fixed bug in `EntityOwnerPicker` and `EntityLifecyclePicker` that filtered on unavailable tags for the selected kind. - 2e701b3796: Internal refactor to use `react-router-dom` rather than `react-router`. - 6ffa47bb0a: Cleanup and small fixes for the kind selector - 19356df560: Updated dependency `zen-observable` to `^0.9.0`. From fbdb48941fe0e83130b13cb2b73ac28c6e0362f8 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 21 Dec 2022 16:41:35 +0100 Subject: [PATCH 72/99] cli: use package graph to look up local lockfile versions Signed-off-by: Patrik Oldsberg --- .changeset/bright-pants-cry.md | 2 +- .../cli/src/commands/start/startFrontend.ts | 4 + packages/cli/src/commands/versions/bump.ts | 5 ++ packages/cli/src/commands/versions/lint.ts | 4 + .../cli/src/lib/versioning/Lockfile.test.ts | 79 ++++++++++++++++++- packages/cli/src/lib/versioning/Lockfile.ts | 38 ++++++--- 6 files changed, 118 insertions(+), 14 deletions(-) diff --git a/.changeset/bright-pants-cry.md b/.changeset/bright-pants-cry.md index 53ba0c9521..88d7356640 100644 --- a/.changeset/bright-pants-cry.md +++ b/.changeset/bright-pants-cry.md @@ -2,4 +2,4 @@ '@backstage/cli': patch --- -Fixing the error `Error: No existing version was accepted for range ^0.12.0, searching through 0.11.2,0.0.0-use.local, for package @backstage/core-components`, which can happen when there are multiple matching versions for a package, and one of them uses `workspace:^` as its range. +Fixed an issue where the CLI would fail to function when there was a mix of workspace and non-workspace versions of the same package in `yarn.lock` when using Yarn 3. diff --git a/packages/cli/src/commands/start/startFrontend.ts b/packages/cli/src/commands/start/startFrontend.ts index 689fb28466..b7b81e6bff 100644 --- a/packages/cli/src/commands/start/startFrontend.ts +++ b/packages/cli/src/commands/start/startFrontend.ts @@ -22,6 +22,7 @@ import { loadCliConfig } from '../../lib/config'; import { paths } from '../../lib/paths'; import { Lockfile } from '../../lib/versioning'; import { forbiddenDuplicatesFilter, includedFilter } from '../versions/lint'; +import { PackageGraph } from '../../lib/monorepo'; interface StartAppOptions { verifyVersions?: boolean; @@ -36,6 +37,9 @@ export async function startFrontend(options: StartAppOptions) { const lockfile = await Lockfile.load(paths.resolveTargetRoot('yarn.lock')); const result = lockfile.analyze({ filter: includedFilter, + localPackages: PackageGraph.fromPackages( + await PackageGraph.listTargetPackages(), + ), }); const problemPackages = [...result.newVersions, ...result.newRanges] .map(({ name }) => name) diff --git a/packages/cli/src/commands/versions/bump.ts b/packages/cli/src/commands/versions/bump.ts index 1905aded20..37eb858dcf 100644 --- a/packages/cli/src/commands/versions/bump.ts +++ b/packages/cli/src/commands/versions/bump.ts @@ -39,6 +39,7 @@ import { ReleaseManifest, } from '@backstage/release-manifests'; import 'global-agent/bootstrap'; +import { PackageGraph } from '../../lib/monorepo'; const DEP_TYPES = [ 'dependencies', @@ -305,8 +306,12 @@ export default async (opts: OptionValues) => { // Finally we make sure the new lockfile doesn't have any duplicates const dedupLockfile = await Lockfile.load(lockfilePath); + const result = dedupLockfile.analyze({ filter, + localPackages: PackageGraph.fromPackages( + await PackageGraph.listTargetPackages(), + ), }); if (result.newVersions.length > 0) { diff --git a/packages/cli/src/commands/versions/lint.ts b/packages/cli/src/commands/versions/lint.ts index 9939b2ba51..e6bc119b71 100644 --- a/packages/cli/src/commands/versions/lint.ts +++ b/packages/cli/src/commands/versions/lint.ts @@ -18,6 +18,7 @@ import { OptionValues } from 'commander'; import { Lockfile } from '../../lib/versioning'; import { paths } from '../../lib/paths'; import partition from 'lodash/partition'; +import { PackageGraph } from '../../lib/monorepo'; // Packages that we try to avoid duplicates for const INCLUDED = [/^@backstage\//]; @@ -55,6 +56,9 @@ export default async (cmd: OptionValues) => { const lockfile = await Lockfile.load(paths.resolveTargetRoot('yarn.lock')); const result = lockfile.analyze({ filter: includedFilter, + localPackages: PackageGraph.fromPackages( + await PackageGraph.listTargetPackages(), + ), }); logArray( diff --git a/packages/cli/src/lib/versioning/Lockfile.test.ts b/packages/cli/src/lib/versioning/Lockfile.test.ts index 4621b43372..e663ec4a93 100644 --- a/packages/cli/src/lib/versioning/Lockfile.test.ts +++ b/packages/cli/src/lib/versioning/Lockfile.test.ts @@ -16,6 +16,7 @@ import fs from 'fs-extra'; import mockFs from 'mock-fs'; +import { ExtendedPackage } from '../monorepo'; import { Lockfile } from './Lockfile'; const HEADER = `# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. @@ -91,7 +92,7 @@ describe('Lockfile', () => { }); const lockfile = await Lockfile.load('/yarn.lock'); - const result = lockfile.analyze(); + const result = lockfile.analyze({ localPackages: new Map() }); expect(result).toEqual({ invalidRanges: [], newRanges: [], @@ -120,7 +121,7 @@ describe('Lockfile', () => { }); const lockfile = await Lockfile.load('/yarn.lock'); - const result = lockfile.analyze(); + const result = lockfile.analyze({ localPackages: new Map() }); expect(result).toEqual({ invalidRanges: [], newRanges: [ @@ -192,6 +193,36 @@ b@^2: version: 2.0.1 `; +const mockANewLocal = `${newHeader} +a@^1: + version: 1.0.1 + dependencies: + b: ^2 + integrity: sha512-xyz + resolved: "https://my-registry/a-1.0.01.tgz#abc123" + +"b@2.0.x, b@^2.0.1": + version: 0.0.0-use.local + +b@^2: + version: 2.0.0 +`; + +const mockANewLocalDedup = `${newHeader} +a@^1: + version: 1.0.1 + dependencies: + b: ^2 + integrity: sha512-xyz + resolved: "https://my-registry/a-1.0.01.tgz#abc123" + +"b@2.0.x, b@^2.0.1": + version: 0.0.0-use.local + +b@^2: + version: 0.0.0-use.local +`; + describe('New Lockfile', () => { afterEach(() => { mockFs.restore(); @@ -218,7 +249,7 @@ describe('New Lockfile', () => { }); const lockfile = await Lockfile.load('/yarn.lock'); - const result = lockfile.analyze(); + const result = lockfile.analyze({ localPackages: new Map() }); expect(result).toEqual({ invalidRanges: [], newRanges: [], @@ -242,4 +273,46 @@ describe('New Lockfile', () => { mockANewDedup, ); }); + + it('should deduplicate and save mockANewLocal', async () => { + mockFs({ + '/yarn.lock': mockANewLocal, + }); + + const lockfile = await Lockfile.load('/yarn.lock'); + const result = lockfile.analyze({ + localPackages: new Map([ + [ + 'b', + { + packageJson: { version: '2.0.1' }, + } as ExtendedPackage, + ], + ]), + }); + expect(result).toEqual({ + invalidRanges: [], + newRanges: [], + newVersions: [ + { + name: 'b', + range: '^2', + oldVersion: '2.0.0', + newVersion: '0.0.0-use.local', + }, + ], + }); + + expect(lockfile.toString()).toBe(mockANewLocal); + lockfile.replaceVersions(result.newVersions); + expect(lockfile.toString()).toBe(mockANewLocalDedup); + + await expect(fs.readFile('/yarn.lock', 'utf8')).resolves.toBe( + mockANewLocal, + ); + await expect(lockfile.save()).resolves.toBeUndefined(); + await expect(fs.readFile('/yarn.lock', 'utf8')).resolves.toBe( + mockANewLocalDedup, + ); + }); }); diff --git a/packages/cli/src/lib/versioning/Lockfile.ts b/packages/cli/src/lib/versioning/Lockfile.ts index ac2206cd83..0559ca86a1 100644 --- a/packages/cli/src/lib/versioning/Lockfile.ts +++ b/packages/cli/src/lib/versioning/Lockfile.ts @@ -18,6 +18,7 @@ import fs from 'fs-extra'; import semver from 'semver'; import { parseSyml, stringifySyml } from '@yarnpkg/parsers'; import { stringify as legacyStringifyLockfile } from '@yarnpkg/lockfile'; +import { ExtendedPackage } from '../monorepo'; const ENTRY_PATTERN = /^((?:@[^/]+\/)?[^@/]+)@(.+)$/; @@ -164,8 +165,11 @@ export class Lockfile { } /** Analyzes the lockfile to identify possible actions and warnings for the entries */ - analyze(options?: { filter?: (name: string) => boolean }): AnalyzeResult { - const { filter } = options ?? {}; + analyze(options: { + filter?: (name: string) => boolean; + localPackages: Map; + }): AnalyzeResult { + const { filter, localPackages } = options; const result: AnalyzeResult = { invalidRanges: [], newVersions: [], @@ -195,38 +199,52 @@ export class Lockfile { const versions = Array.from(new Set(entries.map(e => e.version))) .map(v => { // Translate workspace:^ references to the actual version - return v === '0.0.0-use.local' - ? require(`${name}/package.json`).version - : v; + if (v === '0.0.0-use.local') { + const local = localPackages.get(name); + if (!local) { + throw new Error(`No local package found for ${name}`); + } + if (!local.packageJson.version) { + throw new Error(`No version found for local package ${name}`); + } + return { + entryVersion: v, + actualVersion: local.packageJson.version, + }; + } + return { entryVersion: v, actualVersion: v }; }) - .sort((v1, v2) => semver.rcompare(v1, v2)); + .sort((v1, v2) => semver.rcompare(v1.actualVersion, v2.actualVersion)); // If we're not using at least 2 different versions we're done if (versions.length < 2) { continue; } + // TODO(Rugvip): Support bumping into workspace ranges too const acceptedVersions = new Set(); for (const { version, range } of entries) { // Finds the highest matching version from the the known versions // TODO(Rugvip): We may want to select the version that satisfies the most ranges rather than the highest one - const acceptedVersion = versions.find(v => semver.satisfies(v, range)); + const acceptedVersion = versions.find(v => + semver.satisfies(v.actualVersion, range), + ); if (!acceptedVersion) { throw new Error( `No existing version was accepted for range ${range}, searching through ${versions}, for package ${name}`, ); } - if (acceptedVersion !== version) { + if (acceptedVersion.entryVersion !== version) { result.newVersions.push({ name, range, - newVersion: acceptedVersion, + newVersion: acceptedVersion.entryVersion, oldVersion: version, }); } - acceptedVersions.add(acceptedVersion); + acceptedVersions.add(acceptedVersion.actualVersion); } // If all ranges were able to accept the same version, we're done From 35f752e1fa851262e10a503b9e752aa81abede97 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Dec 2022 16:07:41 +0000 Subject: [PATCH 73/99] fix(deps): update aws-sdk-js-v3 monorepo to v3.235.0 Signed-off-by: Renovate Bot --- yarn.lock | 244 +++++++++++++++++++++++++++--------------------------- 1 file changed, 123 insertions(+), 121 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0f31eb5d7f..d6c0d3335d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -408,15 +408,15 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/client-cognito-identity@npm:3.231.0": - version: 3.231.0 - resolution: "@aws-sdk/client-cognito-identity@npm:3.231.0" +"@aws-sdk/client-cognito-identity@npm:3.235.0": + version: 3.235.0 + resolution: "@aws-sdk/client-cognito-identity@npm:3.235.0" dependencies: "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/client-sts": 3.231.0 - "@aws-sdk/config-resolver": 3.231.0 - "@aws-sdk/credential-provider-node": 3.231.0 + "@aws-sdk/client-sts": 3.235.0 + "@aws-sdk/config-resolver": 3.234.0 + "@aws-sdk/credential-provider-node": 3.235.0 "@aws-sdk/fetch-http-handler": 3.226.0 "@aws-sdk/hash-node": 3.226.0 "@aws-sdk/invalid-dependency": 3.226.0 @@ -425,7 +425,7 @@ __metadata: "@aws-sdk/middleware-host-header": 3.226.0 "@aws-sdk/middleware-logger": 3.226.0 "@aws-sdk/middleware-recursion-detection": 3.226.0 - "@aws-sdk/middleware-retry": 3.229.0 + "@aws-sdk/middleware-retry": 3.235.0 "@aws-sdk/middleware-serde": 3.226.0 "@aws-sdk/middleware-signing": 3.226.0 "@aws-sdk/middleware-stack": 3.226.0 @@ -433,14 +433,14 @@ __metadata: "@aws-sdk/node-config-provider": 3.226.0 "@aws-sdk/node-http-handler": 3.226.0 "@aws-sdk/protocol-http": 3.226.0 - "@aws-sdk/smithy-client": 3.226.0 + "@aws-sdk/smithy-client": 3.234.0 "@aws-sdk/types": 3.226.0 "@aws-sdk/url-parser": 3.226.0 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.226.0 - "@aws-sdk/util-defaults-mode-node": 3.231.0 + "@aws-sdk/util-defaults-mode-browser": 3.234.0 + "@aws-sdk/util-defaults-mode-node": 3.234.0 "@aws-sdk/util-endpoints": 3.226.0 "@aws-sdk/util-retry": 3.229.0 "@aws-sdk/util-user-agent-browser": 3.226.0 @@ -448,20 +448,20 @@ __metadata: "@aws-sdk/util-utf8-browser": 3.188.0 "@aws-sdk/util-utf8-node": 3.208.0 tslib: ^2.3.1 - checksum: 309c433d0005c072db5298d75df4f37826350ffc2bdab940c1147f719f5285207e9761ee8f87884b23ea2cf5f8bf7157fcf992008f0a838491954cbe6925a47a + checksum: 4637132cc1a95823867c5ee80b35c7b84ddeed83c0778c2d7c197b26f24899641c825926c886c293f36d62e6b72be03ee091ac11cc9dbd875ad85936548ee178 languageName: node linkType: hard "@aws-sdk/client-s3@npm:^3.208.0": - version: 3.231.0 - resolution: "@aws-sdk/client-s3@npm:3.231.0" + version: 3.235.0 + resolution: "@aws-sdk/client-s3@npm:3.235.0" dependencies: "@aws-crypto/sha1-browser": 2.0.0 "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/client-sts": 3.231.0 - "@aws-sdk/config-resolver": 3.231.0 - "@aws-sdk/credential-provider-node": 3.231.0 + "@aws-sdk/client-sts": 3.235.0 + "@aws-sdk/config-resolver": 3.234.0 + "@aws-sdk/credential-provider-node": 3.235.0 "@aws-sdk/eventstream-serde-browser": 3.226.0 "@aws-sdk/eventstream-serde-config-resolver": 3.226.0 "@aws-sdk/eventstream-serde-node": 3.226.0 @@ -480,7 +480,7 @@ __metadata: "@aws-sdk/middleware-location-constraint": 3.226.0 "@aws-sdk/middleware-logger": 3.226.0 "@aws-sdk/middleware-recursion-detection": 3.226.0 - "@aws-sdk/middleware-retry": 3.229.0 + "@aws-sdk/middleware-retry": 3.235.0 "@aws-sdk/middleware-sdk-s3": 3.231.0 "@aws-sdk/middleware-serde": 3.226.0 "@aws-sdk/middleware-signing": 3.226.0 @@ -491,14 +491,14 @@ __metadata: "@aws-sdk/node-http-handler": 3.226.0 "@aws-sdk/protocol-http": 3.226.0 "@aws-sdk/signature-v4-multi-region": 3.226.0 - "@aws-sdk/smithy-client": 3.226.0 + "@aws-sdk/smithy-client": 3.234.0 "@aws-sdk/types": 3.226.0 "@aws-sdk/url-parser": 3.226.0 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.226.0 - "@aws-sdk/util-defaults-mode-node": 3.231.0 + "@aws-sdk/util-defaults-mode-browser": 3.234.0 + "@aws-sdk/util-defaults-mode-node": 3.234.0 "@aws-sdk/util-endpoints": 3.226.0 "@aws-sdk/util-retry": 3.229.0 "@aws-sdk/util-stream-browser": 3.226.0 @@ -511,19 +511,19 @@ __metadata: "@aws-sdk/xml-builder": 3.201.0 fast-xml-parser: 4.0.11 tslib: ^2.3.1 - checksum: 2190e3d12416c2c3023ca04afbb9ad466b9b0ae0f9af34889dad6dfb9db5fe26c9b5ce6631c0110cc1b3afc125ef569b5c44eb685390de42298e9480ef32700b + checksum: b16ce0a34a4d302edbc9cae91296a90a907511d6f0985feccf2196d537e1f1bfff6bfc0dafcb7ea1d5d7d0afd79d843cc15f8a5f87debd08852de338c698169b languageName: node linkType: hard "@aws-sdk/client-sqs@npm:^3.208.0": - version: 3.231.0 - resolution: "@aws-sdk/client-sqs@npm:3.231.0" + version: 3.235.0 + resolution: "@aws-sdk/client-sqs@npm:3.235.0" dependencies: "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/client-sts": 3.231.0 - "@aws-sdk/config-resolver": 3.231.0 - "@aws-sdk/credential-provider-node": 3.231.0 + "@aws-sdk/client-sts": 3.235.0 + "@aws-sdk/config-resolver": 3.234.0 + "@aws-sdk/credential-provider-node": 3.235.0 "@aws-sdk/fetch-http-handler": 3.226.0 "@aws-sdk/hash-node": 3.226.0 "@aws-sdk/invalid-dependency": 3.226.0 @@ -533,7 +533,7 @@ __metadata: "@aws-sdk/middleware-host-header": 3.226.0 "@aws-sdk/middleware-logger": 3.226.0 "@aws-sdk/middleware-recursion-detection": 3.226.0 - "@aws-sdk/middleware-retry": 3.229.0 + "@aws-sdk/middleware-retry": 3.235.0 "@aws-sdk/middleware-sdk-sqs": 3.226.0 "@aws-sdk/middleware-serde": 3.226.0 "@aws-sdk/middleware-signing": 3.226.0 @@ -542,14 +542,14 @@ __metadata: "@aws-sdk/node-config-provider": 3.226.0 "@aws-sdk/node-http-handler": 3.226.0 "@aws-sdk/protocol-http": 3.226.0 - "@aws-sdk/smithy-client": 3.226.0 + "@aws-sdk/smithy-client": 3.234.0 "@aws-sdk/types": 3.226.0 "@aws-sdk/url-parser": 3.226.0 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.226.0 - "@aws-sdk/util-defaults-mode-node": 3.231.0 + "@aws-sdk/util-defaults-mode-browser": 3.234.0 + "@aws-sdk/util-defaults-mode-node": 3.234.0 "@aws-sdk/util-endpoints": 3.226.0 "@aws-sdk/util-retry": 3.229.0 "@aws-sdk/util-user-agent-browser": 3.226.0 @@ -558,17 +558,17 @@ __metadata: "@aws-sdk/util-utf8-node": 3.208.0 fast-xml-parser: 4.0.11 tslib: ^2.3.1 - checksum: 9005c2ef37b9ba14f5f7821c91d062428f3dad8884f0a83b44674ba35694c63de6a7b6ee05c4abaf0b127a4ce0b3325ce2b1e1057f8d758fa7bae866d12b3883 + checksum: 04da2ab0a850fa74265b9ab91b14fdf470d7f2850e31866b3582b83a01991bd9555b370e34bceba2445910b2d60cf8e17d7ead1f5caa94987e4114db949548f8 languageName: node linkType: hard -"@aws-sdk/client-sso-oidc@npm:3.231.0": - version: 3.231.0 - resolution: "@aws-sdk/client-sso-oidc@npm:3.231.0" +"@aws-sdk/client-sso-oidc@npm:3.235.0": + version: 3.235.0 + resolution: "@aws-sdk/client-sso-oidc@npm:3.235.0" dependencies: "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/config-resolver": 3.231.0 + "@aws-sdk/config-resolver": 3.234.0 "@aws-sdk/fetch-http-handler": 3.226.0 "@aws-sdk/hash-node": 3.226.0 "@aws-sdk/invalid-dependency": 3.226.0 @@ -577,21 +577,21 @@ __metadata: "@aws-sdk/middleware-host-header": 3.226.0 "@aws-sdk/middleware-logger": 3.226.0 "@aws-sdk/middleware-recursion-detection": 3.226.0 - "@aws-sdk/middleware-retry": 3.229.0 + "@aws-sdk/middleware-retry": 3.235.0 "@aws-sdk/middleware-serde": 3.226.0 "@aws-sdk/middleware-stack": 3.226.0 "@aws-sdk/middleware-user-agent": 3.226.0 "@aws-sdk/node-config-provider": 3.226.0 "@aws-sdk/node-http-handler": 3.226.0 "@aws-sdk/protocol-http": 3.226.0 - "@aws-sdk/smithy-client": 3.226.0 + "@aws-sdk/smithy-client": 3.234.0 "@aws-sdk/types": 3.226.0 "@aws-sdk/url-parser": 3.226.0 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.226.0 - "@aws-sdk/util-defaults-mode-node": 3.231.0 + "@aws-sdk/util-defaults-mode-browser": 3.234.0 + "@aws-sdk/util-defaults-mode-node": 3.234.0 "@aws-sdk/util-endpoints": 3.226.0 "@aws-sdk/util-retry": 3.229.0 "@aws-sdk/util-user-agent-browser": 3.226.0 @@ -599,17 +599,17 @@ __metadata: "@aws-sdk/util-utf8-browser": 3.188.0 "@aws-sdk/util-utf8-node": 3.208.0 tslib: ^2.3.1 - checksum: 4ec5e5f0f25969df5d5341cd1f291a763ed2edaeb317228a7873f18f16471f2cbd83bd575f766a4f0f22c3ebfcf69ecd75891fd0518a205c69eb20ded8734c98 + checksum: c62558375fb6d3ce44136019de99e5134805894a80cec191e145003c0e065eb52ba0a288a62884371d6a69370f92df522b120e1c5428520c09ba0f4cdc5b91b7 languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.231.0": - version: 3.231.0 - resolution: "@aws-sdk/client-sso@npm:3.231.0" +"@aws-sdk/client-sso@npm:3.235.0": + version: 3.235.0 + resolution: "@aws-sdk/client-sso@npm:3.235.0" dependencies: "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/config-resolver": 3.231.0 + "@aws-sdk/config-resolver": 3.234.0 "@aws-sdk/fetch-http-handler": 3.226.0 "@aws-sdk/hash-node": 3.226.0 "@aws-sdk/invalid-dependency": 3.226.0 @@ -618,21 +618,21 @@ __metadata: "@aws-sdk/middleware-host-header": 3.226.0 "@aws-sdk/middleware-logger": 3.226.0 "@aws-sdk/middleware-recursion-detection": 3.226.0 - "@aws-sdk/middleware-retry": 3.229.0 + "@aws-sdk/middleware-retry": 3.235.0 "@aws-sdk/middleware-serde": 3.226.0 "@aws-sdk/middleware-stack": 3.226.0 "@aws-sdk/middleware-user-agent": 3.226.0 "@aws-sdk/node-config-provider": 3.226.0 "@aws-sdk/node-http-handler": 3.226.0 "@aws-sdk/protocol-http": 3.226.0 - "@aws-sdk/smithy-client": 3.226.0 + "@aws-sdk/smithy-client": 3.234.0 "@aws-sdk/types": 3.226.0 "@aws-sdk/url-parser": 3.226.0 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.226.0 - "@aws-sdk/util-defaults-mode-node": 3.231.0 + "@aws-sdk/util-defaults-mode-browser": 3.234.0 + "@aws-sdk/util-defaults-mode-node": 3.234.0 "@aws-sdk/util-endpoints": 3.226.0 "@aws-sdk/util-retry": 3.229.0 "@aws-sdk/util-user-agent-browser": 3.226.0 @@ -640,18 +640,18 @@ __metadata: "@aws-sdk/util-utf8-browser": 3.188.0 "@aws-sdk/util-utf8-node": 3.208.0 tslib: ^2.3.1 - checksum: 3551984b8c14f611daa93c7082f2a361caa0c8e985fbfc6d66674ec7f3624364aa7d3c8011aa334729022e3866e5323c6ac18a4ba3e840023128000994d99165 + checksum: 9852704cc383cbc8e44013eed6de514f60dc4f70ab89ceea79971b4b286db6b923648e8e4169d248f0888efed19c7c5fcc5748177577635d07080fd4980431d7 languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.231.0, @aws-sdk/client-sts@npm:^3.208.0": - version: 3.231.0 - resolution: "@aws-sdk/client-sts@npm:3.231.0" +"@aws-sdk/client-sts@npm:3.235.0, @aws-sdk/client-sts@npm:^3.208.0": + version: 3.235.0 + resolution: "@aws-sdk/client-sts@npm:3.235.0" dependencies: "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/config-resolver": 3.231.0 - "@aws-sdk/credential-provider-node": 3.231.0 + "@aws-sdk/config-resolver": 3.234.0 + "@aws-sdk/credential-provider-node": 3.235.0 "@aws-sdk/fetch-http-handler": 3.226.0 "@aws-sdk/hash-node": 3.226.0 "@aws-sdk/invalid-dependency": 3.226.0 @@ -660,7 +660,7 @@ __metadata: "@aws-sdk/middleware-host-header": 3.226.0 "@aws-sdk/middleware-logger": 3.226.0 "@aws-sdk/middleware-recursion-detection": 3.226.0 - "@aws-sdk/middleware-retry": 3.229.0 + "@aws-sdk/middleware-retry": 3.235.0 "@aws-sdk/middleware-sdk-sts": 3.226.0 "@aws-sdk/middleware-serde": 3.226.0 "@aws-sdk/middleware-signing": 3.226.0 @@ -669,14 +669,14 @@ __metadata: "@aws-sdk/node-config-provider": 3.226.0 "@aws-sdk/node-http-handler": 3.226.0 "@aws-sdk/protocol-http": 3.226.0 - "@aws-sdk/smithy-client": 3.226.0 + "@aws-sdk/smithy-client": 3.234.0 "@aws-sdk/types": 3.226.0 "@aws-sdk/url-parser": 3.226.0 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.226.0 - "@aws-sdk/util-defaults-mode-node": 3.231.0 + "@aws-sdk/util-defaults-mode-browser": 3.234.0 + "@aws-sdk/util-defaults-mode-node": 3.234.0 "@aws-sdk/util-endpoints": 3.226.0 "@aws-sdk/util-retry": 3.229.0 "@aws-sdk/util-user-agent-browser": 3.226.0 @@ -685,32 +685,32 @@ __metadata: "@aws-sdk/util-utf8-node": 3.208.0 fast-xml-parser: 4.0.11 tslib: ^2.3.1 - checksum: 377eabf0ff0523b7847fe1677084293c322d5525443a859f522b83363eb647a87721245f7b48f7232e2f2f3b49dfdaefdf274e9578915c24617c5d7540624aca + checksum: 9a2ec3240bd01fd1ed95b2c6766ea8d141e4b85a6535fcbb5c57ac725ef58c2d1c1403a61c336adbb1eceb5dd306ac1d35d7b8f25ed1ebc544a14ad14fb038a7 languageName: node linkType: hard -"@aws-sdk/config-resolver@npm:3.231.0": - version: 3.231.0 - resolution: "@aws-sdk/config-resolver@npm:3.231.0" +"@aws-sdk/config-resolver@npm:3.234.0": + version: 3.234.0 + resolution: "@aws-sdk/config-resolver@npm:3.234.0" dependencies: "@aws-sdk/signature-v4": 3.226.0 "@aws-sdk/types": 3.226.0 "@aws-sdk/util-config-provider": 3.208.0 "@aws-sdk/util-middleware": 3.226.0 tslib: ^2.3.1 - checksum: 67ec8d1f547cdde45f9c0daec21864225cfc04fba732e5e157b59d23f987d588fdc1738e1ce43012f885bdb6e65da8105511f5816e5844a5b839192b5feecc64 + checksum: a72bdb1748d7f04c95436ab1e8650b51c1bfd2745114e52f7d05339c61bb6a859306be0c6cc0034ecf4f3b29a2d68b48fe362762a58c90ec55a3444b93b5700d languageName: node linkType: hard -"@aws-sdk/credential-provider-cognito-identity@npm:3.231.0": - version: 3.231.0 - resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.231.0" +"@aws-sdk/credential-provider-cognito-identity@npm:3.235.0": + version: 3.235.0 + resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.235.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.231.0 + "@aws-sdk/client-cognito-identity": 3.235.0 "@aws-sdk/property-provider": 3.226.0 "@aws-sdk/types": 3.226.0 tslib: ^2.3.1 - checksum: f0c2059379f703e72538b00e52d2f5ce01c69a8adf3af370af2e72cc971ffe44963e6611917032326c0207b11fe34133780540e4ab0412e36e6c34b589f3dec3 + checksum: 85d348faa5161282d226040315aaff1a754d3bbd23ccb9131f021a5f6a473be76b80e2b3f5132d3b0a119732822d6b76829626d64e6c71c4d61d1fcbeb6e0080 languageName: node linkType: hard @@ -738,37 +738,38 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.231.0": - version: 3.231.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.231.0" +"@aws-sdk/credential-provider-ini@npm:3.235.0": + version: 3.235.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.235.0" dependencies: "@aws-sdk/credential-provider-env": 3.226.0 "@aws-sdk/credential-provider-imds": 3.226.0 - "@aws-sdk/credential-provider-sso": 3.231.0 + "@aws-sdk/credential-provider-process": 3.226.0 + "@aws-sdk/credential-provider-sso": 3.235.0 "@aws-sdk/credential-provider-web-identity": 3.226.0 "@aws-sdk/property-provider": 3.226.0 "@aws-sdk/shared-ini-file-loader": 3.226.0 "@aws-sdk/types": 3.226.0 tslib: ^2.3.1 - checksum: f6b11d4876602e65464bc25804781b78a6e0c66b39c293178d7e97f2f11c151bd6e23e1e31158c0442dfbc3076f417aeecf44c315d4e509b48e7cfc3be2e7472 + checksum: c910746d90ec363691dc99d53594beb49ea8562ef69c5a2e9a1702febc7d870cfe5b0f441afdae2bed643a4e8901b82f965660cdd70077bb006978fdafddeb05 languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.231.0, @aws-sdk/credential-provider-node@npm:^3.208.0": - version: 3.231.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.231.0" +"@aws-sdk/credential-provider-node@npm:3.235.0, @aws-sdk/credential-provider-node@npm:^3.208.0": + version: 3.235.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.235.0" dependencies: "@aws-sdk/credential-provider-env": 3.226.0 "@aws-sdk/credential-provider-imds": 3.226.0 - "@aws-sdk/credential-provider-ini": 3.231.0 + "@aws-sdk/credential-provider-ini": 3.235.0 "@aws-sdk/credential-provider-process": 3.226.0 - "@aws-sdk/credential-provider-sso": 3.231.0 + "@aws-sdk/credential-provider-sso": 3.235.0 "@aws-sdk/credential-provider-web-identity": 3.226.0 "@aws-sdk/property-provider": 3.226.0 "@aws-sdk/shared-ini-file-loader": 3.226.0 "@aws-sdk/types": 3.226.0 tslib: ^2.3.1 - checksum: e28266dce53130c6e28eb7e82028e29cb2db2f06e1f40c98ae7875bcf2e17553976899f02b93576070c7fd77c131046ec752f543f9aa7e32078e1f3a44c3acf5 + checksum: bfea379a5e66c311c57a1f7390b2e508d42f8cf3e1a48a5b9585b33c76339c7e8806dba413c7d5bf6d669ffd05a4c55ef705f92bf4687ba8f5e359c5d3c7495e languageName: node linkType: hard @@ -784,17 +785,17 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.231.0": - version: 3.231.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.231.0" +"@aws-sdk/credential-provider-sso@npm:3.235.0": + version: 3.235.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.235.0" dependencies: - "@aws-sdk/client-sso": 3.231.0 + "@aws-sdk/client-sso": 3.235.0 "@aws-sdk/property-provider": 3.226.0 "@aws-sdk/shared-ini-file-loader": 3.226.0 - "@aws-sdk/token-providers": 3.231.0 + "@aws-sdk/token-providers": 3.235.0 "@aws-sdk/types": 3.226.0 tslib: ^2.3.1 - checksum: 0aa69ec7ea5b0115c53972c6ae0419687e0bebc7500fbefa77c1108ecb81e735227982b586180b2fe111427cba17fad75f6db61f69a8b5cf5ad079f7ee09107c + checksum: 358fdda689c1f9be768516ca39de17e7fa7832d3d89d8893dd58f5d3377908ee2580155c1ba984c5ed21a410cda681bd22c7c74876af06b3496641a98b62353f languageName: node linkType: hard @@ -810,25 +811,25 @@ __metadata: linkType: hard "@aws-sdk/credential-providers@npm:^3.208.0": - version: 3.231.0 - resolution: "@aws-sdk/credential-providers@npm:3.231.0" + version: 3.235.0 + resolution: "@aws-sdk/credential-providers@npm:3.235.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.231.0 - "@aws-sdk/client-sso": 3.231.0 - "@aws-sdk/client-sts": 3.231.0 - "@aws-sdk/credential-provider-cognito-identity": 3.231.0 + "@aws-sdk/client-cognito-identity": 3.235.0 + "@aws-sdk/client-sso": 3.235.0 + "@aws-sdk/client-sts": 3.235.0 + "@aws-sdk/credential-provider-cognito-identity": 3.235.0 "@aws-sdk/credential-provider-env": 3.226.0 "@aws-sdk/credential-provider-imds": 3.226.0 - "@aws-sdk/credential-provider-ini": 3.231.0 - "@aws-sdk/credential-provider-node": 3.231.0 + "@aws-sdk/credential-provider-ini": 3.235.0 + "@aws-sdk/credential-provider-node": 3.235.0 "@aws-sdk/credential-provider-process": 3.226.0 - "@aws-sdk/credential-provider-sso": 3.231.0 + "@aws-sdk/credential-provider-sso": 3.235.0 "@aws-sdk/credential-provider-web-identity": 3.226.0 "@aws-sdk/property-provider": 3.226.0 "@aws-sdk/shared-ini-file-loader": 3.226.0 "@aws-sdk/types": 3.226.0 tslib: ^2.3.1 - checksum: edbf6a2821c5bf38d40a83f8d7c8ab967fff85d2c10af79f6f5df40cd52ef185f988c6499552a0294ca98cb7db34cb77e046a78e779e5ff5d362d104c29acc83 + checksum: 3c8436f78a4ddcf295b06d77ed3cb912a8ae56ee047526663f8316dde6b646095c8288480214c9e3f68cb98772511cb7fcec6f8c4100fba899c495a9429c3ba2 languageName: node linkType: hard @@ -966,11 +967,11 @@ __metadata: linkType: hard "@aws-sdk/lib-storage@npm:^3.208.0": - version: 3.231.0 - resolution: "@aws-sdk/lib-storage@npm:3.231.0" + version: 3.235.0 + resolution: "@aws-sdk/lib-storage@npm:3.235.0" dependencies: "@aws-sdk/middleware-endpoint": 3.226.0 - "@aws-sdk/smithy-client": 3.226.0 + "@aws-sdk/smithy-client": 3.234.0 buffer: 5.6.0 events: 3.3.0 stream-browserify: 3.0.0 @@ -978,7 +979,7 @@ __metadata: peerDependencies: "@aws-sdk/abort-controller": ^3.0.0 "@aws-sdk/client-s3": ^3.0.0 - checksum: b58e96b3e2981ae55efaeb3282377187c6c753b8342e2a4d68415cdce30f545928e2b9919803f6f23c04fc907561dabbfb159b8320dde1756da34c93c7271e55 + checksum: a9a8993fdc8c05769a2f0c5c838e9b2ba72216f234e67c1a8bcebf8f812ab397d48c8b118959f4d9918ad8811fdf93b3b47812075b0995af8c11cb26c0f3c305 languageName: node linkType: hard @@ -1101,17 +1102,18 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-retry@npm:3.229.0": - version: 3.229.0 - resolution: "@aws-sdk/middleware-retry@npm:3.229.0" +"@aws-sdk/middleware-retry@npm:3.235.0": + version: 3.235.0 + resolution: "@aws-sdk/middleware-retry@npm:3.235.0" dependencies: "@aws-sdk/protocol-http": 3.226.0 "@aws-sdk/service-error-classification": 3.229.0 "@aws-sdk/types": 3.226.0 "@aws-sdk/util-middleware": 3.226.0 + "@aws-sdk/util-retry": 3.229.0 tslib: ^2.3.1 uuid: ^8.3.2 - checksum: a146879b0d4d940aed398c4bfd288b28e678bff7cbe04983123caf3bcb73fecc801ec19d13ca82ac1b2977515dc71ebe28efc400c07839004213017f93369b04 + checksum: 397226fd10d8b0587a35ccab92160223f10740beb01ccac75dda0e30336b83c091c9aa51b9132a56ff6cccd6353b9e3c6ecf21ae18f20f8127e7e9e209e59a2a languageName: node linkType: hard @@ -1342,27 +1344,27 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/smithy-client@npm:3.226.0": - version: 3.226.0 - resolution: "@aws-sdk/smithy-client@npm:3.226.0" +"@aws-sdk/smithy-client@npm:3.234.0": + version: 3.234.0 + resolution: "@aws-sdk/smithy-client@npm:3.234.0" dependencies: "@aws-sdk/middleware-stack": 3.226.0 "@aws-sdk/types": 3.226.0 tslib: ^2.3.1 - checksum: 7c77d26367b94286fd0eceb5036f3a931314ab24c01ae64f645ea1390b3dc94d443a751be2be504d36aeeef86c5412facdc7df9624a792d9e97e5d53531f850c + checksum: 7b8299f81fde410b8f597662d4174a29740cb2791a2377e5009a73c0e7531fb440712ab25c837a0351dbceac4763cc8fadc6d4362727cf3ae749b25515da4ea1 languageName: node linkType: hard -"@aws-sdk/token-providers@npm:3.231.0": - version: 3.231.0 - resolution: "@aws-sdk/token-providers@npm:3.231.0" +"@aws-sdk/token-providers@npm:3.235.0": + version: 3.235.0 + resolution: "@aws-sdk/token-providers@npm:3.235.0" dependencies: - "@aws-sdk/client-sso-oidc": 3.231.0 + "@aws-sdk/client-sso-oidc": 3.235.0 "@aws-sdk/property-provider": 3.226.0 "@aws-sdk/shared-ini-file-loader": 3.226.0 "@aws-sdk/types": 3.226.0 tslib: ^2.3.1 - checksum: 3fe2b2776232f2aad499d74ec540431db013520a1c4e3cee6ed4ab4d5cb2a402b1b50dd60f64d1c95e9ebb2bcc44c2244462d62453b9f6226b73082930dcc119 + checksum: 5b9cd8cfd697f04a7c628329af1cc5003ec25fe08626148c55389311b53ecbaa47b83f2c6b832fa847f9db2ca5a3f63bcb8a1059b1b3b3590010acf3d4610896 languageName: node linkType: hard @@ -1449,29 +1451,29 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-browser@npm:3.226.0": - version: 3.226.0 - resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.226.0" +"@aws-sdk/util-defaults-mode-browser@npm:3.234.0": + version: 3.234.0 + resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.234.0" dependencies: "@aws-sdk/property-provider": 3.226.0 "@aws-sdk/types": 3.226.0 bowser: ^2.11.0 tslib: ^2.3.1 - checksum: 80a1383ef46c9289b7ef88ed1223e07f06bd3989517157199e325492d3da465d42bd9a975432b6d7c0e7e11f21aea02e5d977ddcc28c9f8b9f13e172fce0e657 + checksum: 79a381a632f867477dc7f948243c8ba82932d3f10325c76a5f2cf96412560648d149ba43ee31794bc45d81158a8c361d890b291880fc0c05f9bafc99cded5ef4 languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-node@npm:3.231.0": - version: 3.231.0 - resolution: "@aws-sdk/util-defaults-mode-node@npm:3.231.0" +"@aws-sdk/util-defaults-mode-node@npm:3.234.0": + version: 3.234.0 + resolution: "@aws-sdk/util-defaults-mode-node@npm:3.234.0" dependencies: - "@aws-sdk/config-resolver": 3.231.0 + "@aws-sdk/config-resolver": 3.234.0 "@aws-sdk/credential-provider-imds": 3.226.0 "@aws-sdk/node-config-provider": 3.226.0 "@aws-sdk/property-provider": 3.226.0 "@aws-sdk/types": 3.226.0 tslib: ^2.3.1 - checksum: 6dca6704798145569f25002605c4918890ebd2b7bf56d20909192993eea5bcf8fdceff7f51484c9ab7e009a77c3d371e0935666d204c819e703128e857859e73 + checksum: b70becd9e561c1622c75a452ed8c7a8b14b84eba35988159f29476db8c2b47ec72f0b7c19d1a252c725756af1fff1df4201e5e92b6136d1df9170e806dca5219 languageName: node linkType: hard From 0dd98f3aee4734a96421a5348746b331b0c40db9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Dec 2022 19:52:23 +0000 Subject: [PATCH 74/99] fix(deps): update dependency d3-shape to v3.2.0 Signed-off-by: Renovate Bot --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index d6c0d3335d..65a1d47e62 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19723,10 +19723,10 @@ __metadata: languageName: node linkType: hard -"d3-path@npm:1 - 3": - version: 3.0.1 - resolution: "d3-path@npm:3.0.1" - checksum: 6347c7055e0af330acadbe7f02144963eecabff560a791ecfeaffb45662e4d38eedabc6109dc481478f136b41d03707d3a43321ca9a115962888c99732ceb41a +"d3-path@npm:^3.1.0": + version: 3.1.0 + resolution: "d3-path@npm:3.1.0" + checksum: 2306f1bd9191e1eac895ec13e3064f732a85f243d6e627d242a313f9777756838a2215ea11562f0c7630c7c3b16a19ec1fe0948b1c82f3317fac55882f6ee5d8 languageName: node linkType: hard @@ -19767,11 +19767,11 @@ __metadata: linkType: hard "d3-shape@npm:^3.0.0": - version: 3.1.0 - resolution: "d3-shape@npm:3.1.0" + version: 3.2.0 + resolution: "d3-shape@npm:3.2.0" dependencies: - d3-path: 1 - 3 - checksum: 3dffe31b56feaf0817954748c9823c0e1fb6ab888b83775e9d568176ffa369546064ae49403963aac70108272988f632452634851f1c8a92805134d0c40e6dba + d3-path: ^3.1.0 + checksum: de2af5fc9a93036a7b68581ca0bfc4aca2d5a328aa7ba7064c11aedd44d24f310c20c40157cb654359d4c15c3ef369f95ee53d71221017276e34172c7b719cfa languageName: node linkType: hard From fa9eb77a4476616f4f1056998be23cfb5bd51af4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Dec 2022 20:23:05 +0000 Subject: [PATCH 75/99] fix(deps): update dependency diff to v5.1.0 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 65a1d47e62..e45abbd492 100644 --- a/yarn.lock +++ b/yarn.lock @@ -20319,9 +20319,9 @@ __metadata: linkType: hard "diff@npm:^5.0.0": - version: 5.0.0 - resolution: "diff@npm:5.0.0" - checksum: f19fe29284b633afdb2725c2a8bb7d25761ea54d321d8e67987ac851c5294be4afeab532bd84531e02583a3fe7f4014aa314a3eda84f5590e7a9e6b371ef3b46 + version: 5.1.0 + resolution: "diff@npm:5.1.0" + checksum: c7bf0df7c9bfbe1cf8a678fd1b2137c4fb11be117a67bc18a0e03ae75105e8533dbfb1cda6b46beb3586ef5aed22143ef9d70713977d5fb1f9114e21455fba90 languageName: node linkType: hard From bafe99abf9161bbc9cb7fedd11f76da6cc203792 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Dec 2022 23:44:44 +0000 Subject: [PATCH 76/99] fix(deps): update aws-sdk-js-v3 monorepo to v3.236.0 Signed-off-by: Renovate Bot --- yarn.lock | 138 +++++++++++++++++++++++++++--------------------------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/yarn.lock b/yarn.lock index e45abbd492..5562f1fa30 100644 --- a/yarn.lock +++ b/yarn.lock @@ -408,15 +408,15 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/client-cognito-identity@npm:3.235.0": - version: 3.235.0 - resolution: "@aws-sdk/client-cognito-identity@npm:3.235.0" +"@aws-sdk/client-cognito-identity@npm:3.236.0": + version: 3.236.0 + resolution: "@aws-sdk/client-cognito-identity@npm:3.236.0" dependencies: "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/client-sts": 3.235.0 + "@aws-sdk/client-sts": 3.236.0 "@aws-sdk/config-resolver": 3.234.0 - "@aws-sdk/credential-provider-node": 3.235.0 + "@aws-sdk/credential-provider-node": 3.236.0 "@aws-sdk/fetch-http-handler": 3.226.0 "@aws-sdk/hash-node": 3.226.0 "@aws-sdk/invalid-dependency": 3.226.0 @@ -448,20 +448,20 @@ __metadata: "@aws-sdk/util-utf8-browser": 3.188.0 "@aws-sdk/util-utf8-node": 3.208.0 tslib: ^2.3.1 - checksum: 4637132cc1a95823867c5ee80b35c7b84ddeed83c0778c2d7c197b26f24899641c825926c886c293f36d62e6b72be03ee091ac11cc9dbd875ad85936548ee178 + checksum: 808339bd0113f65674dea0d65af25c350ff5a8f2595f9dd11215b6e457df5d243db156042dc4bfbb39b302d6f871a71fbbed20f403207fb6e4c9e444eb802bf1 languageName: node linkType: hard "@aws-sdk/client-s3@npm:^3.208.0": - version: 3.235.0 - resolution: "@aws-sdk/client-s3@npm:3.235.0" + version: 3.236.0 + resolution: "@aws-sdk/client-s3@npm:3.236.0" dependencies: "@aws-crypto/sha1-browser": 2.0.0 "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/client-sts": 3.235.0 + "@aws-sdk/client-sts": 3.236.0 "@aws-sdk/config-resolver": 3.234.0 - "@aws-sdk/credential-provider-node": 3.235.0 + "@aws-sdk/credential-provider-node": 3.236.0 "@aws-sdk/eventstream-serde-browser": 3.226.0 "@aws-sdk/eventstream-serde-config-resolver": 3.226.0 "@aws-sdk/eventstream-serde-node": 3.226.0 @@ -511,19 +511,19 @@ __metadata: "@aws-sdk/xml-builder": 3.201.0 fast-xml-parser: 4.0.11 tslib: ^2.3.1 - checksum: b16ce0a34a4d302edbc9cae91296a90a907511d6f0985feccf2196d537e1f1bfff6bfc0dafcb7ea1d5d7d0afd79d843cc15f8a5f87debd08852de338c698169b + checksum: 6a8953c229a1824bf1639dfa1a593bff3419c2c338da8df956d5cd3098dc3c1236ee63564347a22f40dc5947322b3f315ae7e39dd9c115ccf8a28199168c6d3b languageName: node linkType: hard "@aws-sdk/client-sqs@npm:^3.208.0": - version: 3.235.0 - resolution: "@aws-sdk/client-sqs@npm:3.235.0" + version: 3.236.0 + resolution: "@aws-sdk/client-sqs@npm:3.236.0" dependencies: "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/client-sts": 3.235.0 + "@aws-sdk/client-sts": 3.236.0 "@aws-sdk/config-resolver": 3.234.0 - "@aws-sdk/credential-provider-node": 3.235.0 + "@aws-sdk/credential-provider-node": 3.236.0 "@aws-sdk/fetch-http-handler": 3.226.0 "@aws-sdk/hash-node": 3.226.0 "@aws-sdk/invalid-dependency": 3.226.0 @@ -558,13 +558,13 @@ __metadata: "@aws-sdk/util-utf8-node": 3.208.0 fast-xml-parser: 4.0.11 tslib: ^2.3.1 - checksum: 04da2ab0a850fa74265b9ab91b14fdf470d7f2850e31866b3582b83a01991bd9555b370e34bceba2445910b2d60cf8e17d7ead1f5caa94987e4114db949548f8 + checksum: c1d3eb3886d8d799afd081cf76822627e359495daa94edb615a001704933b31d276249828c5e5823af49ba08826875a4c768d8e6b4493abe9b65583a585839b7 languageName: node linkType: hard -"@aws-sdk/client-sso-oidc@npm:3.235.0": - version: 3.235.0 - resolution: "@aws-sdk/client-sso-oidc@npm:3.235.0" +"@aws-sdk/client-sso-oidc@npm:3.236.0": + version: 3.236.0 + resolution: "@aws-sdk/client-sso-oidc@npm:3.236.0" dependencies: "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 @@ -599,13 +599,13 @@ __metadata: "@aws-sdk/util-utf8-browser": 3.188.0 "@aws-sdk/util-utf8-node": 3.208.0 tslib: ^2.3.1 - checksum: c62558375fb6d3ce44136019de99e5134805894a80cec191e145003c0e065eb52ba0a288a62884371d6a69370f92df522b120e1c5428520c09ba0f4cdc5b91b7 + checksum: 6fbbebb37547bafc9345c1fd03692728d6b6015f7583f22b2542beaac7f395ab29af884f1a353e78dd147ebf8b109b1d6678f9d1ae18c2b70739e9ceee6781ef languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.235.0": - version: 3.235.0 - resolution: "@aws-sdk/client-sso@npm:3.235.0" +"@aws-sdk/client-sso@npm:3.236.0": + version: 3.236.0 + resolution: "@aws-sdk/client-sso@npm:3.236.0" dependencies: "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 @@ -640,18 +640,18 @@ __metadata: "@aws-sdk/util-utf8-browser": 3.188.0 "@aws-sdk/util-utf8-node": 3.208.0 tslib: ^2.3.1 - checksum: 9852704cc383cbc8e44013eed6de514f60dc4f70ab89ceea79971b4b286db6b923648e8e4169d248f0888efed19c7c5fcc5748177577635d07080fd4980431d7 + checksum: 15cb25a3c12fe0f11ed320c8f02f72ee0d43291a14c06fce81f608fbc75a85785698fbffc3112e7e92ece25460d24670ba345535b43003b20798a0fcc8a7b31d languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.235.0, @aws-sdk/client-sts@npm:^3.208.0": - version: 3.235.0 - resolution: "@aws-sdk/client-sts@npm:3.235.0" +"@aws-sdk/client-sts@npm:3.236.0, @aws-sdk/client-sts@npm:^3.208.0": + version: 3.236.0 + resolution: "@aws-sdk/client-sts@npm:3.236.0" dependencies: "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 "@aws-sdk/config-resolver": 3.234.0 - "@aws-sdk/credential-provider-node": 3.235.0 + "@aws-sdk/credential-provider-node": 3.236.0 "@aws-sdk/fetch-http-handler": 3.226.0 "@aws-sdk/hash-node": 3.226.0 "@aws-sdk/invalid-dependency": 3.226.0 @@ -685,7 +685,7 @@ __metadata: "@aws-sdk/util-utf8-node": 3.208.0 fast-xml-parser: 4.0.11 tslib: ^2.3.1 - checksum: 9a2ec3240bd01fd1ed95b2c6766ea8d141e4b85a6535fcbb5c57ac725ef58c2d1c1403a61c336adbb1eceb5dd306ac1d35d7b8f25ed1ebc544a14ad14fb038a7 + checksum: 98463fe50a588032b82be5289445c6e7250bd947076e5981ba7c126386d567f3b1ea9a9652c032da919503cdba2c3b517061911ddffae0c91f880f7eabaeaa08 languageName: node linkType: hard @@ -702,15 +702,15 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-cognito-identity@npm:3.235.0": - version: 3.235.0 - resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.235.0" +"@aws-sdk/credential-provider-cognito-identity@npm:3.236.0": + version: 3.236.0 + resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.236.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.235.0 + "@aws-sdk/client-cognito-identity": 3.236.0 "@aws-sdk/property-provider": 3.226.0 "@aws-sdk/types": 3.226.0 tslib: ^2.3.1 - checksum: 85d348faa5161282d226040315aaff1a754d3bbd23ccb9131f021a5f6a473be76b80e2b3f5132d3b0a119732822d6b76829626d64e6c71c4d61d1fcbeb6e0080 + checksum: 29d3178f490cbb711553103c0fb544604c5e70e36395f1edc6b9bd2ee0e928160b911b4893fe89418c182548d0dddfbd44e9ef629ad690ab1724a2a693368c16 languageName: node linkType: hard @@ -738,38 +738,38 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.235.0": - version: 3.235.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.235.0" +"@aws-sdk/credential-provider-ini@npm:3.236.0": + version: 3.236.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.236.0" dependencies: "@aws-sdk/credential-provider-env": 3.226.0 "@aws-sdk/credential-provider-imds": 3.226.0 "@aws-sdk/credential-provider-process": 3.226.0 - "@aws-sdk/credential-provider-sso": 3.235.0 + "@aws-sdk/credential-provider-sso": 3.236.0 "@aws-sdk/credential-provider-web-identity": 3.226.0 "@aws-sdk/property-provider": 3.226.0 "@aws-sdk/shared-ini-file-loader": 3.226.0 "@aws-sdk/types": 3.226.0 tslib: ^2.3.1 - checksum: c910746d90ec363691dc99d53594beb49ea8562ef69c5a2e9a1702febc7d870cfe5b0f441afdae2bed643a4e8901b82f965660cdd70077bb006978fdafddeb05 + checksum: e748aba37dab11ed395fa60c7eee119b997e4c64b1a838c93258cfe6a6e289dfa0aa20d292b94d06da8148b7cb32604b24f84aadc2a389bf8248c64d80ef44d5 languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.235.0, @aws-sdk/credential-provider-node@npm:^3.208.0": - version: 3.235.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.235.0" +"@aws-sdk/credential-provider-node@npm:3.236.0, @aws-sdk/credential-provider-node@npm:^3.208.0": + version: 3.236.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.236.0" dependencies: "@aws-sdk/credential-provider-env": 3.226.0 "@aws-sdk/credential-provider-imds": 3.226.0 - "@aws-sdk/credential-provider-ini": 3.235.0 + "@aws-sdk/credential-provider-ini": 3.236.0 "@aws-sdk/credential-provider-process": 3.226.0 - "@aws-sdk/credential-provider-sso": 3.235.0 + "@aws-sdk/credential-provider-sso": 3.236.0 "@aws-sdk/credential-provider-web-identity": 3.226.0 "@aws-sdk/property-provider": 3.226.0 "@aws-sdk/shared-ini-file-loader": 3.226.0 "@aws-sdk/types": 3.226.0 tslib: ^2.3.1 - checksum: bfea379a5e66c311c57a1f7390b2e508d42f8cf3e1a48a5b9585b33c76339c7e8806dba413c7d5bf6d669ffd05a4c55ef705f92bf4687ba8f5e359c5d3c7495e + checksum: d5a26b40a985edfef5006efde921d58b78829b67eed9fea56e108b99eec437a02721b93ef0e2dcd9a4739716c85d8db75935a71d2afa1190b0f1d0010511f649 languageName: node linkType: hard @@ -785,17 +785,17 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.235.0": - version: 3.235.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.235.0" +"@aws-sdk/credential-provider-sso@npm:3.236.0": + version: 3.236.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.236.0" dependencies: - "@aws-sdk/client-sso": 3.235.0 + "@aws-sdk/client-sso": 3.236.0 "@aws-sdk/property-provider": 3.226.0 "@aws-sdk/shared-ini-file-loader": 3.226.0 - "@aws-sdk/token-providers": 3.235.0 + "@aws-sdk/token-providers": 3.236.0 "@aws-sdk/types": 3.226.0 tslib: ^2.3.1 - checksum: 358fdda689c1f9be768516ca39de17e7fa7832d3d89d8893dd58f5d3377908ee2580155c1ba984c5ed21a410cda681bd22c7c74876af06b3496641a98b62353f + checksum: 215e0cd08c4dca453a80ce695bf4dddb94ce7562100bfa64e2ba5406ab3aeb6cf92882bd714b6ee95d3f13c45f3286eb616d32e1ffc58728f1e21e7eb171b301 languageName: node linkType: hard @@ -811,25 +811,25 @@ __metadata: linkType: hard "@aws-sdk/credential-providers@npm:^3.208.0": - version: 3.235.0 - resolution: "@aws-sdk/credential-providers@npm:3.235.0" + version: 3.236.0 + resolution: "@aws-sdk/credential-providers@npm:3.236.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.235.0 - "@aws-sdk/client-sso": 3.235.0 - "@aws-sdk/client-sts": 3.235.0 - "@aws-sdk/credential-provider-cognito-identity": 3.235.0 + "@aws-sdk/client-cognito-identity": 3.236.0 + "@aws-sdk/client-sso": 3.236.0 + "@aws-sdk/client-sts": 3.236.0 + "@aws-sdk/credential-provider-cognito-identity": 3.236.0 "@aws-sdk/credential-provider-env": 3.226.0 "@aws-sdk/credential-provider-imds": 3.226.0 - "@aws-sdk/credential-provider-ini": 3.235.0 - "@aws-sdk/credential-provider-node": 3.235.0 + "@aws-sdk/credential-provider-ini": 3.236.0 + "@aws-sdk/credential-provider-node": 3.236.0 "@aws-sdk/credential-provider-process": 3.226.0 - "@aws-sdk/credential-provider-sso": 3.235.0 + "@aws-sdk/credential-provider-sso": 3.236.0 "@aws-sdk/credential-provider-web-identity": 3.226.0 "@aws-sdk/property-provider": 3.226.0 "@aws-sdk/shared-ini-file-loader": 3.226.0 "@aws-sdk/types": 3.226.0 tslib: ^2.3.1 - checksum: 3c8436f78a4ddcf295b06d77ed3cb912a8ae56ee047526663f8316dde6b646095c8288480214c9e3f68cb98772511cb7fcec6f8c4100fba899c495a9429c3ba2 + checksum: 3105661946fa12322b18a2227f26a8b734072850882e771493b398e714b433c024873a4495a18d55a4213022b07c658cb7ed38859b5fa152fc2ce1e02b408ca1 languageName: node linkType: hard @@ -967,8 +967,8 @@ __metadata: linkType: hard "@aws-sdk/lib-storage@npm:^3.208.0": - version: 3.235.0 - resolution: "@aws-sdk/lib-storage@npm:3.235.0" + version: 3.236.0 + resolution: "@aws-sdk/lib-storage@npm:3.236.0" dependencies: "@aws-sdk/middleware-endpoint": 3.226.0 "@aws-sdk/smithy-client": 3.234.0 @@ -979,7 +979,7 @@ __metadata: peerDependencies: "@aws-sdk/abort-controller": ^3.0.0 "@aws-sdk/client-s3": ^3.0.0 - checksum: a9a8993fdc8c05769a2f0c5c838e9b2ba72216f234e67c1a8bcebf8f812ab397d48c8b118959f4d9918ad8811fdf93b3b47812075b0995af8c11cb26c0f3c305 + checksum: 783b67c4605a4f7d4072ce38b2b2416a0a6771784f9ba5b1608be3777e7d21a18c820fff94218856607f984c453376e25e80393ef233365476850e354f8e15f8 languageName: node linkType: hard @@ -1355,16 +1355,16 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/token-providers@npm:3.235.0": - version: 3.235.0 - resolution: "@aws-sdk/token-providers@npm:3.235.0" +"@aws-sdk/token-providers@npm:3.236.0": + version: 3.236.0 + resolution: "@aws-sdk/token-providers@npm:3.236.0" dependencies: - "@aws-sdk/client-sso-oidc": 3.235.0 + "@aws-sdk/client-sso-oidc": 3.236.0 "@aws-sdk/property-provider": 3.226.0 "@aws-sdk/shared-ini-file-loader": 3.226.0 "@aws-sdk/types": 3.226.0 tslib: ^2.3.1 - checksum: 5b9cd8cfd697f04a7c628329af1cc5003ec25fe08626148c55389311b53ecbaa47b83f2c6b832fa847f9db2ca5a3f63bcb8a1059b1b3b3590010acf3d4610896 + checksum: c5e6c88f22d35002f2d575d23ba5a530ee195b7220d7c0c58603bc2fafb6632a6755bc863cb7519eadda110d2f3193a144f34cc0236df285fcde40c980ba653a languageName: node linkType: hard From 56633804ddcfcffe6c2bd324823d84f42f85a188 Mon Sep 17 00:00:00 2001 From: Eric Peterson Date: Thu, 22 Dec 2022 11:11:28 +0100 Subject: [PATCH 77/99] Gracefully handle client-level (vs. response-level) errors Signed-off-by: Eric Peterson --- .changeset/search-mele-kalikimaka.md | 5 ++++ .../ElasticSearchSearchEngineIndexer.test.ts | 29 +++++++++++++++++++ .../ElasticSearchSearchEngineIndexer.ts | 11 +++++++ 3 files changed, 45 insertions(+) create mode 100644 .changeset/search-mele-kalikimaka.md diff --git a/.changeset/search-mele-kalikimaka.md b/.changeset/search-mele-kalikimaka.md new file mode 100644 index 0000000000..4f1faff02f --- /dev/null +++ b/.changeset/search-mele-kalikimaka.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend-module-elasticsearch': patch +--- + +Fixed a bug that could cause the backstage backend to unexpectedly terminate when client errors were encountered during the indexing process. diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.test.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.test.ts index 92193976b4..94b59fcf42 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.test.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.test.ts @@ -250,4 +250,33 @@ describe('ElasticSearchSearchEngineIndexer', () => { // Final deletion shouldn't be called. expect(deleteSpy).not.toHaveBeenCalled(); }); + + it('handles bulk client rejection', async () => { + // Given an ES client wrapper that rejects an error + const expectedError = new Error('HTTP Timeout'); + const mockClientWrapper = ElasticSearchClientWrapper.fromClientOptions({ + node: 'http://localhost:9200', + Connection: mock.getConnection(), + }); + mockClientWrapper.bulk = jest.fn().mockRejectedValue(expectedError); + + // And a search engine indexer that uses that client wrapper + indexer = new ElasticSearchSearchEngineIndexer({ + type: 'some-type', + indexPrefix: '', + indexSeparator: '-index__', + alias: 'some-type-index__search', + logger: getVoidLogger(), + elasticSearchClientWrapper: mockClientWrapper, + batchSize: 1000, + }); + + // When the indexer is run in the test pipeline + const { error } = await TestPipeline.fromIndexer(indexer) + .withDocuments([{ title: 'a', location: 'a', text: '/a' }]) + .execute(); + + // Then the pipeline should have received the expected error + expect(error).toBe(expectedError); + }); }); diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts index 29f20ea650..3f842976e5 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts @@ -60,6 +60,7 @@ export class ElasticSearchSearchEngineIndexer extends BatchSearchEngineIndexer { private readonly sourceStream: Readable; private readonly elasticSearchClientWrapper: ElasticSearchClientWrapper; private bulkResult: Promise; + private bulkClientError?: Error; constructor(options: ElasticSearchSearchEngineIndexerOptions) { super({ batchSize: options.batchSize }); @@ -94,6 +95,11 @@ export class ElasticSearchSearchEngineIndexer extends BatchSearchEngineIndexer { }, refreshOnCompletion: that.indexName, }); + + // Safely catch errors thrown by the bulk helper client, e.g. HTTP timeouts + this.bulkResult.catch(e => { + this.bulkClientError = e; + }); } async initialize(): Promise { @@ -197,6 +203,11 @@ export class ElasticSearchSearchEngineIndexer extends BatchSearchEngineIndexer { * backpressure in other parts of the indexing pipeline. */ private isReady(): Promise { + // Early exit if the underlying ES client encountered an error. + if (this.bulkClientError) { + return Promise.reject(this.bulkClientError); + } + return new Promise(resolve => { const interval = setInterval(() => { if (this.received === this.processed) { From ade5b9ca4acedc6c24b0afa51bdd7a211b9185bb Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 22 Dec 2022 11:18:53 +0100 Subject: [PATCH 78/99] chore: updating app-config.yaml for uffizzi Signed-off-by: blam --- .../uffizzi.production.app-config.yaml | 122 ++++++++++++++++-- 1 file changed, 114 insertions(+), 8 deletions(-) diff --git a/.github/uffizzi/uffizzi.production.app-config.yaml b/.github/uffizzi/uffizzi.production.app-config.yaml index c65bc51786..56055c8342 100644 --- a/.github/uffizzi/uffizzi.production.app-config.yaml +++ b/.github/uffizzi/uffizzi.production.app-config.yaml @@ -2,6 +2,9 @@ app: title: Backstage Uffizzi Environment baseUrl: ${UFFIZZI_URL} +organization: + name: My Company + backend: baseUrl: ${UFFIZZI_URL} auth: @@ -11,20 +14,19 @@ backend: listen: port: 7007 database: - client: pg - connection: - host: db - user: ${POSTGRES_USER} - password: ${POSTGRES_PASSWORD} - port: 5432 + client: better-sqlite3 + connection: ':memory:' cache: store: memory cors: - origin: http://localhost:3000 + origin: ${UFFIZZI_URL} methods: [GET, HEAD, PATCH, POST, PUT, DELETE] credentials: true csp: connect-src: ["'self'", 'http:', 'https:'] + # Content-Security-Policy directives follow the Helmet format: https://helmetjs.github.io/#reference + # Default Helmet Content-Security-Policy values can be removed by setting the key to false + auth: environment: production providers: {} @@ -34,6 +36,74 @@ catalog: - type: url target: https://github.com/backstage/backstage/blob/master/packages/catalog-model/examples/all.yaml +proxy: + '/circleci/api': + target: https://circleci.com/api/v1.1 + headers: + Circle-Token: ${CIRCLECI_AUTH_TOKEN} + + '/jenkins/api': + target: http://localhost:8080 + headers: + Authorization: ${JENKINS_BASIC_AUTH_HEADER} + + '/travisci/api': + target: https://api.travis-ci.com + changeOrigin: true + headers: + Authorization: ${TRAVISCI_AUTH_TOKEN} + travis-api-version: '3' + + '/newrelic/apm/api': + target: https://api.newrelic.com/v2 + headers: + X-Api-Key: ${NEW_RELIC_REST_API_KEY} + + '/newrelic/api': + target: https://api.newrelic.com + headers: + X-Api-Key: ${NEW_RELIC_USER_KEY} + + '/pagerduty': + target: https://api.pagerduty.com + headers: + Authorization: Token token=${PAGERDUTY_TOKEN} + + '/buildkite/api': + target: https://api.buildkite.com/v2/ + headers: + Authorization: ${BUILDKITE_TOKEN} + + '/sentry/api': + target: https://sentry.io/api/ + allowedMethods: ['GET'] + headers: + Authorization: ${SENTRY_TOKEN} + + '/ilert': + target: https://api.ilert.com + allowedMethods: ['GET', 'POST', 'PUT'] + allowedHeaders: ['Authorization'] + headers: + Authorization: ${ILERT_AUTH_HEADER} + + '/airflow': + target: https://your.airflow.instance.com/api/v1 + headers: + Authorization: ${AIRFLOW_BASIC_AUTH_HEADER} + + '/gocd': + target: https://your.gocd.instance.com/go/api + allowedMethods: ['GET'] + allowedHeaders: ['Authorization'] + headers: + Authorization: Basic ${GOCD_AUTH_CREDENTIALS} + + '/dynatrace': + target: https://your.dynatrace.instance.com/api/v2 + headers: + Authorization: 'Api-Token ${DYNATRACE_ACCESS_TOKEN}' + techdocs: builder: 'local' # Alternatives - 'external' generator: @@ -68,6 +138,7 @@ kubernetes: clusterLocatorMethods: - type: 'config' clusters: [] + kafka: clientId: backstage clusters: @@ -75,13 +146,45 @@ kafka: dashboardUrl: https://akhq.io/ brokers: - localhost:9092 + allure: baseUrl: http://localhost:5050/allure-docker-service + integrations: github: - host: github.com token: ${GITHUB_TOKEN} -scaffolder: {} + ### Example for how to add your GitHub Enterprise instance using the API: + # - host: ghe.example.net + # apiBaseUrl: https://ghe.example.net/api/v3 + # token: ${GHE_TOKEN} + ### Example for how to add your GitHub Enterprise instance using raw HTTP fetches (token is optional): + # - host: ghe.example.net + # rawBaseUrl: https://ghe.example.net/raw + # token: ${GHE_TOKEN} + gitlab: + - host: gitlab.com + token: ${GITLAB_TOKEN} + ### Example for how to add a bitbucket cloud integration + # bitbucketCloud: + # - username: ${BITBUCKET_USERNAME} + # appPassword: ${BITBUCKET_APP_PASSWORD} + ### Example for how to add your bitbucket server instance using the API: + # - host: server.bitbucket.com + # apiBaseUrl: server.bitbucket.com + # username: ${BITBUCKET_SERVER_USERNAME} + # appPassword: ${BITBUCKET_SERVER_APP_PASSWORD} + azure: + - host: dev.azure.com + token: ${AZURE_TOKEN} + # googleGcs: + # clientEmail: 'example@example.com' + # privateKey: ${GCS_PRIVATE_KEY} + awsS3: + - host: amazonaws.com + accessKeyId: ${AWS_ACCESS_KEY_ID} + secretAccessKey: ${AWS_SECRET_ACCESS_KEY} + costInsights: engineerCost: 200000 engineerThreshold: 0.5 @@ -151,3 +254,6 @@ apacheAirflow: gocd: baseUrl: https://your.gocd.instance.com + +permission: + enabled: true From 50aef4b5b26ed287b9729d556d444b2eb39539d9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 22 Dec 2022 11:00:14 +0000 Subject: [PATCH 79/99] fix(deps): update dependency eslint to v8.30.0 Signed-off-by: Renovate Bot --- yarn.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5562f1fa30..7c130dbe31 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9019,20 +9019,20 @@ __metadata: languageName: node linkType: hard -"@eslint/eslintrc@npm:^1.3.3": - version: 1.3.3 - resolution: "@eslint/eslintrc@npm:1.3.3" +"@eslint/eslintrc@npm:^1.4.0": + version: 1.4.0 + resolution: "@eslint/eslintrc@npm:1.4.0" dependencies: ajv: ^6.12.4 debug: ^4.3.2 espree: ^9.4.0 - globals: ^13.15.0 + globals: ^13.19.0 ignore: ^5.2.0 import-fresh: ^3.2.1 js-yaml: ^4.1.0 minimatch: ^3.1.2 strip-json-comments: ^3.1.1 - checksum: f03e9d6727efd3e0719da2051ea80c0c73d20e28c171121527dbb868cd34232ca9c1d0525a66e517a404afea26624b1e47895b6a92474678418c2f50c9566694 + checksum: 73e39c833deafde8d8706e6fa9b52b6d99927c094ead8e405ea4174e8197ec24aac9ba88ae38cc8ad32eaccf07b9c7fc5dc70761d1fba6da41a928691447305f languageName: node linkType: hard @@ -9853,14 +9853,14 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.6": - version: 0.11.7 - resolution: "@humanwhocodes/config-array@npm:0.11.7" +"@humanwhocodes/config-array@npm:^0.11.8": + version: 0.11.8 + resolution: "@humanwhocodes/config-array@npm:0.11.8" dependencies: "@humanwhocodes/object-schema": ^1.2.1 debug: ^4.1.1 minimatch: ^3.0.5 - checksum: cf506dc45d9488af7fbf108ea6ac2151ba1a25e6d2b94b9b4fc36d2c1e4099b89ff560296dbfa13947e44604d4ca4a90d97a4fb167370bf8dd01a6ca2b6d83ac + checksum: 0fd6b3c54f1674ce0a224df09b9c2f9846d20b9e54fabae1281ecfc04f2e6ad69bf19e1d6af6a28f88e8aa3990168b6cb9e1ef755868c3256a630605ec2cb1d3 languageName: node linkType: hard @@ -21670,11 +21670,11 @@ __metadata: linkType: hard "eslint@npm:^8.6.0": - version: 8.29.0 - resolution: "eslint@npm:8.29.0" + version: 8.30.0 + resolution: "eslint@npm:8.30.0" dependencies: - "@eslint/eslintrc": ^1.3.3 - "@humanwhocodes/config-array": ^0.11.6 + "@eslint/eslintrc": ^1.4.0 + "@humanwhocodes/config-array": ^0.11.8 "@humanwhocodes/module-importer": ^1.0.1 "@nodelib/fs.walk": ^1.2.8 ajv: ^6.10.0 @@ -21693,7 +21693,7 @@ __metadata: file-entry-cache: ^6.0.1 find-up: ^5.0.0 glob-parent: ^6.0.2 - globals: ^13.15.0 + globals: ^13.19.0 grapheme-splitter: ^1.0.4 ignore: ^5.2.0 import-fresh: ^3.0.0 @@ -21714,7 +21714,7 @@ __metadata: text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: e05204b05907b82d910983995cb946e0ba62ca514eb2b6791c43f623333b143564a2eee0139909d31c10935c21877d815b1f76dd674a59cb91c471064325c4ab + checksum: b7525bb465b342665c3b8bab7e114d514ef1bc4e79f211c919863f9c71767e7412ec82383a22614a92d159783f91101018817000f7c61ce69a5e7015280cafaf languageName: node linkType: hard @@ -23516,12 +23516,12 @@ __metadata: languageName: node linkType: hard -"globals@npm:^13.15.0": - version: 13.15.0 - resolution: "globals@npm:13.15.0" +"globals@npm:^13.19.0": + version: 13.19.0 + resolution: "globals@npm:13.19.0" dependencies: type-fest: ^0.20.2 - checksum: 383ade0873b2ab29ce6d143466c203ed960491575bc97406395e5c8434026fb02472ab2dfff5bc16689b8460269b18fda1047975295cd0183904385c51258bae + checksum: a000dbd00bcf28f0941d8a29c3522b1c3b8e4bfe4e60e262c477a550c3cbbe8dbe2925a6905f037acd40f9a93c039242e1f7079c76b0fd184bc41dcc3b5c8e2e languageName: node linkType: hard From 5157208d24b55fa10e70a9cd0809781c5f1ccfe1 Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 22 Dec 2022 12:24:06 +0100 Subject: [PATCH 80/99] chore: just build the backend Signed-off-by: blam --- .github/workflows/uffizzi-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index 25306e0f57..a170521ec9 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -41,7 +41,7 @@ jobs: - name: backstage build run: | - yarn build:all + yarn workspace backend build - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 From aa33a0689448a7e98185068f4c30aa7ecd0cc6d1 Mon Sep 17 00:00:00 2001 From: Eric Peterson Date: Thu, 22 Dec 2022 12:49:09 +0100 Subject: [PATCH 81/99] Optimize indexer throughput Signed-off-by: Eric Peterson --- .changeset/search-pressure-back.md | 5 +++++ .../engines/ElasticSearchSearchEngineIndexer.ts | 15 ++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 .changeset/search-pressure-back.md diff --git a/.changeset/search-pressure-back.md b/.changeset/search-pressure-back.md new file mode 100644 index 0000000000..3dd36456a7 --- /dev/null +++ b/.changeset/search-pressure-back.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend-module-elasticsearch': patch +--- + +Improved index throughput by optimizing when and how many documents were made available to the bulk client. diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts index 3f842976e5..d1534c53a7 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts @@ -45,7 +45,6 @@ function duration(startTimestamp: [number, number]): string { * @public */ export class ElasticSearchSearchEngineIndexer extends BatchSearchEngineIndexer { - private received: number = 0; private processed: number = 0; private removableIndices: string[] = []; @@ -59,11 +58,13 @@ export class ElasticSearchSearchEngineIndexer extends BatchSearchEngineIndexer { private readonly logger: Logger; private readonly sourceStream: Readable; private readonly elasticSearchClientWrapper: ElasticSearchClientWrapper; + private configuredBatchSize: number; private bulkResult: Promise; private bulkClientError?: Error; constructor(options: ElasticSearchSearchEngineIndexerOptions) { super({ batchSize: options.batchSize }); + this.configuredBatchSize = options.batchSize; this.logger = options.logger.child({ documentType: options.type }); this.startTimestamp = process.hrtime(); this.type = options.type; @@ -121,7 +122,6 @@ export class ElasticSearchSearchEngineIndexer extends BatchSearchEngineIndexer { async index(documents: IndexableDocument[]): Promise { await this.isReady(); documents.forEach(document => { - this.received++; this.sourceStream.push(document); }); } @@ -208,9 +208,18 @@ export class ElasticSearchSearchEngineIndexer extends BatchSearchEngineIndexer { return Promise.reject(this.bulkClientError); } + // Optimization: if the stream that ES reads from has fewer docs queued + // than the configured batch size, continue early to allow more docs to be + // queued + if (this.sourceStream.readableLength < this.configuredBatchSize) { + return Promise.resolve(); + } + + // Otherwise, continue periodically checking the stream queue to see if + // ES has consumed the documents and continue when it's ready for more. return new Promise(resolve => { const interval = setInterval(() => { - if (this.received === this.processed) { + if (this.sourceStream.readableLength < this.configuredBatchSize) { clearInterval(interval); resolve(); } From 71ec7585a81bd19ddb288cd341339087b9836e8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 22 Dec 2022 14:07:22 +0100 Subject: [PATCH 82/99] document the metadata.uid field MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .../software-catalog/descriptor-format.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/features/software-catalog/descriptor-format.md b/docs/features/software-catalog/descriptor-format.md index f0151d7618..383fd698f9 100644 --- a/docs/features/software-catalog/descriptor-format.md +++ b/docs/features/software-catalog/descriptor-format.md @@ -251,6 +251,23 @@ the entity belongs to the `"default"` namespace. Namespaces may also be part of the catalog, and are `v1` / `Namespace` entities, i.e. not Backstage specific but the same as in Kubernetes. +### `uid` [output] + +Each entity gets an automatically generated globally unique ID when it first +enters the database. This field is not meant to be specified as input data, but +is rater created by the database engine itself when producing the output entity. + +Note that `uid` values are _not_ to be seen as stable, and should _not_ be used +as external references to an entity. The `uid` can change over time even when a +human observer might think that it wouldn't. As one of many examples, +unregistering and re-registering the exact same file will result in a different +`uid` value even though everything else is the same. Therefore there is very +little, if any, reason to read or use this field externally. + +If you want to refer to an entity by some form of an identifier, you should +always use [string-form entity reference](references.md#string-references) +instead. + ### `title` [optional] A display name of the entity, to be presented in user interfaces instead of the From 1e1a9fe979802f96160e54e0b1bd1271dae156df Mon Sep 17 00:00:00 2001 From: Eric Peterson Date: Thu, 22 Dec 2022 14:09:49 +0100 Subject: [PATCH 83/99] Prevent the readiness check from looping endlessly Signed-off-by: Eric Peterson --- .changeset/search-break-loop.md | 5 +++++ .../ElasticSearchSearchEngineIndexer.ts | 20 +++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 .changeset/search-break-loop.md diff --git a/.changeset/search-break-loop.md b/.changeset/search-break-loop.md new file mode 100644 index 0000000000..ce65645900 --- /dev/null +++ b/.changeset/search-break-loop.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend-module-elasticsearch': patch +--- + +Fixed a bug that could cause an indexing process to silently fail, timeout, and accumulate stale indices. diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts index d1534c53a7..a9d15c421e 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts @@ -217,11 +217,27 @@ export class ElasticSearchSearchEngineIndexer extends BatchSearchEngineIndexer { // Otherwise, continue periodically checking the stream queue to see if // ES has consumed the documents and continue when it's ready for more. - return new Promise(resolve => { + return new Promise((isReady, abort) => { + let streamLengthChecks = 0; const interval = setInterval(() => { + streamLengthChecks++; + if (this.sourceStream.readableLength < this.configuredBatchSize) { clearInterval(interval); - resolve(); + isReady(); + } + + // Do not allow this interval to loop endlessly; anything longer than 5 + // minutes likely indicates an unrecoverable error in ES; direct the + // user to inspect ES logs for more clues and abort in order to allow + // the index to be cleaned up. + if (streamLengthChecks >= 6000) { + clearInterval(interval); + abort( + new Error( + 'Exceeded 5 minutes waiting for elastic to be ready to accept more documents. Check the elastic logs for possible problems.', + ), + ); } }, 50); }); From 9083673db8003db7e2bdae1d6182fbb0ea67c18f Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 10 Dec 2022 16:25:36 +0100 Subject: [PATCH 84/99] cli: slight lockfile lib refactor Signed-off-by: Patrik Oldsberg --- packages/cli/src/commands/versions/bump.ts | 2 +- .../cli/src/lib/versioning/Lockfile.test.ts | 4 +- packages/cli/src/lib/versioning/Lockfile.ts | 46 +++++++------------ 3 files changed, 20 insertions(+), 32 deletions(-) diff --git a/packages/cli/src/commands/versions/bump.ts b/packages/cli/src/commands/versions/bump.ts index 37eb858dcf..45b966a52d 100644 --- a/packages/cli/src/commands/versions/bump.ts +++ b/packages/cli/src/commands/versions/bump.ts @@ -201,7 +201,7 @@ export default async (opts: OptionValues) => { lockfile.remove(name, range); } } - await lockfile.save(); + await lockfile.save(lockfilePath); } const breakingUpdates = new Map(); diff --git a/packages/cli/src/lib/versioning/Lockfile.test.ts b/packages/cli/src/lib/versioning/Lockfile.test.ts index e663ec4a93..e2842b4c95 100644 --- a/packages/cli/src/lib/versioning/Lockfile.test.ts +++ b/packages/cli/src/lib/versioning/Lockfile.test.ts @@ -111,7 +111,7 @@ describe('Lockfile', () => { expect(lockfile.toString()).toBe(mockADedup); await expect(fs.readFile('/yarn.lock', 'utf8')).resolves.toBe(mockA); - await expect(lockfile.save()).resolves.toBeUndefined(); + await expect(lockfile.save('/yarn.lock')).resolves.toBeUndefined(); await expect(fs.readFile('/yarn.lock', 'utf8')).resolves.toBe(mockADedup); }); @@ -268,7 +268,7 @@ describe('New Lockfile', () => { expect(lockfile.toString()).toBe(mockANewDedup); await expect(fs.readFile('/yarn.lock', 'utf8')).resolves.toBe(mockANew); - await expect(lockfile.save()).resolves.toBeUndefined(); + await expect(lockfile.save('/yarn.lock')).resolves.toBeUndefined(); await expect(fs.readFile('/yarn.lock', 'utf8')).resolves.toBe( mockANewDedup, ); diff --git a/packages/cli/src/lib/versioning/Lockfile.ts b/packages/cli/src/lib/versioning/Lockfile.ts index 0559ca86a1..faafb465a4 100644 --- a/packages/cli/src/lib/versioning/Lockfile.ts +++ b/packages/cli/src/lib/versioning/Lockfile.ts @@ -65,20 +65,6 @@ type AnalyzeResult = { newRanges: AnalyzeResultNewRange[]; }; -function parseLockfile(lockfileContents: string) { - try { - return { - object: parseSyml(lockfileContents), - type: 'success', - }; - } catch (err) { - return { - object: null, - type: err, - }; - } -} - // the new yarn header is handled out of band of the parsing // https://github.com/yarnpkg/berry/blob/0c5974f193a9397630e9aee2b3876cca62611149/packages/yarnpkg-core/sources/Project.ts#L1741-L1746 const NEW_HEADER = `${[ @@ -86,11 +72,6 @@ const NEW_HEADER = `${[ `# Manual changes might be lost - proceed with caution!\n`, ].join(``)}\n`; -function stringifyLockfile(data: LockfileData, legacy: boolean) { - return legacy - ? legacyStringifyLockfile(data) - : NEW_HEADER + stringifySyml(data); -} // taken from yarn parser package // https://github.com/yarnpkg/berry/blob/0c5974f193a9397630e9aee2b3876cca62611149/packages/yarnpkg-parsers/sources/syml.ts#L136 const LEGACY_REGEX = /^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i; @@ -111,13 +92,19 @@ const SPECIAL_OBJECT_KEYS = [ export class Lockfile { static async load(path: string) { const lockfileContents = await fs.readFile(path, 'utf8'); - const legacy = LEGACY_REGEX.test(lockfileContents); - const lockfile = parseLockfile(lockfileContents); - if (lockfile.type !== 'success') { - throw new Error(`Failed yarn.lock parse with ${lockfile.type}`); + return Lockfile.parse(lockfileContents); + } + + static parse(content: string) { + const legacy = LEGACY_REGEX.test(content); + + let data: LockfileData; + try { + data = parseSyml(content); + } catch (err) { + throw new Error(`Failed yarn.lock parse, ${err}`); } - const data = lockfile.object as LockfileData; const packages = new Map(); for (const [key, value] of Object.entries(data)) { @@ -144,11 +131,10 @@ export class Lockfile { } } - return new Lockfile(path, packages, data, legacy); + return new Lockfile(packages, data, legacy); } private constructor( - private readonly path: string, private readonly packages: Map, private readonly data: LockfileData, private readonly legacy: boolean = false, @@ -340,11 +326,13 @@ export class Lockfile { } } - async save() { - await fs.writeFile(this.path, this.toString(), 'utf8'); + async save(path: string) { + await fs.writeFile(path, this.toString(), 'utf8'); } toString() { - return stringifyLockfile(this.data, this.legacy); + return this.legacy + ? legacyStringifyLockfile(this.data) + : NEW_HEADER + stringifySyml(this.data); } } From d2ad8ca3af5fc6d4f8c5306e76c0bb930841d4c2 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 12 Dec 2022 18:56:56 +0100 Subject: [PATCH 85/99] cli: add Lockfile.diff Signed-off-by: Patrik Oldsberg --- .../cli/src/lib/versioning/Lockfile.test.ts | 236 +++++++++++++++++- packages/cli/src/lib/versioning/Lockfile.ts | 61 ++++- 2 files changed, 288 insertions(+), 9 deletions(-) diff --git a/packages/cli/src/lib/versioning/Lockfile.test.ts b/packages/cli/src/lib/versioning/Lockfile.test.ts index e2842b4c95..8209ef1f23 100644 --- a/packages/cli/src/lib/versioning/Lockfile.test.ts +++ b/packages/cli/src/lib/versioning/Lockfile.test.ts @@ -78,10 +78,12 @@ describe('Lockfile', () => { }); const lockfile = await Lockfile.load('/yarn.lock'); - expect(lockfile.get('a')).toEqual([{ range: '^1', version: '1.0.1' }]); + expect(lockfile.get('a')).toEqual([ + { range: '^1', version: '1.0.1', dataKey: 'a@^1' }, + ]); expect(lockfile.get('b')).toEqual([ - { range: '2.0.x', version: '2.0.1' }, - { range: '^2', version: '2.0.0' }, + { range: '2.0.x', version: '2.0.1', dataKey: 'b@2.0.x' }, + { range: '^2', version: '2.0.0', dataKey: 'b@^2' }, ]); expect(lockfile.toString()).toBe(mockA); }); @@ -234,11 +236,13 @@ describe('New Lockfile', () => { }); const lockfile = await Lockfile.load('/yarn.lock'); - expect(lockfile.get('a')).toEqual([{ range: '^1', version: '1.0.1' }]); + expect(lockfile.get('a')).toEqual([ + { range: '^1', version: '1.0.1', dataKey: 'a@^1' }, + ]); expect(lockfile.get('b')).toEqual([ - { range: '2.0.x', version: '2.0.1' }, - { range: '^2.0.1', version: '2.0.1' }, - { range: '^2', version: '2.0.0' }, + { range: '2.0.x', version: '2.0.1', dataKey: 'b@2.0.x, b@^2.0.1' }, + { range: '^2.0.1', version: '2.0.1', dataKey: 'b@2.0.x, b@^2.0.1' }, + { range: '^2', version: '2.0.0', dataKey: 'b@^2' }, ]); expect(lockfile.toString()).toBe(mockANew); }); @@ -315,4 +319,222 @@ describe('New Lockfile', () => { mockANewLocalDedup, ); }); + + describe('diff', () => { + const lockfileLegacyA = Lockfile.parse(`${HEADER} +a@^1: + version "1.0.1" + resolved "https://my-registry/a-1.0.01.tgz#abc123" + integrity sha512-xyz + dependencies: + b "^2" + +b@3: + version "3.0.1" + integrity sha512-abc1 + +b@2.0.x: + version "2.0.1" + integrity sha512-abc2 + +b@^2: + version "2.0.0" + integrity sha512-abc3 + +c@^1: + version "1.0.1" + integrity x +`); + + const lockfileLegacyB = Lockfile.parse(`${HEADER} +a@^1: + version "1.0.1" + resolved "https://my-registry/a-1.0.01.tgz#abc123" + integrity sha512-xyz-other + dependencies: + b "^2" + +b@2.0.x, b@^2: + version "2.0.0" + integrity sha512-abc3 + +b@4: + version "4.0.0" + integrity sha512-abc + +d@^1: + version "1.0.1" + integrity x +`); + + const lockfileModernA = Lockfile.parse(`${HEADER} +"a@^1": + version "1.0.1" + resolved "https://my-registry/a-1.0.01.tgz#abc123" + checksum sha512-xyz + dependencies: + b "^2" + +"b@3": + version "3.0.1" + checksum sha512-abc1 + +"b@2.0.x": + version "2.0.1" + checksum sha512-abc2 + +"b@^2": + version "2.0.0" + checksum sha512-abc3 + +"c@^1": + version "1.0.1" + checksum x +`); + + const lockfileModernB = Lockfile.parse(`${HEADER} +"a@^1": + version "1.0.1" + resolution "a@npm:1.0.1" + checksum sha512-xyz-other + dependencies: + b "^2" + +"b@2.0.x, b@^2": + version "2.0.0" + checksum sha512-abc3 + +"b@4": + version "4.0.0" + checksum sha512-abc + +"d@^1": + version "1.0.1" + checksum x +`); + + it('should diff two legacy lockfiles', async () => { + expect(lockfileLegacyA.diff(lockfileLegacyB)).toEqual({ + added: [ + { name: 'b', range: '4' }, + { name: 'd', range: '^1' }, + ], + changed: [ + { name: 'a', range: '^1' }, + { name: 'b', range: '2.0.x' }, + ], + removed: [ + { name: 'b', range: '3' }, + { name: 'c', range: '^1' }, + ], + }); + expect(lockfileLegacyB.diff(lockfileLegacyA)).toEqual({ + added: [ + { name: 'b', range: '3' }, + { name: 'c', range: '^1' }, + ], + changed: [ + { name: 'a', range: '^1' }, + { name: 'b', range: '2.0.x' }, + ], + removed: [ + { name: 'b', range: '4' }, + { name: 'd', range: '^1' }, + ], + }); + }); + + it('should diff two modern lockfiles', async () => { + expect(lockfileModernA.diff(lockfileModernB)).toEqual({ + added: [ + { name: 'b', range: '4' }, + { name: 'd', range: '^1' }, + ], + changed: [ + { name: 'a', range: '^1' }, + { name: 'b', range: '2.0.x' }, + ], + removed: [ + { name: 'b', range: '3' }, + { name: 'c', range: '^1' }, + ], + }); + expect(lockfileModernB.diff(lockfileModernA)).toEqual({ + added: [ + { name: 'b', range: '3' }, + { name: 'c', range: '^1' }, + ], + changed: [ + { name: 'a', range: '^1' }, + { name: 'b', range: '2.0.x' }, + ], + removed: [ + { name: 'b', range: '4' }, + { name: 'd', range: '^1' }, + ], + }); + }); + + it('should diff legacy and modern lockfiles', async () => { + expect(lockfileLegacyA.diff(lockfileModernB)).toEqual({ + added: [ + { name: 'b', range: '4' }, + { name: 'd', range: '^1' }, + ], + changed: [ + { name: 'a', range: '^1' }, + { name: 'b', range: '2.0.x' }, + ], + removed: [ + { name: 'b', range: '3' }, + { name: 'c', range: '^1' }, + ], + }); + expect(lockfileLegacyB.diff(lockfileModernA)).toEqual({ + added: [ + { name: 'b', range: '3' }, + { name: 'c', range: '^1' }, + ], + changed: [ + { name: 'a', range: '^1' }, + { name: 'b', range: '2.0.x' }, + ], + removed: [ + { name: 'b', range: '4' }, + { name: 'd', range: '^1' }, + ], + }); + }); + + it('should diff modern and legacy lockfiles', async () => { + expect(lockfileModernA.diff(lockfileLegacyB)).toEqual({ + added: [ + { name: 'b', range: '4' }, + { name: 'd', range: '^1' }, + ], + changed: [ + { name: 'a', range: '^1' }, + { name: 'b', range: '2.0.x' }, + ], + removed: [ + { name: 'b', range: '3' }, + { name: 'c', range: '^1' }, + ], + }); + expect(lockfileModernB.diff(lockfileLegacyA)).toEqual({ + added: [ + { name: 'b', range: '3' }, + { name: 'c', range: '^1' }, + ], + changed: [ + { name: 'a', range: '^1' }, + { name: 'b', range: '2.0.x' }, + ], + removed: [ + { name: 'b', range: '4' }, + { name: 'd', range: '^1' }, + ], + }); + }); + }); }); diff --git a/packages/cli/src/lib/versioning/Lockfile.ts b/packages/cli/src/lib/versioning/Lockfile.ts index faafb465a4..d156c9498d 100644 --- a/packages/cli/src/lib/versioning/Lockfile.ts +++ b/packages/cli/src/lib/versioning/Lockfile.ts @@ -26,7 +26,8 @@ type LockfileData = { [entry: string]: { version: string; resolved?: string; - integrity?: string; + integrity?: string /* old */; + checksum?: string /* new */; dependencies?: { [name: string]: string }; }; }; @@ -34,6 +35,7 @@ type LockfileData = { type LockfileQueryEntry = { range: string; version: string; + dataKey: string; }; /** Entries that have an invalid version range, for example an npm tag */ @@ -127,7 +129,7 @@ export class Lockfile { if (range.startsWith('npm:')) { range = range.slice('npm:'.length); } - queries.push({ range, version: value.version }); + queries.push({ range, version: value.version, dataKey: key }); } } @@ -326,6 +328,61 @@ export class Lockfile { } } + diff(newLockfile: Lockfile) { + const diff = { + added: new Array<{ name: string; range: string }>(), + removed: new Array<{ name: string; range: string }>(), + changed: new Array<{ name: string; range: string }>(), + }; + + // Keeps track of packages that only exist in the old lockfile + const remainingOldNames = new Set(this.packages.keys()); + + for (const [name, newQueries] of newLockfile.packages) { + remainingOldNames.delete(name); + + const oldQueries = this.packages.get(name); + // If the packages doesn't exist in the old lockfile, add all entries + if (!oldQueries) { + diff.added.push(...newQueries.map(q => ({ name, range: q.range }))); + continue; + } + + const remainingOldRanges = new Set(oldQueries.map(q => q.range)); + + for (const newQuery of newQueries) { + remainingOldRanges.delete(newQuery.range); + + const oldQuery = oldQueries.find(q => q.range === newQuery.range); + if (!oldQuery) { + diff.added.push({ name, range: newQuery.range }); + continue; + } + + const newPkg = newLockfile.data[newQuery.dataKey]; + const oldPkg = this.data[oldQuery.dataKey]; + if (newPkg && oldPkg) { + const oldCheck = oldPkg.integrity || oldPkg.checksum; + const newCheck = newPkg.integrity || newPkg.checksum; + if (!oldCheck || !newCheck || oldCheck !== newCheck) { + diff.changed.push({ name, range: newQuery.range }); + } + } + } + + for (const oldRange of remainingOldRanges) { + diff.removed.push({ name, range: oldRange }); + } + } + + for (const name of remainingOldNames) { + const queries = this.packages.get(name) ?? []; + diff.removed.push(...queries.map(q => ({ name, range: q.range }))); + } + + return diff; + } + async save(path: string) { await fs.writeFile(path, this.toString(), 'utf8'); } From 60196dc40fcc115a65aa98f4bc4038d23262792d Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 13 Dec 2022 22:10:51 +0100 Subject: [PATCH 86/99] cli: flip around lockfile diff Signed-off-by: Patrik Oldsberg --- .../cli/src/lib/versioning/Lockfile.test.ts | 64 +++++++++---------- packages/cli/src/lib/versioning/Lockfile.ts | 63 +++++++++++------- 2 files changed, 71 insertions(+), 56 deletions(-) diff --git a/packages/cli/src/lib/versioning/Lockfile.test.ts b/packages/cli/src/lib/versioning/Lockfile.test.ts index 8209ef1f23..b65d2c0fbe 100644 --- a/packages/cli/src/lib/versioning/Lockfile.test.ts +++ b/packages/cli/src/lib/versioning/Lockfile.test.ts @@ -416,30 +416,30 @@ d@^1: it('should diff two legacy lockfiles', async () => { expect(lockfileLegacyA.diff(lockfileLegacyB)).toEqual({ added: [ - { name: 'b', range: '4' }, - { name: 'd', range: '^1' }, + { name: 'b', range: '3' }, + { name: 'c', range: '^1' }, ], changed: [ { name: 'a', range: '^1' }, { name: 'b', range: '2.0.x' }, ], removed: [ - { name: 'b', range: '3' }, - { name: 'c', range: '^1' }, + { name: 'b', range: '4' }, + { name: 'd', range: '^1' }, ], }); expect(lockfileLegacyB.diff(lockfileLegacyA)).toEqual({ added: [ - { name: 'b', range: '3' }, - { name: 'c', range: '^1' }, + { name: 'b', range: '4' }, + { name: 'd', range: '^1' }, ], changed: [ { name: 'a', range: '^1' }, { name: 'b', range: '2.0.x' }, ], removed: [ - { name: 'b', range: '4' }, - { name: 'd', range: '^1' }, + { name: 'b', range: '3' }, + { name: 'c', range: '^1' }, ], }); }); @@ -447,30 +447,30 @@ d@^1: it('should diff two modern lockfiles', async () => { expect(lockfileModernA.diff(lockfileModernB)).toEqual({ added: [ - { name: 'b', range: '4' }, - { name: 'd', range: '^1' }, + { name: 'b', range: '3' }, + { name: 'c', range: '^1' }, ], changed: [ { name: 'a', range: '^1' }, { name: 'b', range: '2.0.x' }, ], removed: [ - { name: 'b', range: '3' }, - { name: 'c', range: '^1' }, + { name: 'b', range: '4' }, + { name: 'd', range: '^1' }, ], }); expect(lockfileModernB.diff(lockfileModernA)).toEqual({ added: [ - { name: 'b', range: '3' }, - { name: 'c', range: '^1' }, + { name: 'b', range: '4' }, + { name: 'd', range: '^1' }, ], changed: [ { name: 'a', range: '^1' }, { name: 'b', range: '2.0.x' }, ], removed: [ - { name: 'b', range: '4' }, - { name: 'd', range: '^1' }, + { name: 'b', range: '3' }, + { name: 'c', range: '^1' }, ], }); }); @@ -478,30 +478,30 @@ d@^1: it('should diff legacy and modern lockfiles', async () => { expect(lockfileLegacyA.diff(lockfileModernB)).toEqual({ added: [ - { name: 'b', range: '4' }, - { name: 'd', range: '^1' }, + { name: 'b', range: '3' }, + { name: 'c', range: '^1' }, ], changed: [ { name: 'a', range: '^1' }, { name: 'b', range: '2.0.x' }, ], removed: [ - { name: 'b', range: '3' }, - { name: 'c', range: '^1' }, + { name: 'b', range: '4' }, + { name: 'd', range: '^1' }, ], }); expect(lockfileLegacyB.diff(lockfileModernA)).toEqual({ added: [ - { name: 'b', range: '3' }, - { name: 'c', range: '^1' }, + { name: 'b', range: '4' }, + { name: 'd', range: '^1' }, ], changed: [ { name: 'a', range: '^1' }, { name: 'b', range: '2.0.x' }, ], removed: [ - { name: 'b', range: '4' }, - { name: 'd', range: '^1' }, + { name: 'b', range: '3' }, + { name: 'c', range: '^1' }, ], }); }); @@ -509,30 +509,30 @@ d@^1: it('should diff modern and legacy lockfiles', async () => { expect(lockfileModernA.diff(lockfileLegacyB)).toEqual({ added: [ - { name: 'b', range: '4' }, - { name: 'd', range: '^1' }, + { name: 'b', range: '3' }, + { name: 'c', range: '^1' }, ], changed: [ { name: 'a', range: '^1' }, { name: 'b', range: '2.0.x' }, ], removed: [ - { name: 'b', range: '3' }, - { name: 'c', range: '^1' }, + { name: 'b', range: '4' }, + { name: 'd', range: '^1' }, ], }); expect(lockfileModernB.diff(lockfileLegacyA)).toEqual({ added: [ - { name: 'b', range: '3' }, - { name: 'c', range: '^1' }, + { name: 'b', range: '4' }, + { name: 'd', range: '^1' }, ], changed: [ { name: 'a', range: '^1' }, { name: 'b', range: '2.0.x' }, ], removed: [ - { name: 'b', range: '4' }, - { name: 'd', range: '^1' }, + { name: 'b', range: '3' }, + { name: 'c', range: '^1' }, ], }); }); diff --git a/packages/cli/src/lib/versioning/Lockfile.ts b/packages/cli/src/lib/versioning/Lockfile.ts index d156c9498d..8f4bd6af19 100644 --- a/packages/cli/src/lib/versioning/Lockfile.ts +++ b/packages/cli/src/lib/versioning/Lockfile.ts @@ -38,6 +38,17 @@ type LockfileQueryEntry = { dataKey: string; }; +type LockfileDiffEntry = { + name: string; + range: string; +}; + +type LockfileDiff = { + added: LockfileDiffEntry[]; + changed: LockfileDiffEntry[]; + removed: LockfileDiffEntry[]; +}; + /** Entries that have an invalid version range, for example an npm tag */ type AnalyzeResultInvalidRange = { name: string; @@ -328,56 +339,60 @@ export class Lockfile { } } - diff(newLockfile: Lockfile) { + /** + * Diff with another lockfile, returning entries that have been + * added, changed, and removed compared to the other lockfile. + */ + diff(otherLockfile: Lockfile): LockfileDiff { const diff = { added: new Array<{ name: string; range: string }>(), - removed: new Array<{ name: string; range: string }>(), changed: new Array<{ name: string; range: string }>(), + removed: new Array<{ name: string; range: string }>(), }; - // Keeps track of packages that only exist in the old lockfile + // Keeps track of packages that only exist in this lockfile const remainingOldNames = new Set(this.packages.keys()); - for (const [name, newQueries] of newLockfile.packages) { + for (const [name, otherQueries] of otherLockfile.packages) { remainingOldNames.delete(name); - const oldQueries = this.packages.get(name); - // If the packages doesn't exist in the old lockfile, add all entries - if (!oldQueries) { - diff.added.push(...newQueries.map(q => ({ name, range: q.range }))); + const thisQueries = this.packages.get(name); + // If the packages doesn't exist in this lockfile, add all entries + if (!thisQueries) { + diff.removed.push(...otherQueries.map(q => ({ name, range: q.range }))); continue; } - const remainingOldRanges = new Set(oldQueries.map(q => q.range)); + const remainingOldRanges = new Set(thisQueries.map(q => q.range)); - for (const newQuery of newQueries) { - remainingOldRanges.delete(newQuery.range); + for (const otherQuery of otherQueries) { + remainingOldRanges.delete(otherQuery.range); - const oldQuery = oldQueries.find(q => q.range === newQuery.range); - if (!oldQuery) { - diff.added.push({ name, range: newQuery.range }); + const thisQuery = thisQueries.find(q => q.range === otherQuery.range); + if (!thisQuery) { + diff.removed.push({ name, range: otherQuery.range }); continue; } - const newPkg = newLockfile.data[newQuery.dataKey]; - const oldPkg = this.data[oldQuery.dataKey]; - if (newPkg && oldPkg) { - const oldCheck = oldPkg.integrity || oldPkg.checksum; - const newCheck = newPkg.integrity || newPkg.checksum; - if (!oldCheck || !newCheck || oldCheck !== newCheck) { - diff.changed.push({ name, range: newQuery.range }); + const otherPkg = otherLockfile.data[otherQuery.dataKey]; + const thisPkg = this.data[thisQuery.dataKey]; + if (otherPkg && thisPkg) { + const thisCheck = thisPkg.integrity || thisPkg.checksum; + const otherCheck = otherPkg.integrity || otherPkg.checksum; + if (!thisCheck || !otherCheck || thisCheck !== otherCheck) { + diff.changed.push({ name, range: otherQuery.range }); } } } - for (const oldRange of remainingOldRanges) { - diff.removed.push({ name, range: oldRange }); + for (const thisRange of remainingOldRanges) { + diff.added.push({ name, range: thisRange }); } } for (const name of remainingOldNames) { const queries = this.packages.get(name) ?? []; - diff.removed.push(...queries.map(q => ({ name, range: q.range }))); + diff.added.push(...queries.map(q => ({ name, range: q.range }))); } return diff; From 3c71bf7789e198370028c575aa08ae1e03661ad3 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 13 Dec 2022 22:26:32 +0100 Subject: [PATCH 87/99] cli: fix lockfile diff for entries without checksum Signed-off-by: Patrik Oldsberg --- .../cli/src/lib/versioning/Lockfile.test.ts | 49 +++++++++++++++++++ packages/cli/src/lib/versioning/Lockfile.ts | 2 +- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/lib/versioning/Lockfile.test.ts b/packages/cli/src/lib/versioning/Lockfile.test.ts index b65d2c0fbe..7b0da9ce8c 100644 --- a/packages/cli/src/lib/versioning/Lockfile.test.ts +++ b/packages/cli/src/lib/versioning/Lockfile.test.ts @@ -536,5 +536,54 @@ d@^1: ], }); }); + + it('should handle workspace ranges', async () => { + const lockfile = `${HEADER} +"@backstage/app-defaults@workspace:^, @backstage/app-defaults@workspace:packages/app-defaults": + version: 0.0.0-use.local + resolution: "@backstage/app-defaults@workspace:packages/app-defaults" + dependencies: + "@backstage/cli": "workspace:^" + "@backstage/core-app-api": "workspace:^" + "@backstage/core-components": "workspace:^" + "@backstage/core-plugin-api": "workspace:^" + "@backstage/plugin-permission-react": "workspace:^" + "@backstage/test-utils": "workspace:^" + "@backstage/theme": "workspace:^" + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@testing-library/jest-dom": ^5.10.1 + "@testing-library/react": ^12.1.3 + "@types/node": ^16.11.26 + "@types/react": ^16.13.1 || ^17.0.0 + peerDependencies: + react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + languageName: unknown + linkType: soft + +"@backstage/backend-app-api@workspace:^, @backstage/backend-app-api@workspace:packages/backend-app-api": + version: 0.0.0-use.local + resolution: "@backstage/backend-app-api@workspace:packages/backend-app-api" + dependencies: + "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" + "@backstage/backend-tasks": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/errors": "workspace:^" + "@backstage/plugin-permission-node": "workspace:^" + express: ^4.17.1 + express-promise-router: ^4.1.0 + winston: ^3.2.1 + languageName: unknown + linkType: soft +`; + expect(Lockfile.parse(lockfile).diff(Lockfile.parse(lockfile))).toEqual({ + added: [], + changed: [], + removed: [], + }); + }); }); }); diff --git a/packages/cli/src/lib/versioning/Lockfile.ts b/packages/cli/src/lib/versioning/Lockfile.ts index 8f4bd6af19..622aac36ae 100644 --- a/packages/cli/src/lib/versioning/Lockfile.ts +++ b/packages/cli/src/lib/versioning/Lockfile.ts @@ -379,7 +379,7 @@ export class Lockfile { if (otherPkg && thisPkg) { const thisCheck = thisPkg.integrity || thisPkg.checksum; const otherCheck = otherPkg.integrity || otherPkg.checksum; - if (!thisCheck || !otherCheck || thisCheck !== otherCheck) { + if (thisCheck !== otherCheck) { diff.changed.push({ name, range: otherQuery.range }); } } From 18543ed94b1caa5194839c63e2fe52f72068877e Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 13 Dec 2022 23:21:36 +0100 Subject: [PATCH 88/99] cli: fix lockfile test formats Signed-off-by: Patrik Oldsberg --- .../cli/src/lib/versioning/Lockfile.test.ts | 102 +++++++++--------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/packages/cli/src/lib/versioning/Lockfile.test.ts b/packages/cli/src/lib/versioning/Lockfile.test.ts index 7b0da9ce8c..30c6f6ffee 100644 --- a/packages/cli/src/lib/versioning/Lockfile.test.ts +++ b/packages/cli/src/lib/versioning/Lockfile.test.ts @@ -19,12 +19,20 @@ import mockFs from 'mock-fs'; import { ExtendedPackage } from '../monorepo'; import { Lockfile } from './Lockfile'; -const HEADER = `# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +const LEGACY_HEADER = `# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 `; -const mockA = `${HEADER} +const MODERN_HEADER = `# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 +`; + +const mockA = `${LEGACY_HEADER} a@^1: version "1.0.1" resolved "https://my-registry/a-1.0.01.tgz#abc123" @@ -39,7 +47,7 @@ b@^2: version "2.0.0" `; -const mockADedup = `${HEADER} +const mockADedup = `${LEGACY_HEADER} a@^1: version "1.0.1" resolved "https://my-registry/a-1.0.01.tgz#abc123" @@ -51,7 +59,7 @@ b@2.0.x, b@^2: version "2.0.1" `; -const mockB = `${HEADER} +const mockB = `${LEGACY_HEADER} "@s/a@*", "@s/a@1 || 2", "@s/a@^1": version "1.0.1" @@ -59,7 +67,7 @@ const mockB = `${HEADER} version "2.0.0" `; -const mockBDedup = `${HEADER} +const mockBDedup = `${LEGACY_HEADER} "@s/a@*", "@s/a@1 || 2", "@s/a@^2.0.x": version "2.0.0" @@ -157,15 +165,7 @@ describe('Lockfile', () => { }); }); -const newHeader = `# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 6 - cacheKey: 8 -`; - -const mockANew = `${newHeader} +const mockANew = `${MODERN_HEADER} a@^1: version: 1.0.1 dependencies: @@ -180,7 +180,7 @@ b@^2: version: 2.0.0 `; -const mockANewDedup = `${newHeader} +const mockANewDedup = `${MODERN_HEADER} a@^1: version: 1.0.1 dependencies: @@ -321,7 +321,7 @@ describe('New Lockfile', () => { }); describe('diff', () => { - const lockfileLegacyA = Lockfile.parse(`${HEADER} + const lockfileLegacyA = Lockfile.parse(`${LEGACY_HEADER} a@^1: version "1.0.1" resolved "https://my-registry/a-1.0.01.tgz#abc123" @@ -346,7 +346,7 @@ c@^1: integrity x `); - const lockfileLegacyB = Lockfile.parse(`${HEADER} + const lockfileLegacyB = Lockfile.parse(`${LEGACY_HEADER} a@^1: version "1.0.1" resolved "https://my-registry/a-1.0.01.tgz#abc123" @@ -367,50 +367,50 @@ d@^1: integrity x `); - const lockfileModernA = Lockfile.parse(`${HEADER} -"a@^1": - version "1.0.1" - resolved "https://my-registry/a-1.0.01.tgz#abc123" - checksum sha512-xyz + const lockfileModernA = Lockfile.parse(`${MODERN_HEADER} +"a@npm:^1": + version: "1.0.1" + resolved: "https://my-registry/a-1.0.01.tgz#abc123" + checksum: sha512-xyz dependencies: - b "^2" + b: "^2" -"b@3": - version "3.0.1" - checksum sha512-abc1 +"b@npm:3": + version: "3.0.1" + checksum: sha512-abc1 -"b@2.0.x": - version "2.0.1" - checksum sha512-abc2 +"b@npm:2.0.x": + version: "2.0.1" + checksum: sha512-abc2 -"b@^2": - version "2.0.0" - checksum sha512-abc3 +"b@npm:^2": + version: "2.0.0" + checksum: sha512-abc3 -"c@^1": - version "1.0.1" - checksum x +"c@npm:^1": + version: "1.0.1" + checksum: x `); - const lockfileModernB = Lockfile.parse(`${HEADER} -"a@^1": - version "1.0.1" - resolution "a@npm:1.0.1" - checksum sha512-xyz-other + const lockfileModernB = Lockfile.parse(`${MODERN_HEADER} +"a@npm:^1": + version: "1.0.1" + resolution: "a@npm:1.0.1" + checksum: sha512-xyz-other dependencies: - b "^2" + b: "^2" -"b@2.0.x, b@^2": - version "2.0.0" - checksum sha512-abc3 +"b@npm:2.0.x, b@npm:^2": + version: "2.0.0" + checksum: sha512-abc3 -"b@4": - version "4.0.0" - checksum sha512-abc +"b@npm:4": + version: "4.0.0" + checksum: sha512-abc -"d@^1": - version "1.0.1" - checksum x +"d@npm:^1": + version: "1.0.1" + checksum: x `); it('should diff two legacy lockfiles', async () => { @@ -538,7 +538,7 @@ d@^1: }); it('should handle workspace ranges', async () => { - const lockfile = `${HEADER} + const lockfile = `${MODERN_HEADER} "@backstage/app-defaults@workspace:^, @backstage/app-defaults@workspace:packages/app-defaults": version: 0.0.0-use.local resolution: "@backstage/app-defaults@workspace:packages/app-defaults" From 99898258cd30e5dfa0ab2311cfc247cb35ce5756 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 13 Dec 2022 23:21:53 +0100 Subject: [PATCH 89/99] cli: add simple dependency graph utility for lockfiles Signed-off-by: Patrik Oldsberg --- .../cli/src/lib/versioning/Lockfile.test.ts | 197 ++++++++++++++++++ packages/cli/src/lib/versioning/Lockfile.ts | 20 ++ 2 files changed, 217 insertions(+) diff --git a/packages/cli/src/lib/versioning/Lockfile.test.ts b/packages/cli/src/lib/versioning/Lockfile.test.ts index 30c6f6ffee..a60b71be85 100644 --- a/packages/cli/src/lib/versioning/Lockfile.test.ts +++ b/packages/cli/src/lib/versioning/Lockfile.test.ts @@ -586,4 +586,201 @@ d@^1: }); }); }); + + describe('createSimplifiedDependencyGraph', () => { + it('for modern lockfile', () => { + expect( + Lockfile.parse( + `${MODERN_HEADER} +"@backstage/app-defaults@workspace:^, @backstage/app-defaults@workspace:packages/app-defaults": + version: 0.0.0-use.local + resolution: "@backstage/app-defaults@workspace:packages/app-defaults" + dependencies: + "@backstage/cli": "workspace:^" + "@backstage/core-app-api": "workspace:^" + "@backstage/core-components": "workspace:^" + "@backstage/core-plugin-api": "workspace:^" + "@backstage/plugin-permission-react": "workspace:^" + "@backstage/test-utils": "workspace:^" + "@backstage/theme": "workspace:^" + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@testing-library/jest-dom": ^5.10.1 + "@testing-library/react": ^12.1.3 + "@types/node": ^16.11.26 + "@types/react": ^16.13.1 || ^17.0.0 + peerDependencies: + react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + languageName: unknown + linkType: soft + +"@backstage/backend-app-api@workspace:^, @backstage/backend-app-api@workspace:packages/backend-app-api": + version: 0.0.0-use.local + resolution: "@backstage/backend-app-api@workspace:packages/backend-app-api" + dependencies: + "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" + "@backstage/backend-tasks": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/errors": "workspace:^" + "@backstage/plugin-permission-node": "workspace:^" + express: ^4.17.1 + express-promise-router: ^4.1.0 + winston: ^3.2.1 + languageName: unknown + linkType: soft +`, + ).createSimplifiedDependencyGraph(), + ).toEqual( + new Map([ + [ + '@backstage/app-defaults', + new Set([ + '@backstage/cli', + '@backstage/core-app-api', + '@backstage/core-components', + '@backstage/core-plugin-api', + '@backstage/plugin-permission-react', + '@backstage/test-utils', + '@backstage/theme', + '@material-ui/core', + '@material-ui/icons', + '@testing-library/jest-dom', + '@testing-library/react', + '@types/node', + '@types/react', + 'react', + 'react-dom', + 'react-router-dom', + ]), + ], + [ + '@backstage/backend-app-api', + new Set([ + '@backstage/backend-common', + '@backstage/backend-plugin-api', + '@backstage/backend-tasks', + '@backstage/cli', + '@backstage/errors', + '@backstage/plugin-permission-node', + 'express', + 'express-promise-router', + 'winston', + ]), + ], + ]), + ); + }); + + it('for simple lockfile without dependencies', () => { + expect( + Lockfile.parse( + `${MODERN_HEADER} +"a@npm:^1": + version: "1.0.1" + +"b@npm:3": + version: "3.0.1" + +"b@npm:2.0.x": + version: "2.0.1" + checksum: sha512-abc2 +`, + ).createSimplifiedDependencyGraph(), + ).toEqual( + new Map([ + ['a', new Set()], + ['b', new Set()], + ]), + ); + }); + + it('for lockfile with dependencies', () => { + expect( + Lockfile.parse( + `${MODERN_HEADER} +"a@npm:^1": + version: "1.0.1" + dependencies: + b: "^2" + +"b@npm:3": + version: "3.0.1" + checksum: sha512-abc1 + +"b@npm:2.0.x": + version: "2.0.1" + checksum: sha512-abc2 + dependencies: + c: "^1" + +"b@npm:^2": + version: "2.0.0" + checksum: sha512-abc3 + peerDependencies: + d: "^1" + +"c@npm:^1": + version: "1.0.1" + +"d@npm:^1": + version: "1.0.2" +`, + ).createSimplifiedDependencyGraph(), + ).toEqual( + new Map([ + ['a', new Set(['b'])], + ['b', new Set(['c', 'd'])], + ['c', new Set()], + ['d', new Set()], + ]), + ); + }); + + it('for legacy lockfile', () => { + expect( + Lockfile.parse( + `${LEGACY_HEADER} +a@^1: + version "1.0.1" + dependencies: + b "^2" + +b@3: + version "3.0.1" + integrity sha512-abc1 + +b@2.0.x: + version "2.0.1" + integrity sha512-abc2 + dependencies: + c "^1" + +b@^2: + version "2.0.0" + integrity sha512-abc3 + dependencies: + d "^1" + +c@^1: + version "1.0.1" + integrity x + +d@^1: + version "1.0.1" + integrity x +`, + ).createSimplifiedDependencyGraph(), + ).toEqual( + new Map([ + ['a', new Set(['b'])], + ['b', new Set(['c', 'd'])], + ['c', new Set()], + ['d', new Set()], + ]), + ); + }); + }); }); diff --git a/packages/cli/src/lib/versioning/Lockfile.ts b/packages/cli/src/lib/versioning/Lockfile.ts index 622aac36ae..4eadaf55f9 100644 --- a/packages/cli/src/lib/versioning/Lockfile.ts +++ b/packages/cli/src/lib/versioning/Lockfile.ts @@ -29,6 +29,7 @@ type LockfileData = { integrity?: string /* old */; checksum?: string /* new */; dependencies?: { [name: string]: string }; + peerDependencies?: { [name: string]: string }; }; }; @@ -339,6 +340,25 @@ export class Lockfile { } } + createSimplifiedDependencyGraph(): Map> { + const graph = new Map>(); + + for (const [name, entries] of this.packages) { + const dependencies = new Set( + entries.flatMap(e => { + const data = this.data[e.dataKey]; + return [ + ...Object.keys(data?.dependencies ?? {}), + ...Object.keys(data?.peerDependencies ?? {}), + ]; + }), + ); + graph.set(name, dependencies); + } + + return graph; + } + /** * Diff with another lockfile, returning entries that have been * added, changed, and removed compared to the other lockfile. From a11a8082ce2dd19539ad5f0f89997bc197037699 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 13 Dec 2022 23:22:44 +0100 Subject: [PATCH 90/99] cli: add git utility for reading a file at a ref Signed-off-by: Patrik Oldsberg --- packages/cli/src/lib/git.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/packages/cli/src/lib/git.ts b/packages/cli/src/lib/git.ts index 074260b38f..c0b50f5140 100644 --- a/packages/cli/src/lib/git.ts +++ b/packages/cli/src/lib/git.ts @@ -64,3 +64,23 @@ export async function listChangedFiles(ref: string) { return Array.from(new Set([...tracked, ...untracked])); } + +/** + * Returns the contents of a file at a specific ref. + */ +export async function readFileAtRef(path: string, ref: string) { + let showRef = ref; + try { + const [base] = await runGit('merge-base', 'HEAD', ref); + showRef = base; + } catch { + // silently fall back to using the ref directly if merge base is not available + } + + const { stdout } = await execFile('git', ['show', `${showRef}:${path}`], { + shell: true, + cwd: paths.targetRoot, + maxBuffer: 1024 * 1024 * 50, + }); + return stdout; +} From 79bc82828ff1e1ff0ce9c855d8a1a48caeb46555 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 13 Dec 2022 23:23:11 +0100 Subject: [PATCH 91/99] cli: add ability to analyze lockfile changes when listing changed packages Signed-off-by: Patrik Oldsberg --- packages/cli/src/lib/monorepo/PackageGraph.ts | 70 ++++++++++++++++++- 1 file changed, 68 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/lib/monorepo/PackageGraph.ts b/packages/cli/src/lib/monorepo/PackageGraph.ts index c65f5c003c..8aa7fc9416 100644 --- a/packages/cli/src/lib/monorepo/PackageGraph.ts +++ b/packages/cli/src/lib/monorepo/PackageGraph.ts @@ -18,7 +18,8 @@ import path from 'path'; import { getPackages, Package } from '@manypkg/get-packages'; import { paths } from '../paths'; import { PackageRole } from '../role'; -import { listChangedFiles } from '../git'; +import { listChangedFiles, readFileAtRef } from '../git'; +import { Lockfile } from '../versioning'; type PackageJSON = Package['packageJson']; @@ -191,7 +192,10 @@ export class PackageGraph extends Map { return targets; } - async listChangedPackages(options: { ref: string }) { + async listChangedPackages(options: { + ref: string; + analyzeLockfile?: boolean; + }) { const changedFiles = await listChangedFiles(options.ref); const dirMap = new Map( @@ -234,6 +238,68 @@ export class PackageGraph extends Map { } } + if (changedFiles.includes('yarn.lock') && options.analyzeLockfile) { + // Load the lockfile in the working tree and the one at the ref and diff them + const thisLockfile = await Lockfile.load( + paths.resolveTargetRoot('yarn.lock'), + ); + const otherLockfile = Lockfile.parse( + await readFileAtRef('yarn.lock', options.ref), + ); + const diff = thisLockfile.diff(otherLockfile); + + // Create a simplified dependency graph only keeps track of package names + const graph = thisLockfile.createSimplifiedDependencyGraph(); + + // Merge the dependency graph from the other lockfile into this one in + // order to be able to detect removals accurately. + { + const otherGraph = thisLockfile.createSimplifiedDependencyGraph(); + for (const [name, dependencies] of otherGraph) { + const node = graph.get(name); + if (node) { + dependencies.forEach(d => node.add(d)); + } else { + graph.set(name, dependencies); + } + } + } + + // The check is simplified by only considering the package names rather + // than the exact version range queries that were changed. + // TODO(Rugvip): Use a more exact check + const changedPackages = new Set( + [...diff.added, ...diff.changed, ...diff.removed].map(e => e.name), + ); + + // Starting with our set of changed packages from the diff, we loop through + // the full graph and add any package that has a dependency on a changed package. + // We keep looping until all transitive dependencies have been detected. + let changed = false; + do { + changed = false; + for (const [name, dependencies] of graph) { + if (changedPackages.has(name)) { + continue; + } + for (const dep of dependencies) { + if (changedPackages.has(dep)) { + changed = true; + changedPackages.add(name); + break; + } + } + } + } while (changed); + + // Add all local packages that had a transitive dependency change to the result set + for (const node of this.values()) { + if (changedPackages.has(node.name) && !result.includes(node)) { + result.push(node); + } + } + } + return result; } } From 7c8a974515c75e5e18dcd58523f35f6ec76385fb Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 13 Dec 2022 23:32:30 +0100 Subject: [PATCH 92/99] cli: make --since flag for repo build, lint and test commands diff yarn lock Signed-off-by: Patrik Oldsberg --- .changeset/tasty-impalas-cross.md | 5 +++++ packages/cli/src/commands/repo/build.ts | 1 + packages/cli/src/commands/repo/lint.ts | 5 ++++- packages/cli/src/commands/repo/test.ts | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 .changeset/tasty-impalas-cross.md diff --git a/.changeset/tasty-impalas-cross.md b/.changeset/tasty-impalas-cross.md new file mode 100644 index 0000000000..f7d7712b29 --- /dev/null +++ b/.changeset/tasty-impalas-cross.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +The `repo test`, `repo lint`, and `repo build` commands will now analyze `yarn.lock` for dependency changes when searching for changed packages. This allows you to use the `--since ` flag even if you have `yarn.lock` changes. diff --git a/packages/cli/src/commands/repo/build.ts b/packages/cli/src/commands/repo/build.ts index 21b1580cb9..a6bf87da82 100644 --- a/packages/cli/src/commands/repo/build.ts +++ b/packages/cli/src/commands/repo/build.ts @@ -84,6 +84,7 @@ export async function command(opts: OptionValues, cmd: Command): Promise { const graph = PackageGraph.fromPackages(packages); const changedPackages = await graph.listChangedPackages({ ref: opts.since, + analyzeLockfile: true, }); const withDevDependents = graph.collectPackageNames( changedPackages.map(pkg => pkg.name), diff --git a/packages/cli/src/commands/repo/lint.ts b/packages/cli/src/commands/repo/lint.ts index 61d85b3773..8e8ec20ff8 100644 --- a/packages/cli/src/commands/repo/lint.ts +++ b/packages/cli/src/commands/repo/lint.ts @@ -34,7 +34,10 @@ export async function command(opts: OptionValues): Promise { if (opts.since) { const graph = PackageGraph.fromPackages(packages); - packages = await graph.listChangedPackages({ ref: opts.since }); + packages = await graph.listChangedPackages({ + ref: opts.since, + analyzeLockfile: true, + }); } // Packages are ordered from most to least number of dependencies, as a diff --git a/packages/cli/src/commands/repo/test.ts b/packages/cli/src/commands/repo/test.ts index 578cb15e83..95bfe8f449 100644 --- a/packages/cli/src/commands/repo/test.ts +++ b/packages/cli/src/commands/repo/test.ts @@ -93,6 +93,7 @@ export async function command(opts: OptionValues, cmd: Command): Promise { const graph = PackageGraph.fromPackages(packages); const changedPackages = await graph.listChangedPackages({ ref: opts.since, + analyzeLockfile: true, }); const packageNames = Array.from( From 536d3e764af41a4600982d0a96200fd0549af26d Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 13 Dec 2022 23:45:08 +0100 Subject: [PATCH 93/99] cli: fix missing arg for lockfile.save() Signed-off-by: Patrik Oldsberg --- packages/cli/src/commands/versions/lint.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/commands/versions/lint.ts b/packages/cli/src/commands/versions/lint.ts index e6bc119b71..8de38548a9 100644 --- a/packages/cli/src/commands/versions/lint.ts +++ b/packages/cli/src/commands/versions/lint.ts @@ -53,7 +53,8 @@ export default async (cmd: OptionValues) => { let success = true; - const lockfile = await Lockfile.load(paths.resolveTargetRoot('yarn.lock')); + const lockfilePath = paths.resolveTargetRoot('yarn.lock'); + const lockfile = await Lockfile.load(lockfilePath); const result = lockfile.analyze({ filter: includedFilter, localPackages: PackageGraph.fromPackages( @@ -69,7 +70,7 @@ export default async (cmd: OptionValues) => { if (fix) { lockfile.replaceVersions(result.newVersions); - await lockfile.save(); + await lockfile.save(lockfilePath); } else { const [newVersionsForbidden, newVersionsAllowed] = partition( result.newVersions, From 1d0304de1b09ffb010d7546882e2daa2525b3e86 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 13 Dec 2022 23:45:31 +0100 Subject: [PATCH 94/99] workflows/ci: remove yarn.lock check and always use --since Signed-off-by: Patrik Oldsberg --- .github/workflows/ci.yml | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a37ae745c4..c4af6021b2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -185,21 +185,10 @@ jobs: with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} - - name: check for yarn.lock changes - id: yarn-lock - run: git diff --quiet origin/master HEAD -- yarn.lock - continue-on-error: true - - name: lint changed packages - if: ${{ steps.yarn-lock.outcome == 'success' }} run: yarn backstage-cli repo lint --since origin/master - - name: lint all packages - if: ${{ steps.yarn-lock.outcome == 'failure' }} - run: yarn backstage-cli repo lint - - name: test changed packages - if: ${{ steps.yarn-lock.outcome == 'success' }} run: yarn backstage-cli repo test --maxWorkers=2 --workerIdleMemoryLimit=1300M --since origin/master env: BACKSTAGE_TEST_DISABLE_DOCKER: 1 @@ -207,17 +196,6 @@ jobs: BACKSTAGE_TEST_DATABASE_POSTGRES9_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres9.ports[5432] }} BACKSTAGE_TEST_DATABASE_MYSQL8_CONNECTION_STRING: mysql://root:root@localhost:${{ job.services.mysql8.ports[3306] }}/ignored - - name: test all packages (and upload coverage) - if: ${{ steps.yarn-lock.outcome == 'failure' }} - run: | - yarn backstage-cli repo test --maxWorkers=2 --workerIdleMemoryLimit=800M --coverage - bash <(curl -s https://codecov.io/bash) -N $(git rev-parse FETCH_HEAD) - env: - BACKSTAGE_TEST_DISABLE_DOCKER: 1 - BACKSTAGE_TEST_DATABASE_POSTGRES13_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres13.ports[5432] }} - BACKSTAGE_TEST_DATABASE_POSTGRES9_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres9.ports[5432] }} - BACKSTAGE_TEST_DATABASE_MYSQL8_CONNECTION_STRING: mysql://root:root@localhost:${{ job.services.mysql8.ports[3306] }}/ignored - - name: ensure clean working directory run: | if files=$(git ls-files --exclude-standard --others --modified) && [[ -z "$files" ]]; then From 7bd873ad15bc66644fd7fb5e590722129473e285 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 14 Dec 2022 00:05:50 +0100 Subject: [PATCH 95/99] cli: handle failure to read lockfile during analysis Signed-off-by: Patrik Oldsberg --- packages/cli/src/lib/monorepo/PackageGraph.ts | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/packages/cli/src/lib/monorepo/PackageGraph.ts b/packages/cli/src/lib/monorepo/PackageGraph.ts index 8aa7fc9416..a1fc95e669 100644 --- a/packages/cli/src/lib/monorepo/PackageGraph.ts +++ b/packages/cli/src/lib/monorepo/PackageGraph.ts @@ -240,12 +240,21 @@ export class PackageGraph extends Map { if (changedFiles.includes('yarn.lock') && options.analyzeLockfile) { // Load the lockfile in the working tree and the one at the ref and diff them - const thisLockfile = await Lockfile.load( - paths.resolveTargetRoot('yarn.lock'), - ); - const otherLockfile = Lockfile.parse( - await readFileAtRef('yarn.lock', options.ref), - ); + let thisLockfile: Lockfile; + let otherLockfile: Lockfile; + try { + thisLockfile = await Lockfile.load( + paths.resolveTargetRoot('yarn.lock'), + ); + otherLockfile = Lockfile.parse( + await readFileAtRef('yarn.lock', options.ref), + ); + } catch (error) { + console.warn( + `Failed to read lockfiles, assuming all packages have changed, ${error}`, + ); + return Array.from(this.values()); + } const diff = thisLockfile.diff(otherLockfile); // Create a simplified dependency graph only keeps track of package names From 39d192d016d8b4a2772137ba518cbab86ad91a45 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 20 Dec 2022 16:48:47 +0100 Subject: [PATCH 96/99] cli: added PackageGraph test for lockfile analysis Signed-off-by: Patrik Oldsberg --- .../cli/src/lib/monorepo/PackageGraph.test.ts | 58 ++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/lib/monorepo/PackageGraph.test.ts b/packages/cli/src/lib/monorepo/PackageGraph.test.ts index feb1709bf7..d8edff9c81 100644 --- a/packages/cli/src/lib/monorepo/PackageGraph.test.ts +++ b/packages/cli/src/lib/monorepo/PackageGraph.test.ts @@ -14,19 +14,25 @@ * limitations under the License. */ +import { resolve as resolvePath } from 'path'; import { getPackages } from '@manypkg/get-packages'; import { PackageGraph } from './PackageGraph'; -import { listChangedFiles } from '../git'; +import { Lockfile } from '../versioning/Lockfile'; +import { listChangedFiles, readFileAtRef } from '../git'; jest.mock('../git'); const mockListChangedFiles = listChangedFiles as jest.MockedFunction< typeof listChangedFiles >; +const mockReadFileAtRef = readFileAtRef as jest.MockedFunction< + typeof readFileAtRef +>; jest.mock('../paths', () => ({ paths: { targetRoot: '/', + resolveTargetRoot: (...paths: string[]) => resolvePath('/', ...paths), }, })); @@ -177,4 +183,54 @@ describe('PackageGraph', () => { graph.listChangedPackages({ ref: 'origin/master' }), ).resolves.toEqual([graph.get('a'), graph.get('b')]); }); + + it('lists changed packages with lockfile analysis', async () => { + const graph = PackageGraph.fromPackages(testPackages); + + mockListChangedFiles.mockResolvedValueOnce( + ['README.md', 'packages/a/src/foo.ts', 'yarn.lock'].sort(), + ); + mockReadFileAtRef.mockResolvedValueOnce(` +a@^1: + version: "1.0.0" + +c@^1: + version: "1.0.0" + dependencies: + c-dep: ^1 + +c-dep@^2: + version: "2.0.0" + integrity: sha512-xyz +`); + jest.spyOn(Lockfile, 'load').mockResolvedValueOnce( + Lockfile.parse(` +a@^1: + version: "1.0.0" + +c@^1: + version: "1.0.0" + dependencies: + c-dep: ^1 + +c-dep@^2: + version: "2.0.0" + integrity: sha512-xyz-other +`), + ); + + await expect( + graph + .listChangedPackages({ + ref: 'origin/master', + analyzeLockfile: true, + }) + .then(pkgs => pkgs.map(pkg => pkg.name)), + ).resolves.toEqual(['a', 'c']); + + expect(mockReadFileAtRef).toHaveBeenCalledWith( + 'yarn.lock', + 'origin/master', + ); + }); }); From ea91c01cc9638538f6861fe0bbe23abfde0b2417 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 22 Dec 2022 14:54:08 +0100 Subject: [PATCH 97/99] cli: fix merge conflicts in Lockfile tests Signed-off-by: Patrik Oldsberg --- packages/cli/src/lib/versioning/Lockfile.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/lib/versioning/Lockfile.test.ts b/packages/cli/src/lib/versioning/Lockfile.test.ts index a60b71be85..0275c5ee50 100644 --- a/packages/cli/src/lib/versioning/Lockfile.test.ts +++ b/packages/cli/src/lib/versioning/Lockfile.test.ts @@ -195,7 +195,7 @@ b@^2: version: 2.0.1 `; -const mockANewLocal = `${newHeader} +const mockANewLocal = `${MODERN_HEADER} a@^1: version: 1.0.1 dependencies: @@ -210,7 +210,7 @@ b@^2: version: 2.0.0 `; -const mockANewLocalDedup = `${newHeader} +const mockANewLocalDedup = `${MODERN_HEADER} a@^1: version: 1.0.1 dependencies: @@ -314,7 +314,7 @@ describe('New Lockfile', () => { await expect(fs.readFile('/yarn.lock', 'utf8')).resolves.toBe( mockANewLocal, ); - await expect(lockfile.save()).resolves.toBeUndefined(); + await expect(lockfile.save('/yarn.lock')).resolves.toBeUndefined(); await expect(fs.readFile('/yarn.lock', 'utf8')).resolves.toBe( mockANewLocalDedup, ); From d756a38b17bf54d4cc79e4173b7b87ce8abc8fd0 Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 22 Dec 2022 14:57:07 +0100 Subject: [PATCH 98/99] chore: don't need full types here Signed-off-by: blam --- .github/workflows/uffizzi-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index a170521ec9..e609aa1baa 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -37,7 +37,7 @@ jobs: - name: typescript build run: | - yarn tsc:full + yarn tsc - name: backstage build run: | From 71a0dee0b80f98fbda5a3b029eca88c009dc88f0 Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 22 Dec 2022 16:00:41 +0100 Subject: [PATCH 99/99] chore: build example backend Signed-off-by: blam --- .github/workflows/uffizzi-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index e609aa1baa..1a86f8de71 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -41,7 +41,7 @@ jobs: - name: backstage build run: | - yarn workspace backend build + yarn workspace example-backend build - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2