From d996458580de4b63f9c07ebacac98626efab4125 Mon Sep 17 00:00:00 2001 From: sjeyaraman Date: Sun, 5 Jun 2022 12:40:43 -0700 Subject: [PATCH 001/231] customize unregister entity menuitem Signed-off-by: sjeyaraman --- .../app/src/components/catalog/EntityPage.tsx | 15 ++++++- .../EntityContextMenu.test.tsx | 25 ++++++++++- .../EntityContextMenu/EntityContextMenu.tsx | 43 +++++++++++++------ .../components/EntityLayout/EntityLayout.tsx | 4 +- 4 files changed, 70 insertions(+), 17 deletions(-) diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index 799fe3e4d9..ab8c02c168 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -161,9 +161,22 @@ const EntityLayoutWrapper = (props: { children?: ReactNode }) => { ]; }, []); + type VisibleType = 'visible' | 'hidden' | 'disabled'; + + type contextMenuOptions = { + disableUnregister: boolean | VisibleType; + }; + + const options: contextMenuOptions = { + disableUnregister: false, + }; + return ( <> - + {props.children} { it('should call onUnregisterEntity on button click', async () => { const mockCallback = jest.fn(); - await render( { expect(mockCallback).toBeCalled(); }); + it('check Unregister entity button is disabled', async () => { + const mockCallback = jest.fn(); + + const { getByText } = await render( + {}} + />, + ); + + const button = await screen.findByTestId('menu-button'); + expect(button).toBeInTheDocument(); + fireEvent.click(button); + + const unregister = await screen.getByText('Unregister entity'); + expect(unregister).toBeInTheDocument(); + + const unregisterSpanItem = getByText(/Unregister entity/); + const unregisterMenuListItem = + unregisterSpanItem?.parentElement?.parentElement; + expect(unregisterMenuListItem).toHaveAttribute('aria-disabled'); + }); + it('should call onInspectEntity on button click', async () => { const mockCallback = jest.fn(); diff --git a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx index 5664186ab1..955c42b95a 100644 --- a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx +++ b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx @@ -47,9 +47,11 @@ interface ExtraContextMenuItem { onClick: () => void; } +type VisibleType = 'visible' | 'hidden' | 'disabled'; + // unstable context menu option, eg: disable the unregister entity menu interface contextMenuOptions { - disableUnregister: boolean; + disableUnregister: boolean | VisibleType; } interface EntityContextMenuProps { @@ -98,11 +100,35 @@ export function EntityContextMenu(props: EntityContextMenuProps) { , ]; + const isBoolean = + typeof UNSTABLE_contextMenuOptions?.disableUnregister === 'boolean'; + const disableUnregister = (!unregisterPermission.allowed || - UNSTABLE_contextMenuOptions?.disableUnregister) ?? + (isBoolean + ? UNSTABLE_contextMenuOptions?.disableUnregister + : UNSTABLE_contextMenuOptions?.disableUnregister === 'disabled')) ?? false; + let unregisterButton = <>; + + if (UNSTABLE_contextMenuOptions?.disableUnregister !== 'hidden') { + unregisterButton = ( + { + onClose(); + onUnregisterEntity(); + }} + disabled={disableUnregister} + > + + + + + + ); + } + return ( <> {extraItems} - { - onClose(); - onUnregisterEntity(); - }} - disabled={disableUnregister} - > - - - - - + {unregisterButton} { onClose(); diff --git a/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx b/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx index 693137fe21..4cbb72db5c 100644 --- a/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx +++ b/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx @@ -142,9 +142,11 @@ interface ExtraContextMenuItem { onClick: () => void; } +type VisibleType = 'visible' | 'hidden' | 'disabled'; + // unstable context menu option, eg: disable the unregister entity menu interface contextMenuOptions { - disableUnregister: boolean; + disableUnregister: boolean | VisibleType; } /** @public */ From 9083fae0885053988fed87d64c124f1a6e70ba47 Mon Sep 17 00:00:00 2001 From: sjeyaraman Date: Sun, 5 Jun 2022 17:10:23 -0700 Subject: [PATCH 002/231] add-change-set Signed-off-by: sjeyaraman --- .changeset/cold-apples-film.md | 9 +++++++++ packages/app/src/components/catalog/EntityPage.tsx | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 .changeset/cold-apples-film.md diff --git a/.changeset/cold-apples-film.md b/.changeset/cold-apples-film.md new file mode 100644 index 0000000000..d8c7ec283d --- /dev/null +++ b/.changeset/cold-apples-film.md @@ -0,0 +1,9 @@ +--- +'example-app': patch +'@backstage/plugin-catalog': patch +--- + +Adding ability to customize the "unregister entity" menu item in the entity context menu on the entity page with options 'visible','hidden','disabled'. +With this three new options, one can hide the "unregister entity" menu item from the list, disable or keep it enabled. + +The boolean input for "unregister entity" will be deprecated later in favour of the above three options. diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index ab8c02c168..fc17ccf909 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -168,7 +168,7 @@ const EntityLayoutWrapper = (props: { children?: ReactNode }) => { }; const options: contextMenuOptions = { - disableUnregister: false, + disableUnregister: 'visible', }; return ( From 874782422123e8b83f5ed428489e2fe10f24c859 Mon Sep 17 00:00:00 2001 From: planeiii Date: Thu, 16 Jun 2022 14:49:36 -0500 Subject: [PATCH 003/231] feat(jenkins-backend): add multiple branch support Signed-off-by: planeiii --- .changeset/many-vans-thank.md | 8 ++++++ .../src/service/jenkinsApi.test.ts | 28 +++++++++++++++++++ .../jenkins-backend/src/service/jenkinsApi.ts | 13 +++++---- plugins/jenkins/README.md | 7 +++-- 4 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 .changeset/many-vans-thank.md diff --git a/.changeset/many-vans-thank.md b/.changeset/many-vans-thank.md new file mode 100644 index 0000000000..942aa4cc7c --- /dev/null +++ b/.changeset/many-vans-thank.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-jenkins': patch +'@backstage/plugin-jenkins-backend': patch +--- + +--- + +feature: added support for multiple branches to the `JenkinsApi` diff --git a/plugins/jenkins-backend/src/service/jenkinsApi.test.ts b/plugins/jenkins-backend/src/service/jenkinsApi.test.ts index 29da414470..ad1a09a40f 100644 --- a/plugins/jenkins-backend/src/service/jenkinsApi.test.ts +++ b/plugins/jenkins-backend/src/service/jenkinsApi.test.ts @@ -134,6 +134,34 @@ describe('JenkinsApi', () => { }); expect(result).toHaveLength(1); }); + + it('supports multiple branches', async () => { + mockedJenkinsClient.job.get.mockResolvedValue(project); + + const result = await jenkinsApi.getProjects( + jenkinsInfo, + 'foo,bar,catpants', + ); + + expect(mockedJenkins).toHaveBeenCalledWith({ + baseUrl: jenkinsInfo.baseUrl, + headers: jenkinsInfo.headers, + promisify: true, + }); + expect(mockedJenkinsClient.job.get).toBeCalledWith({ + name: `${jenkinsInfo.jobFullName}/foo`, + tree: expect.anything(), + }); + expect(mockedJenkinsClient.job.get).toBeCalledWith({ + name: `${jenkinsInfo.jobFullName}/bar`, + tree: expect.anything(), + }); + expect(mockedJenkinsClient.job.get).toBeCalledWith({ + name: `${jenkinsInfo.jobFullName}/catpants`, + tree: expect.anything(), + }); + expect(result).toHaveLength(1); + }); }); describe('augmented', () => { const projectWithScmActions: JenkinsProject = { diff --git a/plugins/jenkins-backend/src/service/jenkinsApi.ts b/plugins/jenkins-backend/src/service/jenkinsApi.ts index 8069f57692..07469dc83a 100644 --- a/plugins/jenkins-backend/src/service/jenkinsApi.ts +++ b/plugins/jenkins-backend/src/service/jenkinsApi.ts @@ -75,13 +75,16 @@ export class JenkinsApiImpl { const projects: BackstageProject[] = []; if (branch) { - // we have been asked to filter to a single branch. // Assume jenkinsInfo.jobFullName is a folder which contains one job per branch. // TODO: extract a strategy interface for this - const job = await client.job.get({ - name: `${jenkinsInfo.jobFullName}/${branch}`, - tree: JenkinsApiImpl.jobTreeSpec.replace(/\s/g, ''), - }); + const job = await Promise.any( + branch.split(/,/g).map(name => + client.job.get({ + name: `${jenkinsInfo.jobFullName}/${name}`, + tree: JenkinsApiImpl.jobTreeSpec.replace(/\s/g, ''), + }), + ), + ); projects.push(this.augmentProject(job)); } else { // We aren't filtering diff --git a/plugins/jenkins/README.md b/plugins/jenkins/README.md index 80e39d2095..2a0ec451c8 100644 --- a/plugins/jenkins/README.md +++ b/plugins/jenkins/README.md @@ -19,7 +19,7 @@ yarn add --cwd packages/app @backstage/plugin-jenkins 3. Add the `EntityJenkinsContent` extension to the `CI/CD` page and `EntityLatestJenkinsRunCard` to the `overview` page in the app (or wherever you'd prefer): -Note that if you configured a custom JenkinsInfoProvider in step 2, you may need a custom isJenkinsAvailable. +Note that if you configured a custom JenkinsInfoProvider in step 2, you may need a custom isJenkinsAvailable. Also if you're transitioning to a new default branch name, you can pass multiple branch names as a comma-separated list and it will check for each branch name. ```tsx // In packages/app/src/components/catalog/EntityPage.tsx @@ -38,7 +38,10 @@ const serviceEntityPage = ( - + {/* ... */} From 18dad948a10a2034959e1eb14b3c41669683e1fb Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Mon, 20 Jun 2022 15:46:06 +0200 Subject: [PATCH 004/231] add custom search error Signed-off-by: Emma Indal --- plugins/search-backend-node/src/errors.ts | 23 +++++++++++++++++++++++ plugins/search-backend-node/src/index.ts | 1 + 2 files changed, 24 insertions(+) create mode 100644 plugins/search-backend-node/src/errors.ts diff --git a/plugins/search-backend-node/src/errors.ts b/plugins/search-backend-node/src/errors.ts new file mode 100644 index 0000000000..c6128f3f2e --- /dev/null +++ b/plugins/search-backend-node/src/errors.ts @@ -0,0 +1,23 @@ +/* + * 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 { CustomErrorBase } from '@backstage/errors'; + +/** + * Failed to query documents for index that does not exist. + * @public + */ +export class MissingIndexError extends CustomErrorBase {} diff --git a/plugins/search-backend-node/src/index.ts b/plugins/search-backend-node/src/index.ts index d342bb9259..854881829c 100644 --- a/plugins/search-backend-node/src/index.ts +++ b/plugins/search-backend-node/src/index.ts @@ -34,6 +34,7 @@ export type { RegisterCollatorParameters, RegisterDecoratorParameters, } from './types'; +export * from './errors'; export * from './indexing'; export * from './test-utils'; From c30ecd900f75cfc74a48f14f74bc663bd6121f60 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Mon, 20 Jun 2022 15:48:44 +0200 Subject: [PATCH 005/231] ElasticSearch engine throw MissingIndexError if error type is index_not_found_exception Signed-off-by: Emma Indal --- .../src/engines/ElasticSearchSearchEngine.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts index 31112e3446..8f321a266c 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts @@ -26,6 +26,7 @@ import { SearchEngine, SearchQuery, } from '@backstage/plugin-search-common'; +import { MissingIndexError } from '@backstage/plugin-search-backend-node'; import { Client } from '@elastic/elasticsearch'; import esb from 'elastic-builder'; import { isEmpty, isNaN as nan, isNumber } from 'lodash'; @@ -362,6 +363,9 @@ export class ElasticSearchSearchEngine implements SearchEngine { previousPageCursor, }; } catch (e) { + if (e.meta.body.error.type === 'index_not_found_exception') { + throw new MissingIndexError(`Missing index for ${queryIndices}`, e); + } this.logger.error( `Failed to query documents for indices ${queryIndices}`, e, From 1e28c4336632edf6814e66ee5bb05406c0e8e560 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Mon, 20 Jun 2022 16:24:15 +0200 Subject: [PATCH 006/231] check error, if MissingIndexError return status code 400 with clear error message Signed-off-by: Emma Indal --- plugins/search-backend/src/service/router.ts | 24 ++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/plugins/search-backend/src/service/router.ts b/plugins/search-backend/src/service/router.ts index f54c2d388f..c85b3ed797 100644 --- a/plugins/search-backend/src/service/router.ts +++ b/plugins/search-backend/src/service/router.ts @@ -33,7 +33,10 @@ import { IndexableResultSet, SearchResultSet, } from '@backstage/plugin-search-common'; -import { SearchEngine } from '@backstage/plugin-search-backend-node'; +import { + SearchEngine, + MissingIndexError, +} from '@backstage/plugin-search-backend-node'; import { AuthorizedSearchEngine } from './AuthorizedSearchEngine'; const jsonObjectSchema: z.ZodSchema = z.lazy(() => { @@ -129,7 +132,10 @@ export async function createRouter( const router = Router(); router.get( '/query', - async (req: express.Request, res: express.Response) => { + async ( + req: express.Request, + res: express.Response, + ) => { const parseResult = requestSchema.safeParse(req.query); if (!parseResult.success) { @@ -154,9 +160,19 @@ export async function createRouter( const resultSet = await engine?.query(query, { token }); res.send(filterResultSet(toSearchResults(resultSet))); - } catch (err) { + } catch (error) { + if (error instanceof MissingIndexError) { + res + .status(400) + .send( + `\nNo index found for types: ${ + query.types ? query.types.join(',') : '' + }. This means there are no documents to search through.`, + ); + } + throw new Error( - `There was a problem performing the search query. ${err}`, + `There was a problem performing the search query. ${error}`, ); } }, From 741b6df63a59b721a6422dbecf89863f840c7e9f Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Tue, 21 Jun 2022 10:02:04 +0200 Subject: [PATCH 007/231] update api reports Signed-off-by: Emma Indal --- plugins/search-backend-node/api-report.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/search-backend-node/api-report.md b/plugins/search-backend-node/api-report.md index 7649bc5d0f..63273d7514 100644 --- a/plugins/search-backend-node/api-report.md +++ b/plugins/search-backend-node/api-report.md @@ -6,6 +6,7 @@ /// import { Config } from '@backstage/config'; +import { CustomErrorBase } from '@backstage/errors'; import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; import { DocumentDecoratorFactory } from '@backstage/plugin-search-common'; import { DocumentTypeInfo } from '@backstage/plugin-search-common'; @@ -113,6 +114,9 @@ export class LunrSearchEngineIndexer extends BatchSearchEngineIndexer { initialize(): Promise; } +// @public +export class MissingIndexError extends CustomErrorBase {} + // @public export class NewlineDelimitedJsonCollatorFactory implements DocumentCollatorFactory From 4764e30cc8db91835c8a0ba6e446463e42018d8c Mon Sep 17 00:00:00 2001 From: planeiii Date: Mon, 20 Jun 2022 11:54:09 -0500 Subject: [PATCH 008/231] chore: updated getProjects to accept arrays of branches Signed-off-by: planeiii --- .changeset/many-vans-thank.md | 2 -- .../jenkins-backend/src/service/jenkinsApi.test.ts | 14 +++++++------- plugins/jenkins-backend/src/service/jenkinsApi.ts | 8 ++++---- plugins/jenkins-backend/src/service/router.ts | 8 ++++---- 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/.changeset/many-vans-thank.md b/.changeset/many-vans-thank.md index 942aa4cc7c..16f8c8a69b 100644 --- a/.changeset/many-vans-thank.md +++ b/.changeset/many-vans-thank.md @@ -3,6 +3,4 @@ '@backstage/plugin-jenkins-backend': patch --- ---- - feature: added support for multiple branches to the `JenkinsApi` diff --git a/plugins/jenkins-backend/src/service/jenkinsApi.test.ts b/plugins/jenkins-backend/src/service/jenkinsApi.test.ts index ad1a09a40f..bada5e1c29 100644 --- a/plugins/jenkins-backend/src/service/jenkinsApi.test.ts +++ b/plugins/jenkins-backend/src/service/jenkinsApi.test.ts @@ -118,10 +118,9 @@ describe('JenkinsApi', () => { it('standard github layout', async () => { mockedJenkinsClient.job.get.mockResolvedValueOnce(project); - const result = await jenkinsApi.getProjects( - jenkinsInfo, + const result = await jenkinsApi.getProjects(jenkinsInfo, [ 'testBranchName', - ); + ]); expect(mockedJenkins).toHaveBeenCalledWith({ baseUrl: jenkinsInfo.baseUrl, @@ -138,10 +137,11 @@ describe('JenkinsApi', () => { it('supports multiple branches', async () => { mockedJenkinsClient.job.get.mockResolvedValue(project); - const result = await jenkinsApi.getProjects( - jenkinsInfo, - 'foo,bar,catpants', - ); + const result = await jenkinsApi.getProjects(jenkinsInfo, [ + 'foo', + 'bar', + 'catpants', + ]); expect(mockedJenkins).toHaveBeenCalledWith({ baseUrl: jenkinsInfo.baseUrl, diff --git a/plugins/jenkins-backend/src/service/jenkinsApi.ts b/plugins/jenkins-backend/src/service/jenkinsApi.ts index 07469dc83a..334be5dfa9 100644 --- a/plugins/jenkins-backend/src/service/jenkinsApi.ts +++ b/plugins/jenkins-backend/src/service/jenkinsApi.ts @@ -70,17 +70,17 @@ export class JenkinsApiImpl { * Get a list of projects for the given JenkinsInfo. * @see ../../../jenkins/src/api/JenkinsApi.ts#getProjects */ - async getProjects(jenkinsInfo: JenkinsInfo, branch?: string) { + async getProjects(jenkinsInfo: JenkinsInfo, branches?: string[]) { const client = await JenkinsApiImpl.getClient(jenkinsInfo); const projects: BackstageProject[] = []; - if (branch) { + if (branches) { // Assume jenkinsInfo.jobFullName is a folder which contains one job per branch. // TODO: extract a strategy interface for this const job = await Promise.any( - branch.split(/,/g).map(name => + branches.map(branch => client.job.get({ - name: `${jenkinsInfo.jobFullName}/${name}`, + name: `${jenkinsInfo.jobFullName}/${branch}`, tree: JenkinsApiImpl.jobTreeSpec.replace(/\s/g, ''), }), ), diff --git a/plugins/jenkins-backend/src/service/router.ts b/plugins/jenkins-backend/src/service/router.ts index 2c9e268165..b4c06314e1 100644 --- a/plugins/jenkins-backend/src/service/router.ts +++ b/plugins/jenkins-backend/src/service/router.ts @@ -64,12 +64,12 @@ export async function createRouter( request.header('authorization'), ); const branch = request.query.branch; - let branchStr: string | undefined; + let branches: string[] | undefined; if (branch === undefined) { - branchStr = undefined; + branches = undefined; } else if (typeof branch === 'string') { - branchStr = branch; + branches = branch.split(/,/g); } else { // this was passed in as something weird -> 400 // https://evanhahn.com/gotchas-with-express-query-parsing-and-how-to-avoid-them/ @@ -88,7 +88,7 @@ export async function createRouter( }, backstageToken: token, }); - const projects = await jenkinsApi.getProjects(jenkinsInfo, branchStr); + const projects = await jenkinsApi.getProjects(jenkinsInfo, branches); response.json({ projects: projects, From 34c97eb35ba76c2790f33b3c8616146781c42822 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Wed, 22 Jun 2022 13:39:39 +0200 Subject: [PATCH 009/231] switch to use .json instead of .send Signed-off-by: Emma Indal --- .../src/engines/ElasticSearchSearchEngine.ts | 11 +++++++---- plugins/search-backend-node/api-report.md | 6 ++++-- plugins/search-backend-node/src/errors.ts | 18 ++++++++++++++++-- plugins/search-backend/src/service/router.ts | 8 +------- 4 files changed, 28 insertions(+), 15 deletions(-) diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts index 8f321a266c..1eb32c882d 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts @@ -362,13 +362,16 @@ export class ElasticSearchSearchEngine implements SearchEngine { nextPageCursor, previousPageCursor, }; - } catch (e) { - if (e.meta.body.error.type === 'index_not_found_exception') { - throw new MissingIndexError(`Missing index for ${queryIndices}`, e); + } catch (error) { + if (error.meta.body.error.type === 'index_not_found_exception') { + throw new MissingIndexError( + `Missing index for ${queryIndices}. This means there are no documents to search through.`, + error, + ); } this.logger.error( `Failed to query documents for indices ${queryIndices}`, - e, + error, ); return Promise.reject({ results: [] }); } diff --git a/plugins/search-backend-node/api-report.md b/plugins/search-backend-node/api-report.md index 63273d7514..ff9480c19d 100644 --- a/plugins/search-backend-node/api-report.md +++ b/plugins/search-backend-node/api-report.md @@ -6,7 +6,6 @@ /// import { Config } from '@backstage/config'; -import { CustomErrorBase } from '@backstage/errors'; import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; import { DocumentDecoratorFactory } from '@backstage/plugin-search-common'; import { DocumentTypeInfo } from '@backstage/plugin-search-common'; @@ -115,7 +114,10 @@ export class LunrSearchEngineIndexer extends BatchSearchEngineIndexer { } // @public -export class MissingIndexError extends CustomErrorBase {} +export class MissingIndexError extends Error { + constructor(message?: string, cause?: Error | unknown); + readonly cause?: Error | undefined; +} // @public export class NewlineDelimitedJsonCollatorFactory diff --git a/plugins/search-backend-node/src/errors.ts b/plugins/search-backend-node/src/errors.ts index c6128f3f2e..00b168d460 100644 --- a/plugins/search-backend-node/src/errors.ts +++ b/plugins/search-backend-node/src/errors.ts @@ -14,10 +14,24 @@ * limitations under the License. */ -import { CustomErrorBase } from '@backstage/errors'; +import { isError } from '@backstage/errors'; /** * Failed to query documents for index that does not exist. * @public */ -export class MissingIndexError extends CustomErrorBase {} +export class MissingIndexError extends Error { + /** + * An inner error that caused this error to be thrown, if any. + */ + readonly cause?: Error | undefined; + + constructor(message?: string, cause?: Error | unknown) { + super(message); + + Error.captureStackTrace?.(this, this.constructor); + + this.name = this.constructor.name; + this.cause = isError(cause) ? cause : undefined; + } +} diff --git a/plugins/search-backend/src/service/router.ts b/plugins/search-backend/src/service/router.ts index c85b3ed797..0fbacb018e 100644 --- a/plugins/search-backend/src/service/router.ts +++ b/plugins/search-backend/src/service/router.ts @@ -162,13 +162,7 @@ export async function createRouter( res.send(filterResultSet(toSearchResults(resultSet))); } catch (error) { if (error instanceof MissingIndexError) { - res - .status(400) - .send( - `\nNo index found for types: ${ - query.types ? query.types.join(',') : '' - }. This means there are no documents to search through.`, - ); + res.status(400).json(error.message); } throw new Error( From 119f075cd8bbedae665fb9d8bfe224c4d7974f0f Mon Sep 17 00:00:00 2001 From: planeiii Date: Wed, 22 Jun 2022 10:12:28 -0500 Subject: [PATCH 010/231] chore: added Promise.any polyfill for Node v14 Signed-off-by: planeiii --- .../jenkins-backend/src/service/jenkinsApi.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/plugins/jenkins-backend/src/service/jenkinsApi.ts b/plugins/jenkins-backend/src/service/jenkinsApi.ts index 334be5dfa9..8de2609037 100644 --- a/plugins/jenkins-backend/src/service/jenkinsApi.ts +++ b/plugins/jenkins-backend/src/service/jenkinsApi.ts @@ -30,6 +30,23 @@ import { import { jenkinsExecutePermission } from '@backstage/plugin-jenkins-common'; import { NotAllowedError } from '@backstage/errors'; +// polyfill Promise.any for Node v14 +const anyPromise = (any => { + if (any) { + // bind is required by tsc + return any.bind(Promise); + } + + // reverse promise resolution (rejects become resolves and visa versa) + const reverse = (promise: Promise) => + new Promise((resolve, reject) => + Promise.resolve(promise).then(reject, resolve), + ); + + return (iterable: Promise[]) => + reverse(Promise.all([...iterable].map(reverse))); +})(Promise.any); + export class JenkinsApiImpl { private static readonly lastBuildTreeSpec = `lastBuild[ number, @@ -77,7 +94,7 @@ export class JenkinsApiImpl { if (branches) { // Assume jenkinsInfo.jobFullName is a folder which contains one job per branch. // TODO: extract a strategy interface for this - const job = await Promise.any( + const job = await anyPromise( branches.map(branch => client.job.get({ name: `${jenkinsInfo.jobFullName}/${branch}`, From ff4f56eb4954f8eeac98d50d0e65852c943a9462 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Sat, 12 Mar 2022 11:17:28 -0600 Subject: [PATCH 011/231] Removed properties from BackstagePaletteAdditions Signed-off-by: Andre Wanlin --- .changeset/serious-houses-watch.md | 29 +++++++++++++++++++++++++++++ packages/theme/api-report.md | 4 ---- packages/theme/src/themes.ts | 8 -------- packages/theme/src/types.ts | 4 ---- 4 files changed, 29 insertions(+), 16 deletions(-) create mode 100644 .changeset/serious-houses-watch.md diff --git a/.changeset/serious-houses-watch.md b/.changeset/serious-houses-watch.md new file mode 100644 index 0000000000..5bfcbc5050 --- /dev/null +++ b/.changeset/serious-houses-watch.md @@ -0,0 +1,29 @@ +--- +'@backstage/theme': patch +--- + +Removed the following unused properties from BackstagePaletteAdditions under the `bursts` property: + +```ts +slackChannelText: string; +backgroundColor: { + default: string; +}; +``` + +If these were being used you can add them back to your custom theme, for example like this: + +```diff + bursts: { + fontColor: '#FEFEFE', ++ slackChannelText: '#ddd', ++ backgroundColor: { ++ default: '#7C3699', ++ }, + gradient: { + linear: 'linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)', + }, +}, +``` + +The [Customize the look-and-feel of your App](https://backstage.io/docs/getting-started/app-custom-theme) documentation has more details on creating and using a custom theme. diff --git a/packages/theme/api-report.md b/packages/theme/api-report.md index 772e868635..043d7d37ac 100644 --- a/packages/theme/api-report.md +++ b/packages/theme/api-report.md @@ -53,10 +53,6 @@ export type BackstagePaletteAdditions = { }; bursts: { fontColor: string; - slackChannelText: string; - backgroundColor: { - default: string; - }; gradient: { linear: string; }; diff --git a/packages/theme/src/themes.ts b/packages/theme/src/themes.ts index b048c70fec..e5551f7796 100644 --- a/packages/theme/src/themes.ts +++ b/packages/theme/src/themes.ts @@ -39,10 +39,6 @@ export const lightTheme = createTheme({ }, bursts: { fontColor: '#FEFEFE', - slackChannelText: '#ddd', - backgroundColor: { - default: '#7C3699', - }, gradient: { linear: 'linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)', }, @@ -116,10 +112,6 @@ export const darkTheme = createTheme({ }, bursts: { fontColor: '#FEFEFE', - slackChannelText: '#ddd', - backgroundColor: { - default: '#7C3699', - }, gradient: { linear: 'linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)', }, diff --git a/packages/theme/src/types.ts b/packages/theme/src/types.ts index b921154005..ec71e6d090 100644 --- a/packages/theme/src/types.ts +++ b/packages/theme/src/types.ts @@ -65,10 +65,6 @@ export type BackstagePaletteAdditions = { }; bursts: { fontColor: string; - slackChannelText: string; - backgroundColor: { - default: string; - }; gradient: { linear: string; }; From e591c242efdd034900857c41c1aa8ed6844336c0 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Tue, 15 Mar 2022 14:30:01 -0500 Subject: [PATCH 012/231] Suggested changes Signed-off-by: Andre Wanlin --- .changeset/serious-houses-watch.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/serious-houses-watch.md b/.changeset/serious-houses-watch.md index 5bfcbc5050..4da1466c1f 100644 --- a/.changeset/serious-houses-watch.md +++ b/.changeset/serious-houses-watch.md @@ -1,8 +1,8 @@ --- -'@backstage/theme': patch +'@backstage/theme': minor --- -Removed the following unused properties from BackstagePaletteAdditions under the `bursts` property: +**BREAKING**: Removed the following unused properties from BackstagePaletteAdditions under the `bursts` property: ```ts slackChannelText: string; From d348095890005273faecfdf8325727490715ea90 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Mon, 28 Mar 2022 12:44:56 -0500 Subject: [PATCH 013/231] Changes based on feedback Signed-off-by: Andre Wanlin --- .changeset/serious-houses-watch.md | 28 ++----------------- .../src/layout/ItemCard/ItemCardHeader.tsx | 2 +- packages/theme/src/pageTheme.ts | 2 ++ packages/theme/src/themes.ts | 8 ++++++ packages/theme/src/types.ts | 7 +++++ 5 files changed, 20 insertions(+), 27 deletions(-) diff --git a/.changeset/serious-houses-watch.md b/.changeset/serious-houses-watch.md index 4da1466c1f..07c4e9eaf6 100644 --- a/.changeset/serious-houses-watch.md +++ b/.changeset/serious-houses-watch.md @@ -1,29 +1,5 @@ --- -'@backstage/theme': minor +'@backstage/theme': patch --- -**BREAKING**: Removed the following unused properties from BackstagePaletteAdditions under the `bursts` property: - -```ts -slackChannelText: string; -backgroundColor: { - default: string; -}; -``` - -If these were being used you can add them back to your custom theme, for example like this: - -```diff - bursts: { - fontColor: '#FEFEFE', -+ slackChannelText: '#ddd', -+ backgroundColor: { -+ default: '#7C3699', -+ }, - gradient: { - linear: 'linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)', - }, -}, -``` - -The [Customize the look-and-feel of your App](https://backstage.io/docs/getting-started/app-custom-theme) documentation has more details on creating and using a custom theme. +**DEPRECIATED**: The `bursts` object from BackstagePaletteAdditions has been depreciated and will be removed in a future release diff --git a/packages/core-components/src/layout/ItemCard/ItemCardHeader.tsx b/packages/core-components/src/layout/ItemCard/ItemCardHeader.tsx index a34d773ce3..d9443ffc9a 100644 --- a/packages/core-components/src/layout/ItemCard/ItemCardHeader.tsx +++ b/packages/core-components/src/layout/ItemCard/ItemCardHeader.tsx @@ -27,7 +27,7 @@ const styles = (theme: BackstageTheme) => root: { color: theme.palette.common.white, padding: theme.spacing(2, 2, 3), - backgroundImage: theme.palette.bursts.gradient.linear, + backgroundImage: theme.getPageTheme({ themeId: 'card' }).backgroundImage, backgroundPosition: 0, backgroundSize: 'inherit', }, diff --git a/packages/theme/src/pageTheme.ts b/packages/theme/src/pageTheme.ts index ae81dc8534..1a5ea75394 100644 --- a/packages/theme/src/pageTheme.ts +++ b/packages/theme/src/pageTheme.ts @@ -52,6 +52,7 @@ export const colorVariants: Record = { eveningSea: ['#00FFF2', '#035355'], teal: ['#005B4B'], pinkSea: ['#C8077A', '#C2297D'], + greens: ['#4BB8A5', '#187656'], }; /** @@ -86,4 +87,5 @@ export const pageTheme: Record = { other: genPageTheme(colorVariants.darkGrey, shapes.wave), app: genPageTheme(colorVariants.toastyOrange, shapes.wave), apis: genPageTheme(colorVariants.teal, shapes.wave2), + card: genPageTheme(colorVariants.greens, shapes.wave), }; diff --git a/packages/theme/src/themes.ts b/packages/theme/src/themes.ts index e5551f7796..b048c70fec 100644 --- a/packages/theme/src/themes.ts +++ b/packages/theme/src/themes.ts @@ -39,6 +39,10 @@ export const lightTheme = createTheme({ }, bursts: { fontColor: '#FEFEFE', + slackChannelText: '#ddd', + backgroundColor: { + default: '#7C3699', + }, gradient: { linear: 'linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)', }, @@ -112,6 +116,10 @@ export const darkTheme = createTheme({ }, bursts: { fontColor: '#FEFEFE', + slackChannelText: '#ddd', + backgroundColor: { + default: '#7C3699', + }, gradient: { linear: 'linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)', }, diff --git a/packages/theme/src/types.ts b/packages/theme/src/types.ts index ec71e6d090..566bffb2e4 100644 --- a/packages/theme/src/types.ts +++ b/packages/theme/src/types.ts @@ -63,8 +63,15 @@ export type BackstagePaletteAdditions = { tabbar: { indicator: string; }; + /** + * @deprecated The entire `bursts` section will be removed in a future release + */ bursts: { fontColor: string; + slackChannelText: string; + backgroundColor: { + default: string; + }; gradient: { linear: string; }; From 4de88868b909a7a7c57262b96dd3f0b1dcb09741 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Mon, 4 Apr 2022 07:59:37 -0500 Subject: [PATCH 014/231] Fixed MobileSidebar Signed-off-by: Andre Wanlin --- packages/core-components/src/layout/Sidebar/MobileSidebar.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx b/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx index b51e3cbc0d..c85e6d11f2 100644 --- a/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx +++ b/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx @@ -85,14 +85,14 @@ const useStyles = makeStyles( overlayHeader: { display: 'flex', - color: theme.palette.bursts.fontColor, + color: theme.palette.text.primary, alignItems: 'center', justifyContent: 'space-between', padding: theme.spacing(2, 3), }, overlayHeaderClose: { - color: theme.palette.bursts.fontColor, + color: theme.palette.text.primary, }, marginMobileSidebar: props => ({ From 322195ee4dcb92ca1cde6c2b5b19f466cade3b4b Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Mon, 4 Apr 2022 08:04:35 -0500 Subject: [PATCH 015/231] Updated API Report Signed-off-by: Andre Wanlin --- packages/theme/api-report.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/theme/api-report.md b/packages/theme/api-report.md index 043d7d37ac..772e868635 100644 --- a/packages/theme/api-report.md +++ b/packages/theme/api-report.md @@ -53,6 +53,10 @@ export type BackstagePaletteAdditions = { }; bursts: { fontColor: string; + slackChannelText: string; + backgroundColor: { + default: string; + }; gradient: { linear: string; }; From 4298a0dc49aeac21a3709f982a0a67a78574fb70 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Sat, 18 Jun 2022 16:18:36 -0500 Subject: [PATCH 016/231] Changes based on feedback Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .changeset/serious-houses-watch.md | 2 +- .../src/layout/Header/Header.tsx | 8 ++-- packages/theme/src/pageTheme.ts | 47 +++++++++++++------ packages/theme/src/types.ts | 1 + .../EntityContextMenu/EntityContextMenu.tsx | 2 +- .../OwnershipCard/OwnershipCard.stories.tsx | 16 +++---- 6 files changed, 48 insertions(+), 28 deletions(-) diff --git a/.changeset/serious-houses-watch.md b/.changeset/serious-houses-watch.md index 07c4e9eaf6..d3f82850f0 100644 --- a/.changeset/serious-houses-watch.md +++ b/.changeset/serious-houses-watch.md @@ -2,4 +2,4 @@ '@backstage/theme': patch --- -**DEPRECIATED**: The `bursts` object from BackstagePaletteAdditions has been depreciated and will be removed in a future release +**DEPRECATED**: The `bursts` object from `BackstagePaletteAdditions` has been depreciated and will be removed in a future release diff --git a/packages/core-components/src/layout/Header/Header.tsx b/packages/core-components/src/layout/Header/Header.tsx index bb4d19b949..2bb0bc6f6a 100644 --- a/packages/core-components/src/layout/Header/Header.tsx +++ b/packages/core-components/src/layout/Header/Header.tsx @@ -65,13 +65,13 @@ const useStyles = makeStyles( width: 'auto', }, title: { - color: theme.palette.bursts.fontColor, + color: theme.page.fontColor, wordBreak: 'break-word', fontSize: theme.typography.h3.fontSize, marginBottom: 0, }, subtitle: { - color: theme.palette.bursts.fontColor, + color: theme.page.fontColor, opacity: 0.8, display: 'inline-block', // prevents margin collapse of adjacent siblings marginTop: theme.spacing(1), @@ -82,10 +82,10 @@ const useStyles = makeStyles( fontSize: 11, opacity: 0.8, marginBottom: theme.spacing(1), - color: theme.palette.bursts.fontColor, + color: theme.page.fontColor, }, breadcrumb: { - color: theme.palette.bursts.fontColor, + color: theme.page.fontColor, }, breadcrumbType: { fontSize: 'inherit', diff --git a/packages/theme/src/pageTheme.ts b/packages/theme/src/pageTheme.ts index 1a5ea75394..9d9e07fc93 100644 --- a/packages/theme/src/pageTheme.ts +++ b/packages/theme/src/pageTheme.ts @@ -64,12 +64,25 @@ export const colorVariants: Record = { * As the background shapes and colors are decorative, we place them onto the * page as a css background-image instead of an html element of its own. */ -export function genPageTheme(colors: string[], shape: string): PageTheme { - const gradientColors = colors.length === 1 ? [colors[0], colors[0]] : colors; +export function genPageTheme(options: { + colors: string[]; + shape: string; + fontColor?: string; +}): PageTheme { + const gradientColors = + options.colors.length === 1 + ? [options.colors[0], options.colors[0]] + : options.colors; const gradient = `linear-gradient(90deg, ${gradientColors.join(', ')})`; - const backgroundImage = `${shape}, ${gradient}`; + const backgroundImage = `${options.shape}, ${gradient}`; + const fontColor = options.fontColor ?? '#FFFFFF'; - return { colors, shape, backgroundImage }; + return { + colors: options.colors, + shape: options.shape, + backgroundImage: backgroundImage, + fontColor: fontColor, + }; } /** @@ -78,14 +91,20 @@ export function genPageTheme(colors: string[], shape: string): PageTheme { * @public */ export const pageTheme: Record = { - home: genPageTheme(colorVariants.teal, shapes.wave), - documentation: genPageTheme(colorVariants.pinkSea, shapes.wave2), - tool: genPageTheme(colorVariants.purpleSky, shapes.round), - service: genPageTheme(colorVariants.marineBlue, shapes.wave), - website: genPageTheme(colorVariants.veryBlue, shapes.wave), - library: genPageTheme(colorVariants.rubyRed, shapes.wave), - other: genPageTheme(colorVariants.darkGrey, shapes.wave), - app: genPageTheme(colorVariants.toastyOrange, shapes.wave), - apis: genPageTheme(colorVariants.teal, shapes.wave2), - card: genPageTheme(colorVariants.greens, shapes.wave), + home: genPageTheme({ colors: colorVariants.teal, shape: shapes.wave }), + documentation: genPageTheme({ + colors: colorVariants.pinkSea, + shape: shapes.wave2, + }), + tool: genPageTheme({ colors: colorVariants.purpleSky, shape: shapes.round }), + service: genPageTheme({ + colors: colorVariants.marineBlue, + shape: shapes.wave, + }), + website: genPageTheme({ colors: colorVariants.veryBlue, shape: shapes.wave }), + library: genPageTheme({ colors: colorVariants.rubyRed, shape: shapes.wave }), + other: genPageTheme({ colors: colorVariants.darkGrey, shape: shapes.wave }), + app: genPageTheme({ colors: colorVariants.toastyOrange, shape: shapes.wave }), + apis: genPageTheme({ colors: colorVariants.teal, shape: shapes.wave2 }), + card: genPageTheme({ colors: colorVariants.greens, shape: shapes.wave }), }; diff --git a/packages/theme/src/types.ts b/packages/theme/src/types.ts index 566bffb2e4..96b7c54f9b 100644 --- a/packages/theme/src/types.ts +++ b/packages/theme/src/types.ts @@ -164,4 +164,5 @@ export type PageTheme = { colors: string[]; shape: string; backgroundImage: string; + fontColor: string; }; diff --git a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx index db50eeab84..fc2ec8d864 100644 --- a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx +++ b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx @@ -40,7 +40,7 @@ const useStyles = makeStyles( (theme: BackstageTheme) => { return { button: { - color: theme.palette.bursts.fontColor, + color: theme.page.fontColor, }, }; }, diff --git a/plugins/org/src/components/Cards/OwnershipCard/OwnershipCard.stories.tsx b/plugins/org/src/components/Cards/OwnershipCard/OwnershipCard.stories.tsx index c07815f39e..fc050feb2a 100644 --- a/plugins/org/src/components/Cards/OwnershipCard/OwnershipCard.stories.tsx +++ b/plugins/org/src/components/Cards/OwnershipCard/OwnershipCard.stories.tsx @@ -110,14 +110,14 @@ const monochromeTheme = (outer: BackstageTheme) => ...outer, defaultPageTheme: 'home', pageTheme: { - home: genPageTheme(['#444'], shapes.wave2), - documentation: genPageTheme(['#474747'], shapes.wave2), - tool: genPageTheme(['#222'], shapes.wave2), - service: genPageTheme(['#aaa'], shapes.wave2), - website: genPageTheme(['#0e0e0e'], shapes.wave2), - library: genPageTheme(['#9d9d9d'], shapes.wave2), - other: genPageTheme(['#aaa'], shapes.wave2), - app: genPageTheme(['#666'], shapes.wave2), + home: genPageTheme({ colors: ['#444'], shape: shapes.wave2 }), + documentation: genPageTheme({ colors: ['#474747'], shape: shapes.wave2 }), + tool: genPageTheme({ colors: ['#222'], shape: shapes.wave2 }), + service: genPageTheme({ colors: ['#aaa'], shape: shapes.wave2 }), + website: genPageTheme({ colors: ['#0e0e0e'], shape: shapes.wave2 }), + library: genPageTheme({ colors: ['#9d9d9d'], shape: shapes.wave2 }), + other: genPageTheme({ colors: ['#aaa'], shape: shapes.wave2 }), + app: genPageTheme({ colors: ['#666'], shape: shapes.wave2 }), }, }); From 593c0c0d3b2f64d74ad80879117d50262f964886 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Sat, 12 Mar 2022 11:17:28 -0600 Subject: [PATCH 017/231] Removed properties from BackstagePaletteAdditions Signed-off-by: Andre Wanlin --- packages/theme/api-report.md | 4 ---- packages/theme/src/themes.ts | 8 -------- packages/theme/src/types.ts | 4 ---- 3 files changed, 16 deletions(-) diff --git a/packages/theme/api-report.md b/packages/theme/api-report.md index 772e868635..043d7d37ac 100644 --- a/packages/theme/api-report.md +++ b/packages/theme/api-report.md @@ -53,10 +53,6 @@ export type BackstagePaletteAdditions = { }; bursts: { fontColor: string; - slackChannelText: string; - backgroundColor: { - default: string; - }; gradient: { linear: string; }; diff --git a/packages/theme/src/themes.ts b/packages/theme/src/themes.ts index b048c70fec..e5551f7796 100644 --- a/packages/theme/src/themes.ts +++ b/packages/theme/src/themes.ts @@ -39,10 +39,6 @@ export const lightTheme = createTheme({ }, bursts: { fontColor: '#FEFEFE', - slackChannelText: '#ddd', - backgroundColor: { - default: '#7C3699', - }, gradient: { linear: 'linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)', }, @@ -116,10 +112,6 @@ export const darkTheme = createTheme({ }, bursts: { fontColor: '#FEFEFE', - slackChannelText: '#ddd', - backgroundColor: { - default: '#7C3699', - }, gradient: { linear: 'linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)', }, diff --git a/packages/theme/src/types.ts b/packages/theme/src/types.ts index 96b7c54f9b..ed7e9fdd25 100644 --- a/packages/theme/src/types.ts +++ b/packages/theme/src/types.ts @@ -68,10 +68,6 @@ export type BackstagePaletteAdditions = { */ bursts: { fontColor: string; - slackChannelText: string; - backgroundColor: { - default: string; - }; gradient: { linear: string; }; From 1fa7f7448e89499dae91abd86387e0da86c4ae1c Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Tue, 15 Mar 2022 14:30:01 -0500 Subject: [PATCH 018/231] Suggested changes Signed-off-by: Andre Wanlin --- .changeset/serious-houses-watch.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/serious-houses-watch.md b/.changeset/serious-houses-watch.md index d3f82850f0..08979a5012 100644 --- a/.changeset/serious-houses-watch.md +++ b/.changeset/serious-houses-watch.md @@ -1,5 +1,5 @@ --- -'@backstage/theme': patch +'@backstage/theme': minor --- **DEPRECATED**: The `bursts` object from `BackstagePaletteAdditions` has been depreciated and will be removed in a future release From e1dbedbefca85fe709549bd91cf4d2c30f76c523 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Mon, 28 Mar 2022 12:44:56 -0500 Subject: [PATCH 019/231] Changes based on feedback Signed-off-by: Andre Wanlin --- .changeset/serious-houses-watch.md | 2 +- packages/theme/src/themes.ts | 8 ++++++++ packages/theme/src/types.ts | 4 ++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.changeset/serious-houses-watch.md b/.changeset/serious-houses-watch.md index 08979a5012..d3f82850f0 100644 --- a/.changeset/serious-houses-watch.md +++ b/.changeset/serious-houses-watch.md @@ -1,5 +1,5 @@ --- -'@backstage/theme': minor +'@backstage/theme': patch --- **DEPRECATED**: The `bursts` object from `BackstagePaletteAdditions` has been depreciated and will be removed in a future release diff --git a/packages/theme/src/themes.ts b/packages/theme/src/themes.ts index e5551f7796..b048c70fec 100644 --- a/packages/theme/src/themes.ts +++ b/packages/theme/src/themes.ts @@ -39,6 +39,10 @@ export const lightTheme = createTheme({ }, bursts: { fontColor: '#FEFEFE', + slackChannelText: '#ddd', + backgroundColor: { + default: '#7C3699', + }, gradient: { linear: 'linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)', }, @@ -112,6 +116,10 @@ export const darkTheme = createTheme({ }, bursts: { fontColor: '#FEFEFE', + slackChannelText: '#ddd', + backgroundColor: { + default: '#7C3699', + }, gradient: { linear: 'linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)', }, diff --git a/packages/theme/src/types.ts b/packages/theme/src/types.ts index ed7e9fdd25..96b7c54f9b 100644 --- a/packages/theme/src/types.ts +++ b/packages/theme/src/types.ts @@ -68,6 +68,10 @@ export type BackstagePaletteAdditions = { */ bursts: { fontColor: string; + slackChannelText: string; + backgroundColor: { + default: string; + }; gradient: { linear: string; }; From 6e20959b5a3fdc8e0a2297dcc7235df60239bd02 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Mon, 4 Apr 2022 08:04:35 -0500 Subject: [PATCH 020/231] Updated API Report Signed-off-by: Andre Wanlin --- packages/theme/api-report.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/theme/api-report.md b/packages/theme/api-report.md index 043d7d37ac..772e868635 100644 --- a/packages/theme/api-report.md +++ b/packages/theme/api-report.md @@ -53,6 +53,10 @@ export type BackstagePaletteAdditions = { }; bursts: { fontColor: string; + slackChannelText: string; + backgroundColor: { + default: string; + }; gradient: { linear: string; }; From 385389d23c68aee51abe47159908107b6d02ba21 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Mon, 20 Jun 2022 14:23:17 -0500 Subject: [PATCH 021/231] Latest feedback updates Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .changeset/great-roses-pump.md | 2 +- .changeset/serious-houses-watch.md | 2 ++ .changeset/tricky-ravens-visit.md | 6 ++++++ packages/theme/api-report.md | 9 ++++++++- packages/theme/src/pageTheme.ts | 20 ++++++++++---------- 5 files changed, 27 insertions(+), 12 deletions(-) create mode 100644 .changeset/tricky-ravens-visit.md diff --git a/.changeset/great-roses-pump.md b/.changeset/great-roses-pump.md index 16a49bd464..0e15d186d4 100644 --- a/.changeset/great-roses-pump.md +++ b/.changeset/great-roses-pump.md @@ -4,7 +4,7 @@ Previously, the color of the Entity Context Menu (in the Entity Page Header) was hardcoded as `white`. -This was an issue for themes that use a header with a white background. By default, the color of the icon is now `theme.palette.bursts.fontColor`. +This was an issue for themes that use a header with a white background. By default, the color of the icon is now `theme.page.fontColor`. It can now also be overridden in the theme, which is only necessary if the header title, subtitle and three-dots icon need to have different colors. For example: diff --git a/.changeset/serious-houses-watch.md b/.changeset/serious-houses-watch.md index d3f82850f0..63d5253bcb 100644 --- a/.changeset/serious-houses-watch.md +++ b/.changeset/serious-houses-watch.md @@ -3,3 +3,5 @@ --- **DEPRECATED**: The `bursts` object from `BackstagePaletteAdditions` has been depreciated and will be removed in a future release + +The `genPageTheme` function now includes an optional options object with an optional `fontColor` which defaults to white if not provided. diff --git a/.changeset/tricky-ravens-visit.md b/.changeset/tricky-ravens-visit.md new file mode 100644 index 0000000000..8500c9b64e --- /dev/null +++ b/.changeset/tricky-ravens-visit.md @@ -0,0 +1,6 @@ +--- +'@backstage/core-components': patch +'@backstage/plugin-catalog': patch +--- + +Updated to remove usage of the `bursts` object in the theme palette diff --git a/packages/theme/api-report.md b/packages/theme/api-report.md index 772e868635..92958c9c7e 100644 --- a/packages/theme/api-report.md +++ b/packages/theme/api-report.md @@ -116,7 +116,13 @@ export function createThemeOverrides(theme: BackstageTheme): Overrides; export const darkTheme: BackstageTheme; // @public -export function genPageTheme(colors: string[], shape: string): PageTheme; +export function genPageTheme(props: { + colors: string[]; + shape: string; + options?: { + fontColor?: string; + }; +}): PageTheme; // @public export const lightTheme: BackstageTheme; @@ -126,6 +132,7 @@ export type PageTheme = { colors: string[]; shape: string; backgroundImage: string; + fontColor: string; }; // @public diff --git a/packages/theme/src/pageTheme.ts b/packages/theme/src/pageTheme.ts index 9d9e07fc93..5b5eb24be9 100644 --- a/packages/theme/src/pageTheme.ts +++ b/packages/theme/src/pageTheme.ts @@ -64,22 +64,22 @@ export const colorVariants: Record = { * As the background shapes and colors are decorative, we place them onto the * page as a css background-image instead of an html element of its own. */ -export function genPageTheme(options: { +export function genPageTheme(props: { colors: string[]; shape: string; - fontColor?: string; + options?: { + fontColor?: string; + }; }): PageTheme { - const gradientColors = - options.colors.length === 1 - ? [options.colors[0], options.colors[0]] - : options.colors; + const { colors, shape, options } = props; + const gradientColors = colors.length === 1 ? [colors[0], colors[0]] : colors; const gradient = `linear-gradient(90deg, ${gradientColors.join(', ')})`; - const backgroundImage = `${options.shape}, ${gradient}`; - const fontColor = options.fontColor ?? '#FFFFFF'; + const backgroundImage = `${shape}, ${gradient}`; + const fontColor = options?.fontColor ?? '#FFFFFF'; return { - colors: options.colors, - shape: options.shape, + colors: colors, + shape: shape, backgroundImage: backgroundImage, fontColor: fontColor, }; From f281ad17c002b8ea8d9d96580548f40902212965 Mon Sep 17 00:00:00 2001 From: Tim Hansen Date: Fri, 27 May 2022 11:28:57 -0600 Subject: [PATCH 022/231] Build default Docker image on release Signed-off-by: Tim Hansen --- .changeset/blue-monkeys-explain.md | 6 ++ .github/workflows/deploy_docker-image.yml | 89 +++++++++++++++++++++ .github/workflows/deploy_packages.yml | 9 ++- .github/workflows/sync_release-manifest.yml | 13 ++- packages/create-app/src/createApp.ts | 8 ++ scripts/create-release-tag.js | 21 +---- 6 files changed, 117 insertions(+), 29 deletions(-) create mode 100644 .changeset/blue-monkeys-explain.md create mode 100644 .github/workflows/deploy_docker-image.yml diff --git a/.changeset/blue-monkeys-explain.md b/.changeset/blue-monkeys-explain.md new file mode 100644 index 0000000000..69382ff11d --- /dev/null +++ b/.changeset/blue-monkeys-explain.md @@ -0,0 +1,6 @@ +--- +'@backstage/create-app': patch +--- + +Adds the ability to define the Backstage app name using a `BACKSTAGE_APP_NAME` +environment variable when running `create-app`. diff --git a/.github/workflows/deploy_docker-image.yml b/.github/workflows/deploy_docker-image.yml new file mode 100644 index 0000000000..b0a2bc5286 --- /dev/null +++ b/.github/workflows/deploy_docker-image.yml @@ -0,0 +1,89 @@ +name: Build and push Docker Hub image +on: + repository_dispatch: + types: [release-published] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: checkout + uses: actions/checkout@v2 + with: + path: backstage + ref: v${{ github.event.client_payload.version }} + + - name: setup-node + uses: actions/setup-node@v1 + with: + node-version: 16.x + registry-url: https://registry.npmjs.org/ + + # Beginning of yarn setup, keep in sync between all workflows. + # TODO(Rugvip): move this to composite action once all features we use are supported + - name: use node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + registry-url: https://registry.npmjs.org/ # Needed for auth + + # Cache every node_modules folder inside the monorepo + - name: cache all node_modules + id: cache-modules + uses: actions/cache@v2 + with: + path: '**/node_modules' + # We use both yarn.lock and package.json as cache keys to ensure that + # changes to local monorepo packages bust the cache. + key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }} + + # If we get a cache hit for node_modules, there's no need to bring in the global + # yarn cache or run yarn install, as all dependencies will be installed already. + + - name: find location of global yarn cache + id: yarn-cache + if: steps.cache-modules.outputs.cache-hit != 'true' + run: echo "::set-output name=dir::$(yarn cache dir)" + + - name: cache global yarn cache + uses: actions/cache@v2 + if: steps.cache-modules.outputs.cache-hit != 'true' + with: + path: ${{ steps.yarn-cache.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + - name: yarn install + if: steps.cache-modules.outputs.cache-hit != 'true' + run: yarn install --frozen-lockfile + # End of yarn setup + + - name: create-app + run: yarn backstage-create-app + working-directory: ./packages/create-app + env: + BACKSTAGE_APP_NAME: example-app + + - name: yarn build + run: yarn build + working-directory: ./packages/create-app/example-app + + - name: Login to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Build and push + uses: docker/build-push-action@v2 + with: + context: './packages/create-app/example-app' + file: ./packages/create-app/example-app/packages/backend/Dockerfile + push: true + tags: ${{ secrets.DOCKER_HUB_USERNAME }}/backstage:${{ github.event.client_payload.version }} + cache-from: type=registry,ref=${{ secrets.DOCKER_HUB_USERNAME }}/backstage:buildcache + cache-to: type=registry,ref=${{ secrets.DOCKER_HUB_USERNAME }}/backstage:buildcache,mode=max diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml index b63507df0c..29a3c8d80d 100644 --- a/.github/workflows/deploy_packages.yml +++ b/.github/workflows/deploy_packages.yml @@ -209,7 +209,7 @@ jobs: # Grabs the version in the root package.json and creates a tag on GitHub - name: Create a release tag id: create_tag - run: node scripts/create-release-tag.js --dispatch-workflows + run: node scripts/create-release-tag.js env: GITHUB_TOKEN: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }} @@ -219,6 +219,13 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }} + - name: Dispatch repository event + uses: peter-evans/repository-dispatch@v2 + with: + token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }} + event-type: release-published + client-payload: '{"version": "${{ steps.create_tag.outputs.version }}"}' + # Notify everyone about this great new release :D - name: Discord notification uses: Ilshidur/action-discord@0.3.2 diff --git a/.github/workflows/sync_release-manifest.yml b/.github/workflows/sync_release-manifest.yml index 816a3e632f..8cf6991aaf 100644 --- a/.github/workflows/sync_release-manifest.yml +++ b/.github/workflows/sync_release-manifest.yml @@ -1,10 +1,7 @@ name: Sync Release Manifest on: - workflow_dispatch: - inputs: - version: - description: Version number, without any 'v' prefix - required: true + repository_dispatch: + types: [release-published] jobs: create-new-version: @@ -23,7 +20,7 @@ jobs: with: path: backstage # 'v' prefix is added here for the tag, we keep it out of the manifest logic - ref: v${{ github.event.inputs.version }} + ref: v${{ github.event.client_payload.version }} # Checkout backstage/versions into /backstage/versions, which is where store the output - name: Checkout versions @@ -44,10 +41,10 @@ jobs: cd backstage mkdir -p scripts wget -O scripts/assemble-manifest.js https://raw.githubusercontent.com/backstage/backstage/master/scripts/assemble-manifest.js - node scripts/assemble-manifest.js ${{ github.event.inputs.version }} + node scripts/assemble-manifest.js ${{ github.event.client_payload.version }} cd versions git add . - git commit -am "${{ github.event.inputs.version }}" + git commit -am "${{ github.event.client_payload.version }}" git push - name: Dispatch update-helper update diff --git a/packages/create-app/src/createApp.ts b/packages/create-app/src/createApp.ts index 824d1d967e..7cf589e5f8 100644 --- a/packages/create-app/src/createApp.ts +++ b/packages/create-app/src/createApp.ts @@ -49,6 +49,14 @@ export default async (opts: OptionValues): Promise => { } return true; }, + when: (a: Answers) => { + const envName = process.env.BACKSTAGE_APP_NAME; + if (envName) { + a.name = envName; + return false; + } + return true; + }, }, ]); diff --git a/scripts/create-release-tag.js b/scripts/create-release-tag.js index 637467f285..a2706c578f 100755 --- a/scripts/create-release-tag.js +++ b/scripts/create-release-tag.js @@ -57,22 +57,7 @@ async function createGitTag(octokit, commitSha, tagName) { } } -async function dispatchReleaseWorkflows(octokit, releaseVersion) { - console.log('Dispatching release manifest sync'); - await octokit.actions.createWorkflowDispatch({ - owner: 'backstage', - repo: 'backstage', - workflow_id: 'sync_release-manifest.yml', - ref: 'master', - inputs: { - version: releaseVersion, - }, - }); -} - async function main() { - const shouldDispatch = process.argv.includes('--dispatch-workflows'); - if (!process.env.GITHUB_SHA) { throw new Error('GITHUB_SHA is not set'); } @@ -90,11 +75,7 @@ async function main() { await createGitTag(octokit, commitSha, tagName); console.log(`::set-output name=tag_name::${tagName}`); - - if (shouldDispatch) { - console.log(`Dispatching release workflows for ${tagName}`); - await dispatchReleaseWorkflows(octokit, releaseVersion); - } + console.log(`::set-output name=version::${releaseVersion}`); } main().catch(error => { From 381a44edce53db61cc44ba4f964f48225a56d0ad Mon Sep 17 00:00:00 2001 From: Tim Hansen Date: Mon, 30 May 2022 15:12:54 -0600 Subject: [PATCH 023/231] npx, remove Docker cache Signed-off-by: Tim Hansen --- .github/workflows/deploy_docker-image.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/deploy_docker-image.yml b/.github/workflows/deploy_docker-image.yml index b0a2bc5286..13269ce4d7 100644 --- a/.github/workflows/deploy_docker-image.yml +++ b/.github/workflows/deploy_docker-image.yml @@ -60,8 +60,7 @@ jobs: # End of yarn setup - name: create-app - run: yarn backstage-create-app - working-directory: ./packages/create-app + run: npx @backstage/create-app env: BACKSTAGE_APP_NAME: example-app @@ -85,5 +84,3 @@ jobs: file: ./packages/create-app/example-app/packages/backend/Dockerfile push: true tags: ${{ secrets.DOCKER_HUB_USERNAME }}/backstage:${{ github.event.client_payload.version }} - cache-from: type=registry,ref=${{ secrets.DOCKER_HUB_USERNAME }}/backstage:buildcache - cache-to: type=registry,ref=${{ secrets.DOCKER_HUB_USERNAME }}/backstage:buildcache,mode=max From 0f300f1e82d3d66936e88912b3814e87dfb8d1a3 Mon Sep 17 00:00:00 2001 From: Tim Hansen Date: Thu, 23 Jun 2022 13:28:13 -0600 Subject: [PATCH 024/231] Use GitHub container registry Signed-off-by: Tim Hansen --- .github/workflows/deploy_docker-image.yml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/.github/workflows/deploy_docker-image.yml b/.github/workflows/deploy_docker-image.yml index 13269ce4d7..6cb97d1a9e 100644 --- a/.github/workflows/deploy_docker-image.yml +++ b/.github/workflows/deploy_docker-image.yml @@ -66,13 +66,14 @@ jobs: - name: yarn build run: yarn build - working-directory: ./packages/create-app/example-app + working-directory: ./example-app - - name: Login to Docker Hub + - name: Login to GitHub Container Registry uses: docker/login-action@v1 with: - username: ${{ secrets.DOCKER_HUB_USERNAME }} - password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 @@ -80,7 +81,9 @@ jobs: - name: Build and push uses: docker/build-push-action@v2 with: - context: './packages/create-app/example-app' - file: ./packages/create-app/example-app/packages/backend/Dockerfile + context: './example-app' + file: ./example-app/packages/backend/Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_USERNAME }}/backstage:${{ github.event.client_payload.version }} + tags: | + ghcr.io/${{ github.repository_owner }}/backstage:latest + ghcr.io/${{ github.repository_owner }}/backstage:${{ github.event.client_payload.version }} From 64af1b47563c0ef8e70a80098788cb0595dd5656 Mon Sep 17 00:00:00 2001 From: planeiii Date: Fri, 24 Jun 2022 08:56:30 -0500 Subject: [PATCH 025/231] chore: added types to Promise.any polyfill Signed-off-by: planeiii --- plugins/jenkins-backend/src/service/jenkinsApi.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/plugins/jenkins-backend/src/service/jenkinsApi.ts b/plugins/jenkins-backend/src/service/jenkinsApi.ts index 8de2609037..eaeff9096c 100644 --- a/plugins/jenkins-backend/src/service/jenkinsApi.ts +++ b/plugins/jenkins-backend/src/service/jenkinsApi.ts @@ -38,13 +38,18 @@ const anyPromise = (any => { } // reverse promise resolution (rejects become resolves and visa versa) - const reverse = (promise: Promise) => - new Promise((resolve, reject) => + const reverse = (promise: Promise): Promise => + new Promise((resolve, reject) => Promise.resolve(promise).then(reject, resolve), ); - return (iterable: Promise[]) => - reverse(Promise.all([...iterable].map(reverse))); + return ( + iterable: Iterable>, + ): Promise => + Promise.all([...iterable].map(reverse)).then( + results => reverse(Promise.resolve(results[0])), + reverse, + ); })(Promise.any); export class JenkinsApiImpl { From 888731df92e6264a8f3325b8a4550bd2f76c7d7a Mon Sep 17 00:00:00 2001 From: sjeyaraman Date: Sun, 5 Jun 2022 12:40:43 -0700 Subject: [PATCH 026/231] customize unregister entity menuitem Signed-off-by: sjeyaraman --- .../app/src/components/catalog/EntityPage.tsx | 15 ++++++- .../EntityContextMenu.test.tsx | 25 ++++++++++- .../EntityContextMenu/EntityContextMenu.tsx | 43 +++++++++++++------ .../components/EntityLayout/EntityLayout.tsx | 4 +- 4 files changed, 70 insertions(+), 17 deletions(-) diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index 1958aabd2e..4318e68e74 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -165,9 +165,22 @@ const EntityLayoutWrapper = (props: { children?: ReactNode }) => { ]; }, []); + type VisibleType = 'visible' | 'hidden' | 'disabled'; + + type contextMenuOptions = { + disableUnregister: boolean | VisibleType; + }; + + const options: contextMenuOptions = { + disableUnregister: false, + }; + return ( <> - + {props.children} { it('should call onUnregisterEntity on button click', async () => { const mockCallback = jest.fn(); - await render( { expect(mockCallback).toBeCalled(); }); + it('check Unregister entity button is disabled', async () => { + const mockCallback = jest.fn(); + + const { getByText } = await render( + {}} + />, + ); + + const button = await screen.findByTestId('menu-button'); + expect(button).toBeInTheDocument(); + fireEvent.click(button); + + const unregister = await screen.getByText('Unregister entity'); + expect(unregister).toBeInTheDocument(); + + const unregisterSpanItem = getByText(/Unregister entity/); + const unregisterMenuListItem = + unregisterSpanItem?.parentElement?.parentElement; + expect(unregisterMenuListItem).toHaveAttribute('aria-disabled'); + }); + it('should call onInspectEntity on button click', async () => { const mockCallback = jest.fn(); diff --git a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx index db50eeab84..0a5e2e1bfe 100644 --- a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx +++ b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx @@ -55,9 +55,11 @@ interface ExtraContextMenuItem { onClick: () => void; } +type VisibleType = 'visible' | 'hidden' | 'disabled'; + // unstable context menu option, eg: disable the unregister entity menu interface contextMenuOptions { - disableUnregister: boolean; + disableUnregister: boolean | VisibleType; } interface EntityContextMenuProps { @@ -106,11 +108,35 @@ export function EntityContextMenu(props: EntityContextMenuProps) { , ]; + const isBoolean = + typeof UNSTABLE_contextMenuOptions?.disableUnregister === 'boolean'; + const disableUnregister = (!unregisterPermission.allowed || - UNSTABLE_contextMenuOptions?.disableUnregister) ?? + (isBoolean + ? UNSTABLE_contextMenuOptions?.disableUnregister + : UNSTABLE_contextMenuOptions?.disableUnregister === 'disabled')) ?? false; + let unregisterButton = <>; + + if (UNSTABLE_contextMenuOptions?.disableUnregister !== 'hidden') { + unregisterButton = ( + { + onClose(); + onUnregisterEntity(); + }} + disabled={disableUnregister} + > + + + + + + ); + } + return ( <> {extraItems} - { - onClose(); - onUnregisterEntity(); - }} - disabled={disableUnregister} - > - - - - - + {unregisterButton} { onClose(); diff --git a/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx b/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx index 693137fe21..4cbb72db5c 100644 --- a/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx +++ b/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx @@ -142,9 +142,11 @@ interface ExtraContextMenuItem { onClick: () => void; } +type VisibleType = 'visible' | 'hidden' | 'disabled'; + // unstable context menu option, eg: disable the unregister entity menu interface contextMenuOptions { - disableUnregister: boolean; + disableUnregister: boolean | VisibleType; } /** @public */ From 06905f4ed0499034c24e276e156520043c53348b Mon Sep 17 00:00:00 2001 From: sjeyaraman Date: Sun, 5 Jun 2022 17:10:23 -0700 Subject: [PATCH 027/231] add-change-set Signed-off-by: sjeyaraman --- .changeset/cold-apples-film.md | 9 +++++++++ packages/app/src/components/catalog/EntityPage.tsx | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 .changeset/cold-apples-film.md diff --git a/.changeset/cold-apples-film.md b/.changeset/cold-apples-film.md new file mode 100644 index 0000000000..d8c7ec283d --- /dev/null +++ b/.changeset/cold-apples-film.md @@ -0,0 +1,9 @@ +--- +'example-app': patch +'@backstage/plugin-catalog': patch +--- + +Adding ability to customize the "unregister entity" menu item in the entity context menu on the entity page with options 'visible','hidden','disabled'. +With this three new options, one can hide the "unregister entity" menu item from the list, disable or keep it enabled. + +The boolean input for "unregister entity" will be deprecated later in favour of the above three options. diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index 4318e68e74..24ca1b900b 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -172,7 +172,7 @@ const EntityLayoutWrapper = (props: { children?: ReactNode }) => { }; const options: contextMenuOptions = { - disableUnregister: false, + disableUnregister: 'visible', }; return ( From 258057a4b91ccfb3077790df48d5eba40f735b30 Mon Sep 17 00:00:00 2001 From: sjeyaraman Date: Fri, 24 Jun 2022 14:45:13 -0700 Subject: [PATCH 028/231] refactor-unregister-entity Signed-off-by: sjeyaraman --- ...cold-apples-film.md => thick-cats-kiss.md} | 4 +- .../app/src/components/catalog/EntityPage.tsx | 9 +-- .../EntityContextMenu.test.tsx | 24 ------ .../EntityContextMenu/EntityContextMenu.tsx | 49 +++--------- .../UnregisterEntity.test.tsx | 80 +++++++++++++++++++ .../EntityContextMenu/UnregisterEntity.tsx | 72 +++++++++++++++++ .../components/EntityLayout/EntityLayout.tsx | 6 +- .../src/components/EntityLayout/index.ts | 6 +- 8 files changed, 173 insertions(+), 77 deletions(-) rename .changeset/{cold-apples-film.md => thick-cats-kiss.md} (62%) create mode 100644 plugins/catalog/src/components/EntityContextMenu/UnregisterEntity.test.tsx create mode 100644 plugins/catalog/src/components/EntityContextMenu/UnregisterEntity.tsx diff --git a/.changeset/cold-apples-film.md b/.changeset/thick-cats-kiss.md similarity index 62% rename from .changeset/cold-apples-film.md rename to .changeset/thick-cats-kiss.md index d8c7ec283d..8817115ec3 100644 --- a/.changeset/cold-apples-film.md +++ b/.changeset/thick-cats-kiss.md @@ -1,9 +1,7 @@ --- -'example-app': patch '@backstage/plugin-catalog': patch --- -Adding ability to customize the "unregister entity" menu item in the entity context menu on the entity page with options 'visible','hidden','disabled'. -With this three new options, one can hide the "unregister entity" menu item from the list, disable or keep it enabled. +Adding ability to customize the "unregister entity" menu item in the entity context menu on the entity page with options 'visible','hidden','disabled'.With this three new options, one can hide the "unregister entity" menu item from the list, disable or keep it enabled. The boolean input for "unregister entity" will be deprecated later in favour of the above three options. diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index 24ca1b900b..c2ae001060 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -43,6 +43,7 @@ import { } from '@backstage/plugin-azure-devops'; import { EntityBadgesDialog } from '@backstage/plugin-badges'; import { + EntityContextMenuOptions, EntityAboutCard, EntityDependsOnComponentsCard, EntityDependsOnResourcesCard, @@ -165,13 +166,7 @@ const EntityLayoutWrapper = (props: { children?: ReactNode }) => { ]; }, []); - type VisibleType = 'visible' | 'hidden' | 'disabled'; - - type contextMenuOptions = { - disableUnregister: boolean | VisibleType; - }; - - const options: contextMenuOptions = { + const options: EntityContextMenuOptions = { disableUnregister: 'visible', }; diff --git a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx index 9906cd9c12..5d995828e6 100644 --- a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx +++ b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx @@ -60,30 +60,6 @@ describe('ComponentContextMenu', () => { expect(mockCallback).toBeCalled(); }); - it('check Unregister entity button is disabled', async () => { - const mockCallback = jest.fn(); - - const { getByText } = await render( - {}} - />, - ); - - const button = await screen.findByTestId('menu-button'); - expect(button).toBeInTheDocument(); - fireEvent.click(button); - - const unregister = await screen.getByText('Unregister entity'); - expect(unregister).toBeInTheDocument(); - - const unregisterSpanItem = getByText(/Unregister entity/); - const unregisterMenuListItem = - unregisterSpanItem?.parentElement?.parentElement; - expect(unregisterMenuListItem).toHaveAttribute('aria-disabled'); - }); - it('should call onInspectEntity on button click', async () => { const mockCallback = jest.fn(); diff --git a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx index 0a5e2e1bfe..94df8dac29 100644 --- a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx +++ b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx @@ -24,7 +24,6 @@ import { Popover, } from '@material-ui/core'; import { makeStyles } from '@material-ui/core/styles'; -import CancelIcon from '@material-ui/icons/Cancel'; import BugReportIcon from '@material-ui/icons/BugReport'; import MoreVert from '@material-ui/icons/MoreVert'; import React, { useState } from 'react'; @@ -32,6 +31,8 @@ import { IconComponent } from '@backstage/core-plugin-api'; import { useEntityPermission } from '@backstage/plugin-catalog-react'; import { catalogEntityDeletePermission } from '@backstage/plugin-catalog-common'; import { BackstageTheme } from '@backstage/theme'; +import { UnregisterEntity, UnregisterEntityOptions } from './UnregisterEntity'; + /** @public */ export type EntityContextMenuClassKey = 'button'; @@ -55,16 +56,9 @@ interface ExtraContextMenuItem { onClick: () => void; } -type VisibleType = 'visible' | 'hidden' | 'disabled'; - -// unstable context menu option, eg: disable the unregister entity menu -interface contextMenuOptions { - disableUnregister: boolean | VisibleType; -} - interface EntityContextMenuProps { UNSTABLE_extraContextMenuItems?: ExtraContextMenuItem[]; - UNSTABLE_contextMenuOptions?: contextMenuOptions; + UNSTABLE_contextMenuOptions?: UnregisterEntityOptions; onUnregisterEntity: () => void; onInspectEntity: () => void; } @@ -81,6 +75,7 @@ export function EntityContextMenu(props: EntityContextMenuProps) { const unregisterPermission = useEntityPermission( catalogEntityDeletePermission, ); + const isAllowed = unregisterPermission.allowed; const onOpen = (event: React.SyntheticEvent) => { setAnchorEl(event.currentTarget); @@ -108,35 +103,6 @@ export function EntityContextMenu(props: EntityContextMenuProps) { , ]; - const isBoolean = - typeof UNSTABLE_contextMenuOptions?.disableUnregister === 'boolean'; - - const disableUnregister = - (!unregisterPermission.allowed || - (isBoolean - ? UNSTABLE_contextMenuOptions?.disableUnregister - : UNSTABLE_contextMenuOptions?.disableUnregister === 'disabled')) ?? - false; - - let unregisterButton = <>; - - if (UNSTABLE_contextMenuOptions?.disableUnregister !== 'hidden') { - unregisterButton = ( - { - onClose(); - onUnregisterEntity(); - }} - disabled={disableUnregister} - > - - - - - - ); - } - return ( <> {extraItems} - {unregisterButton} + { onClose(); diff --git a/plugins/catalog/src/components/EntityContextMenu/UnregisterEntity.test.tsx b/plugins/catalog/src/components/EntityContextMenu/UnregisterEntity.test.tsx new file mode 100644 index 0000000000..70b75c7bae --- /dev/null +++ b/plugins/catalog/src/components/EntityContextMenu/UnregisterEntity.test.tsx @@ -0,0 +1,80 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { EntityProvider } from '@backstage/plugin-catalog-react'; +import { permissionApiRef } from '@backstage/plugin-permission-react'; +import { + MockPermissionApi, + renderInTestApp, + TestApiProvider, +} from '@backstage/test-utils'; +import { fireEvent, screen } from '@testing-library/react'; +import * as React from 'react'; +import { UnregisterEntity } from './UnregisterEntity'; + +const mockPermissionApi = new MockPermissionApi(); + +function render(children: React.ReactNode) { + return renderInTestApp( + + + , + ); +} + +describe('ComponentContextMenu', () => { + it('should call onUnregisterEntity on button click', async () => { + const mockCallback = jest.fn(); + await render( + {}} + />, + ); + + const unregister = await screen.findByText('Unregister entity'); + expect(unregister).toBeInTheDocument(); + fireEvent.click(unregister); + + expect(mockCallback).toBeCalled(); + }); + + it('check Unregister entity button is disabled', async () => { + const mockCallback = jest.fn(); + + const { getByText } = await render( + {}} + />, + ); + + const unregister = await screen.getByText('Unregister entity'); + expect(unregister).toBeInTheDocument(); + + const unregisterSpanItem = getByText(/Unregister entity/); + const unregisterMenuListItem = + unregisterSpanItem?.parentElement?.parentElement; + expect(unregisterMenuListItem).toHaveAttribute('aria-disabled'); + }); +}); diff --git a/plugins/catalog/src/components/EntityContextMenu/UnregisterEntity.tsx b/plugins/catalog/src/components/EntityContextMenu/UnregisterEntity.tsx new file mode 100644 index 0000000000..05044bf935 --- /dev/null +++ b/plugins/catalog/src/components/EntityContextMenu/UnregisterEntity.tsx @@ -0,0 +1,72 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; +import { ListItemIcon, ListItemText, MenuItem } from '@material-ui/core'; +import CancelIcon from '@material-ui/icons/Cancel'; + +type VisibleType = 'visible' | 'hidden' | 'disable'; + +export type UnregisterEntityOptions = { + disableUnregister: boolean | VisibleType; +}; + +interface UnregisterEntityProps { + unregisterEntityOptions?: UnregisterEntityOptions; + isUnregisterAllowed: boolean; + onUnregisterEntity: () => void; + onClose: () => void; +} + +export function UnregisterEntity(props: UnregisterEntityProps) { + const { + unregisterEntityOptions, + isUnregisterAllowed, + onUnregisterEntity, + onClose, + } = props; + + const isBoolean = + typeof unregisterEntityOptions?.disableUnregister === 'boolean'; + + const isDisabled = + (!isUnregisterAllowed || + (isBoolean + ? !!unregisterEntityOptions?.disableUnregister + : unregisterEntityOptions?.disableUnregister === 'disable')) ?? + false; + + let unregisterButton = <>; + + if (unregisterEntityOptions?.disableUnregister !== 'hidden') { + unregisterButton = ( + { + onClose(); + onUnregisterEntity(); + }} + disabled={isDisabled} + > + + + + + + ); + } + + return <>{unregisterButton}; +} diff --git a/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx b/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx index 4cbb72db5c..5d82b5ccab 100644 --- a/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx +++ b/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx @@ -142,17 +142,17 @@ interface ExtraContextMenuItem { onClick: () => void; } -type VisibleType = 'visible' | 'hidden' | 'disabled'; +type VisibleType = 'visible' | 'hidden' | 'disable'; // unstable context menu option, eg: disable the unregister entity menu -interface contextMenuOptions { +export interface EntityContextMenuOptions { disableUnregister: boolean | VisibleType; } /** @public */ export interface EntityLayoutProps { UNSTABLE_extraContextMenuItems?: ExtraContextMenuItem[]; - UNSTABLE_contextMenuOptions?: contextMenuOptions; + UNSTABLE_contextMenuOptions?: EntityContextMenuOptions; children?: React.ReactNode; NotFoundComponent?: React.ReactNode; } diff --git a/plugins/catalog/src/components/EntityLayout/index.ts b/plugins/catalog/src/components/EntityLayout/index.ts index 251d213637..73a58dfddc 100644 --- a/plugins/catalog/src/components/EntityLayout/index.ts +++ b/plugins/catalog/src/components/EntityLayout/index.ts @@ -15,4 +15,8 @@ */ export { EntityLayout } from './EntityLayout'; -export type { EntityLayoutProps, EntityLayoutRouteProps } from './EntityLayout'; +export type { + EntityLayoutProps, + EntityLayoutRouteProps, + EntityContextMenuOptions, +} from './EntityLayout'; From 79b5110b99b520733dc00779558426ad7b3c941a Mon Sep 17 00:00:00 2001 From: sjeyaraman Date: Fri, 24 Jun 2022 15:09:54 -0700 Subject: [PATCH 029/231] fix-tsc Signed-off-by: sjeyaraman --- .../src/components/EntityContextMenu/EntityContextMenu.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx index 9906cd9c12..0e981bb1fc 100644 --- a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx +++ b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx @@ -65,7 +65,7 @@ describe('ComponentContextMenu', () => { const { getByText } = await render( {}} />, From 70de933e56739a231c0462fd570d52630aed55ce Mon Sep 17 00:00:00 2001 From: sjeyaraman Date: Sun, 5 Jun 2022 12:40:43 -0700 Subject: [PATCH 030/231] customize unregister entity menuitem Signed-off-by: sjeyaraman --- .../EntityContextMenu.test.tsx | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx index 5d995828e6..9906cd9c12 100644 --- a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx +++ b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx @@ -60,6 +60,30 @@ describe('ComponentContextMenu', () => { expect(mockCallback).toBeCalled(); }); + it('check Unregister entity button is disabled', async () => { + const mockCallback = jest.fn(); + + const { getByText } = await render( + {}} + />, + ); + + const button = await screen.findByTestId('menu-button'); + expect(button).toBeInTheDocument(); + fireEvent.click(button); + + const unregister = await screen.getByText('Unregister entity'); + expect(unregister).toBeInTheDocument(); + + const unregisterSpanItem = getByText(/Unregister entity/); + const unregisterMenuListItem = + unregisterSpanItem?.parentElement?.parentElement; + expect(unregisterMenuListItem).toHaveAttribute('aria-disabled'); + }); + it('should call onInspectEntity on button click', async () => { const mockCallback = jest.fn(); From ff5b2f99477bc530a66d3a2f05e6a0472794ba56 Mon Sep 17 00:00:00 2001 From: sjeyaraman Date: Sun, 5 Jun 2022 17:10:23 -0700 Subject: [PATCH 031/231] add-change-set Signed-off-by: sjeyaraman --- .changeset/cold-apples-film.md | 9 +++++++++ packages/app/src/components/catalog/EntityPage.tsx | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 .changeset/cold-apples-film.md diff --git a/.changeset/cold-apples-film.md b/.changeset/cold-apples-film.md new file mode 100644 index 0000000000..d8c7ec283d --- /dev/null +++ b/.changeset/cold-apples-film.md @@ -0,0 +1,9 @@ +--- +'example-app': patch +'@backstage/plugin-catalog': patch +--- + +Adding ability to customize the "unregister entity" menu item in the entity context menu on the entity page with options 'visible','hidden','disabled'. +With this three new options, one can hide the "unregister entity" menu item from the list, disable or keep it enabled. + +The boolean input for "unregister entity" will be deprecated later in favour of the above three options. diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index c2ae001060..743dea29e4 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -165,7 +165,7 @@ const EntityLayoutWrapper = (props: { children?: ReactNode }) => { }, ]; }, []); - + const options: EntityContextMenuOptions = { disableUnregister: 'visible', }; From ba8b7f594045bf49748cd801d777f5a4161b2e9b Mon Sep 17 00:00:00 2001 From: sjeyaraman Date: Fri, 24 Jun 2022 15:09:54 -0700 Subject: [PATCH 032/231] fix-tsc Signed-off-by: sjeyaraman --- .../src/components/EntityContextMenu/EntityContextMenu.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx index 9906cd9c12..0e981bb1fc 100644 --- a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx +++ b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.test.tsx @@ -65,7 +65,7 @@ describe('ComponentContextMenu', () => { const { getByText } = await render( {}} />, From 45e408ce79218b44d94223b953ad04b819b4ecd5 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Tue, 28 Jun 2022 11:26:37 +0200 Subject: [PATCH 033/231] feat(search-backend-module-pg): improve error handling Co-authored-by: Emma Indal Signed-off-by: Camila Belo --- .../src/PgSearchEngine/PgSearchEngine.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts index bf98c58de9..d8128f8568 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts @@ -15,6 +15,7 @@ */ import { PluginDatabaseManager } from '@backstage/backend-common'; import { SearchEngine } from '@backstage/plugin-search-backend-node'; +import { MissingIndexError } from '@backstage/plugin-search-backend-node'; import { SearchQuery, IndexableResultSet, @@ -92,6 +93,12 @@ export class PgSearchEngine implements SearchEngine { this.databaseStore.query(tx, pgQuery), ); + if (!rows.length) { + throw new MissingIndexError( + `Missing index for ${pgQuery.types}. This means there are no documents to search through.`, + ); + } + // We requested one result more than the page size to know whether there is // another page. const { page } = decodePageCursor(query.pageCursor); From 8e63e71b2cb02a23c509fbe62b2d4edd6f7ea4d5 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Tue, 28 Jun 2022 11:45:10 +0200 Subject: [PATCH 034/231] feat(search-backend-node): improve error handling Co-authored-by: Emma Indal Signed-off-by: Camila Belo --- .../src/engines/LunrSearchEngine.test.ts | 13 +++++ .../src/engines/LunrSearchEngine.ts | 53 +++++++++++-------- 2 files changed, 44 insertions(+), 22 deletions(-) diff --git a/plugins/search-backend-node/src/engines/LunrSearchEngine.test.ts b/plugins/search-backend-node/src/engines/LunrSearchEngine.test.ts index 098d1e8b16..0bc2e223a6 100644 --- a/plugins/search-backend-node/src/engines/LunrSearchEngine.test.ts +++ b/plugins/search-backend-node/src/engines/LunrSearchEngine.test.ts @@ -949,6 +949,19 @@ describe('LunrSearchEngine', () => { previousPageCursor: undefined, }); }); + + it('should throws missing index error', async () => { + await expect( + async () => + await testLunrSearchEngine.query({ + term: 'testTerm', + types: ['unknown'], + filters: {}, + }), + ).rejects.toThrow( + 'Missing index for unknown. This means there are no documents to search through', + ); + }); }); it('should return previous page cursor if on another page', async () => { diff --git a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts index 03cb421653..fcf30f1844 100644 --- a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts +++ b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts @@ -21,6 +21,7 @@ import { QueryTranslator, SearchEngine, } from '@backstage/plugin-search-common'; +import { MissingIndexError } from '../errors'; import lunr from 'lunr'; import { v4 as uuid } from 'uuid'; import { Logger } from 'winston'; @@ -163,30 +164,38 @@ export class LunrSearchEngine implements SearchEngine { const results: LunrResultEnvelope[] = []; + const indexKeys = Object.keys(this.lunrIndices).filter( + type => !documentTypes || documentTypes.includes(type), + ); + + if (!indexKeys.length) { + throw new MissingIndexError( + `Missing index for ${documentTypes?.toString()}. This means there are no documents to search through.`, + ); + } + // Iterate over the filtered list of this.lunrIndex keys. - Object.keys(this.lunrIndices) - .filter(type => !documentTypes || documentTypes.includes(type)) - .forEach(type => { - try { - results.push( - ...this.lunrIndices[type].query(lunrQueryBuilder).map(result => { - return { - result: result, - type: type, - }; - }), - ); - } catch (err) { - // if a field does not exist on a index, we can see that as a no-match - if ( - err instanceof Error && - err.message.startsWith('unrecognised field') - ) { - return; - } - throw err; + indexKeys.forEach(type => { + try { + results.push( + ...this.lunrIndices[type].query(lunrQueryBuilder).map(result => { + return { + result: result, + type: type, + }; + }), + ); + } catch (err) { + // if a field does not exist on a index, we can see that as a no-match + if ( + err instanceof Error && + err.message.startsWith('unrecognised field') + ) { + return; } - }); + throw err; + } + }); // Sort results. results.sort((doc1, doc2) => { From 369a9205957601c7326fd8c26befbf74c0001ced Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Tue, 28 Jun 2022 13:16:14 +0200 Subject: [PATCH 035/231] feat(search-backend-module-pg): test error handling Co-authored-by: Emma Indal Signed-off-by: Camila Belo --- .../src/PgSearchEngine/PgSearchEngine.test.ts | 15 +++++++++++++++ .../src/PgSearchEngine/PgSearchEngine.ts | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts index 3ed002567e..e106cd6f06 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts @@ -271,6 +271,21 @@ describe('PgSearchEngine', () => { limit: 26, }); }); + + it('should throws missing index error', async () => { + database.transaction.mockImplementation(fn => fn(tx)); + database.query.mockResolvedValue([]); + await expect( + async () => + await searchEngine.query({ + term: 'testTerm', + types: ['unknown'], + filters: {}, + }), + ).rejects.toThrow( + 'Missing index for unknown. This means there are no documents to search through', + ); + }); }); }); diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts index d8128f8568..065f25878c 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts @@ -93,7 +93,7 @@ export class PgSearchEngine implements SearchEngine { this.databaseStore.query(tx, pgQuery), ); - if (!rows.length) { + if (pgQuery?.types && !rows.length) { throw new MissingIndexError( `Missing index for ${pgQuery.types}. This means there are no documents to search through.`, ); From 19bcc9d79572de55ffbd2102e7d16536f2f8494f Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Tue, 28 Jun 2022 13:46:13 +0200 Subject: [PATCH 036/231] feat(search-backend-module-es): test error handling Co-authored-by: Emma Indal Signed-off-by: Camila Belo --- .../engines/ElasticSearchSearchEngine.test.ts | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.test.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.test.ts index cc88f456b6..d794ea668d 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.test.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.test.ts @@ -793,6 +793,29 @@ describe('ElasticSearchSearchEngine', () => { elasticSearchQuerySpy.mockClear(); }); + + it('should throws missing index error', async () => { + jest.spyOn(clientWrapper, 'search').mockRejectedValue({ + meta: { + body: { + error: { + type: 'index_not_found_exception', + }, + }, + }, + }); + + await expect( + async () => + await testSearchEngine.query({ + term: 'testTerm', + types: ['unknown'], + filters: {}, + }), + ).rejects.toThrow( + 'Missing index for unknown__search. This means there are no documents to search through', + ); + }); }); describe('indexer', () => { From 06f9999f4bca33ac4a2811362cf35e1169b4e6b4 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Tue, 28 Jun 2022 13:47:58 +0200 Subject: [PATCH 037/231] feat(search-backend-node): check types in error handling Co-authored-by: Emma Indal Signed-off-by: Camila Belo --- plugins/search-backend-node/src/engines/LunrSearchEngine.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts index fcf30f1844..a06a565d3b 100644 --- a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts +++ b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts @@ -168,7 +168,7 @@ export class LunrSearchEngine implements SearchEngine { type => !documentTypes || documentTypes.includes(type), ); - if (!indexKeys.length) { + if (documentTypes?.length && !indexKeys.length) { throw new MissingIndexError( `Missing index for ${documentTypes?.toString()}. This means there are no documents to search through.`, ); From 5a36f20cc655ea5b4e42646fd7808d059e027680 Mon Sep 17 00:00:00 2001 From: planeiii Date: Tue, 28 Jun 2022 09:07:28 -0500 Subject: [PATCH 038/231] chore: added standards-compliant Promise.any implementation Signed-off-by: planeiii --- plugins/jenkins-backend/package.json | 1 + .../jenkins-backend/src/service/jenkinsApi.ts | 28 ++++--------------- yarn.lock | 5 ++++ 3 files changed, 12 insertions(+), 22 deletions(-) diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index 1ab98c3255..46e9ed78a0 100644 --- a/plugins/jenkins-backend/package.json +++ b/plugins/jenkins-backend/package.json @@ -37,6 +37,7 @@ "express": "^4.17.1", "express-promise-router": "^4.1.0", "jenkins": "^0.28.1", + "promise-any-polyfill": "^1.0.1", "winston": "^3.2.1", "yn": "^4.0.0" }, diff --git a/plugins/jenkins-backend/src/service/jenkinsApi.ts b/plugins/jenkins-backend/src/service/jenkinsApi.ts index eaeff9096c..ae2fa0f7b5 100644 --- a/plugins/jenkins-backend/src/service/jenkinsApi.ts +++ b/plugins/jenkins-backend/src/service/jenkinsApi.ts @@ -30,27 +30,11 @@ import { import { jenkinsExecutePermission } from '@backstage/plugin-jenkins-common'; import { NotAllowedError } from '@backstage/errors'; -// polyfill Promise.any for Node v14 -const anyPromise = (any => { - if (any) { - // bind is required by tsc - return any.bind(Promise); - } - - // reverse promise resolution (rejects become resolves and visa versa) - const reverse = (promise: Promise): Promise => - new Promise((resolve, reject) => - Promise.resolve(promise).then(reject, resolve), - ); - - return ( - iterable: Iterable>, - ): Promise => - Promise.all([...iterable].map(reverse)).then( - results => reverse(Promise.resolve(results[0])), - reverse, - ); -})(Promise.any); +if (!Promise.any) { + (async () => { + await import('promise-any-polyfill'); + })(); +} export class JenkinsApiImpl { private static readonly lastBuildTreeSpec = `lastBuild[ @@ -99,7 +83,7 @@ export class JenkinsApiImpl { if (branches) { // Assume jenkinsInfo.jobFullName is a folder which contains one job per branch. // TODO: extract a strategy interface for this - const job = await anyPromise( + const job = await Promise.any( branches.map(branch => client.job.get({ name: `${jenkinsInfo.jobFullName}/${branch}`, diff --git a/yarn.lock b/yarn.lock index bd2b1ff7bc..8d7fe5fa30 100644 --- a/yarn.lock +++ b/yarn.lock @@ -20902,6 +20902,11 @@ promise-all-reject-late@^1.0.0: resolved "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== +promise-any-polyfill@^1.0.1: + version "1.0.1" + resolved "https://artifactory.thousandeyes.com/artifactory/api/npm/npm/promise-any-polyfill/-/promise-any-polyfill-1.0.1.tgz#563872dd0abd370bfa8039e63980469b4b8b0d53" + integrity sha1-Vjhy3Qq9Nwv6gDnmOYBGm0uLDVM= + promise-call-limit@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" From e9fd938ede557879a08d5a406fe9ef9256787b45 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 23 Jun 2022 14:56:02 +0200 Subject: [PATCH 039/231] scripts/api-extractor: generate API reports for CLI packages Signed-off-by: Patrik Oldsberg --- scripts/api-extractor.ts | 293 +++++++++++++++++++++++++++++++++++---- 1 file changed, 268 insertions(+), 25 deletions(-) diff --git a/scripts/api-extractor.ts b/scripts/api-extractor.ts index 2ca7aef17f..9331edc9a2 100644 --- a/scripts/api-extractor.ts +++ b/scripts/api-extractor.ts @@ -23,7 +23,7 @@ import { dirname, join, } from 'path'; -import { spawnSync } from 'child_process'; +import { spawnSync, execFile } from 'child_process'; import prettier from 'prettier'; import fs from 'fs-extra'; import { @@ -197,18 +197,6 @@ ApiReportGenerator.generateReviewFileContent = const PACKAGE_ROOTS = ['packages', 'plugins']; -const SKIPPED_PACKAGES = [ - join('packages', 'app'), - join('packages', 'backend'), - join('packages', 'cli'), - join('packages', 'codemods'), - join('packages', 'create-app'), - join('packages', 'e2e-test'), - join('packages', 'techdocs-cli-embedded-app'), - join('packages', 'storybook'), - join('packages', 'techdocs-cli'), -]; - const ALLOW_WARNINGS = [ 'packages/core-components', 'plugins/allure', @@ -303,9 +291,6 @@ async function findSpecificPackageDirs(unresolvedPackageDirs: string[]) { if (!packageDir) { throw new Error(`'${unresolvedPackageDir}' is not a valid package path`); } - if (SKIPPED_PACKAGES.includes(packageDir)) { - throw new Error(`'${packageDir}' does not have an API report`); - } packageDirs.push(packageDir); } @@ -328,9 +313,7 @@ async function findPackageDirs() { continue; } - if (!SKIPPED_PACKAGES.includes(packageDir)) { - packageDirs.push(packageDir); - } + packageDirs.push(packageDir); } } @@ -1065,6 +1048,251 @@ async function buildDocs({ documenter.generateFiles(); } +async function categorizePackageDirs(projectRoot, packageDirs) { + const dirs = packageDirs.slice(); + const tsPackageDirs = new Array(); + const cliPackageDirs = new Array(); + + await Promise.all( + Array(10) + .fill(0) + .map(async () => { + for (;;) { + const dir = dirs.pop(); + if (!dir) { + return; + } + + const pkgJson = await fs + .readJson(resolvePath(projectRoot, dir, 'package.json')) + .catch(error => { + if (error.code === 'ENOENT') { + return undefined; + } + throw error; + }); + const role = pkgJson?.backstage?.role; + if (!role) { + throw new Error(`No backstage.role in ${dir}/package.json`); + } + if (role === 'cli') { + cliPackageDirs.push(dir); + } else if (role !== 'frontend' && role !== 'backend') { + tsPackageDirs.push(dir); + } + } + }), + ); + + return { tsPackageDirs, cliPackageDirs }; +} + +function createBinRunner(cwd: string, path: string) { + return async (...command: string[]) => + new Promise((resolve, reject) => { + execFile( + 'node', + [path, ...command], + { + cwd, + shell: true, + timeout: 5000, + }, + (err, stdout, stderr) => { + if (err) { + reject(err); + } else if (stderr) { + reject(stderr); + } else { + resolve(stdout); + } + }, + ); + }); +} + +function parseHelpPage(helpPageContent: string) { + const [, usage] = helpPageContent.match(/^\s*Usage: (.*)$/im) ?? []; + const lines = helpPageContent.split(/\r?\n/); + + let options = new Array(); + let commands = new Array(); + + while (lines.length > 0) { + while (lines.length > 0 && !lines[0].endsWith(':')) { + lines.shift(); + } + if (lines.length > 0) { + // Start of a new section, e.g. "Options:" + const sectionName = lines.shift(); + // Take lines until we hit the next section or the end + const sectionEndIndex = lines.findIndex( + line => line && !line.match(/^\s/), + ); + const sectionLines = lines.slice(0, sectionEndIndex); + lines.splice(0, sectionLines.length); + + // Trim away documentation + const sectionItems = sectionLines + .map(line => line.match(/^\s{1,8}(.*?)\s\s+/)?.[1]) + .filter(Boolean); + + if (sectionName.toLocaleLowerCase('en-US') === 'options:') { + options = sectionItems; + } else if (sectionName.toLocaleLowerCase('en-US') === 'commands:') { + commands = sectionItems; + } else { + throw new Error(`Unknown CLI section: ${sectionName}`); + } + } + } + + return { + usage, + options, + commands, + }; +} + +// Represents the help page os a CLI command +interface CliHelpPage { + // Path of commands to reach this page + path: string[]; + // Parsed content + usage: string | undefined; + options: string[]; + commands: string[]; +} + +async function exploreCliHelpPages( + run: (...args: string[]) => Promise, +): Promise { + const helpPages = new Array(); + + async function exploreHelpPage(...path: string[]) { + const content = await run(...path, '--help'); + const parsed = parseHelpPage(content); + helpPages.push({ path, ...parsed }); + + await Promise.all( + parsed.commands.map(async fullCommand => { + const command = fullCommand.split(/[|\s]/)[0]; + if (command !== 'help') { + await exploreHelpPage(...path, command); + } + }), + ); + } + + await exploreHelpPage(); + + helpPages.sort((a, b) => a.path.join(' ').localeCompare(b.path.join(' '))); + + return helpPages; +} + +// The API model for a CLI entry point +interface CliModel { + name: string; + helpPages: CliHelpPage[]; +} + +function generateCliReport(name: string, models: CliModel[]): string { + const content = [ + `## CLI Report file for "${name}"`, + '', + '> Do not edit this file. It is a report generated by `yarn build:api-reports`', + '', + ]; + + for (const model of models) { + for (const helpPage of model.helpPages) { + content.push( + `### \`${[model.name, ...helpPage.path].join(' ')}\``, + '', + '```', + `Usage: ${helpPage.usage ?? ''}`, + ); + + if (helpPage.options.length > 0) { + content.push('', 'Options:', ...helpPage.options.map(l => ` ${l}`)); + } + + if (helpPage.commands.length > 0) { + content.push('', 'Commands:', ...helpPage.commands.map(l => ` ${l}`)); + } + content.push('```', ''); + } + } + + return content.join('\n'); +} + +interface CliExtractionOptions { + projectRoot: string; + packageDirs: string[]; + isLocalBuild: boolean; +} + +async function runCliExtraction({ + projectRoot, + packageDirs, + isLocalBuild, +}: CliExtractionOptions) { + for (const packageDir of packageDirs) { + console.log(`## Processing ${packageDir}`); + const fullDir = resolvePath(projectRoot, packageDir); + const pkgJson = await fs.readJson(resolvePath(fullDir, 'package.json')); + + if (!pkgJson.bin) { + throw new Error(`CLI Package in ${packageDir} has no bin field`); + } + const models = new Array(); + for (const [name, path] of Object.entries(pkgJson.bin)) { + const run = createBinRunner(fullDir, path); + const helpPages = await exploreCliHelpPages(run); + models.push({ name, helpPages }); + } + + const report = generateCliReport(pkgJson.name, models); + + const reportPath = resolvePath(fullDir, 'cli-report.md'); + const existingReport = await fs + .readFile(reportPath, 'utf8') + .catch(error => { + if (error.code === 'ENOENT') { + return undefined; + } + throw error; + }); + + if (existingReport !== report) { + if (isLocalBuild) { + console.warn(`CLI report changed for ${packageDir}`); + await fs.writeFile(reportPath, report); + } else { + logApiReportInstructions(); + + if (existingReport) { + console.log(''); + console.log( + `The conflicting file is ${relativePath( + projectRoot, + reportPath, + )}, expecting the following content:`, + ); + console.log(''); + + console.log(report); + + logApiReportInstructions(); + } + throw new Error(`CLI report changed for ${packageDir}, `); + } + } + } +} + async function main() { const projectRoot = resolvePath(__dirname, '..'); const isCiBuild = process.argv.includes('--ci'); @@ -1121,13 +1349,28 @@ async function main() { const packageDirs = selectedPackageDirs ?? (await findPackageDirs()); - console.log('# Generating package API reports'); - await runApiExtraction({ + const { tsPackageDirs, cliPackageDirs } = await categorizePackageDirs( + projectRoot, packageDirs, - outputDir: tmpDir, - isLocalBuild: !isCiBuild, - tsconfigFilePath, - }); + ); + + if (tsPackageDirs.length > 0) { + console.log('# Generating package API reports'); + await runApiExtraction({ + packageDirs: tsPackageDirs, + outputDir: tmpDir, + isLocalBuild: !isCiBuild, + tsconfigFilePath, + }); + } + if (cliPackageDirs.length > 0) { + console.log('# Generating package CLI reports'); + await runCliExtraction({ + projectRoot, + packageDirs: cliPackageDirs, + isLocalBuild: !isCiBuild, + }); + } if (isDocsBuild) { console.log('# Generating package documentation'); From 0bc7eb1642bfdf799a0b9c9a9c8d5ab4fcd1a179 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 23 Jun 2022 14:56:38 +0200 Subject: [PATCH 040/231] generate API reports for CLI packages Signed-off-by: Patrik Oldsberg --- packages/cli/cli-report.md | 425 ++++++++++++++++++++++++++++ packages/codemods/cli-report.md | 61 ++++ packages/create-app/cli-report.md | 15 + packages/e2e-test/cli-report.md | 26 ++ packages/techdocs-cli/cli-report.md | 117 ++++++++ 5 files changed, 644 insertions(+) create mode 100644 packages/cli/cli-report.md create mode 100644 packages/codemods/cli-report.md create mode 100644 packages/create-app/cli-report.md create mode 100644 packages/e2e-test/cli-report.md create mode 100644 packages/techdocs-cli/cli-report.md diff --git a/packages/cli/cli-report.md b/packages/cli/cli-report.md new file mode 100644 index 0000000000..04f034cee1 --- /dev/null +++ b/packages/cli/cli-report.md @@ -0,0 +1,425 @@ +## CLI Report file for "@backstage/cli" + +> Do not edit this file. It is a report generated by `yarn build:api-reports` + +### `backstage-cli` + +``` +Usage: backstage-cli [options] [command] + +Options: + -V, --version + -h, --help + +Commands: + create [options] + create-plugin [options] + plugin:diff [options] + test + config:docs [options] + config:print [options] + config:check [options] + config:schema [options] + repo [command] + package [command] + migrate [command] + versions:bump [options] + versions:check [options] + clean + build-workspace [packages...] + create-github-app + info + help [command] +``` + +### `backstage-cli build-workspace` + +``` +Usage: backstage-cli build-workspace [options] [packages...] + +Options: + -h, --help +``` + +### `backstage-cli clean` + +``` +Usage: backstage-cli clean [options] + +Options: + -h, --help +``` + +### `backstage-cli config:check` + +``` +Usage: backstage-cli config:check [options] + +Options: + --package + --lax + --frontend + --deprecated + --config + -h, --help +``` + +### `backstage-cli config:docs` + +``` +Usage: backstage-cli config:docs [options] + +Options: + --package + -h, --help +``` + +### `backstage-cli config:print` + +``` +Usage: backstage-cli config:print [options] + +Options: + --package + --lax + --frontend + --with-secrets + --format + --config + -h, --help +``` + +### `backstage-cli config:schema` + +``` +Usage: backstage-cli config:schema [options] + +Options: + --package + --format + -h, --help +``` + +### `backstage-cli create` + +``` +Usage: backstage-cli create [options] + +Options: + --select + --option = + --scope + --npm-registry + --no-private + -h, --help +``` + +### `backstage-cli create-github-app` + +``` +Usage: backstage-cli create-github-app [options] + +Options: + -h, --help +``` + +### `backstage-cli create-plugin` + +``` +Usage: backstage-cli create-plugin [options] + +Options: + --backend + --scope + --npm-registry + --no-private + -h, --help +``` + +### `backstage-cli info` + +``` +Usage: backstage-cli info [options] + +Options: + -h, --help +``` + +### `backstage-cli migrate` + +``` +Usage: backstage-cli migrate [options] [command] [command] + +Options: + -h, --help + +Commands: + package-roles + package-scripts + package-lint-configs + help [command] +``` + +### `backstage-cli migrate package-lint-configs` + +``` +Usage: backstage-cli migrate package-lint-configs [options] + +Options: + -h, --help +``` + +### `backstage-cli migrate package-roles` + +``` +Usage: backstage-cli migrate package-roles [options] + +Options: + -h, --help +``` + +### `backstage-cli migrate package-scripts` + +``` +Usage: backstage-cli migrate package-scripts [options] + +Options: + -h, --help +``` + +### `backstage-cli package` + +``` +Usage: backstage-cli package [options] [command] [command] + +Options: + -h, --help + +Commands: + start [options] + build [options] + lint [options] [directories...] + test + clean + prepack + postpack + help [command] +``` + +### `backstage-cli package build` + +``` +Usage: backstage-cli package build [options] + +Options: + --role + --minify + --experimental-type-build + --skip-build-dependencies + --stats + --config + -h, --help +``` + +### `backstage-cli package clean` + +``` +Usage: backstage-cli package clean [options] + +Options: + -h, --help +``` + +### `backstage-cli package lint` + +``` +Usage: backstage-cli package lint [options] [directories...] + +Options: + --format + --fix + -h, --help +``` + +### `backstage-cli package postpack` + +``` +Usage: backstage-cli package postpack [options] + +Options: + -h, --help +``` + +### `backstage-cli package prepack` + +``` +Usage: backstage-cli package prepack [options] + +Options: + -h, --help +``` + +### `backstage-cli package start` + +``` +Usage: backstage-cli package start [options] + +Options: + --config + --role + --check + --inspect + --inspect-brk + -h, --help +``` + +### `backstage-cli package test` + +``` +Usage: backstage-cli [--config=] [TestPathPattern] + +Options: + -h, --help + -v, --version + --all + --automock + -b, --bail + --cache + --cacheDirectory + --changedFilesWithAncestor + --changedSince + --ci + --clearCache + --clearMocks + --collectCoverage + --collectCoverageFrom + --collectCoverageOnlyFrom + --color + --colors + -c, --config + --coverage + --coverageDirectory + --coveragePathIgnorePatterns + --coverageProvider + --coverageReporters + --coverageThreshold + --debug + --detectLeaks + --detectOpenHandles + --env + --errorOnDeprecated + -e, --expand + --filter + --findRelatedTests + --forceExit +``` + +### `backstage-cli plugin:diff` + +``` +Usage: backstage-cli plugin:diff [options] + +Options: + --check + --yes + -h, --help +``` + +### `backstage-cli repo` + +``` +Usage: backstage-cli repo [options] [command] [command] + +Options: + -h, --help + +Commands: + build [options] + lint [options] + help [command] +``` + +### `backstage-cli repo build` + +``` +Usage: backstage-cli repo build [options] + +Options: + --all + --since + -h, --help +``` + +### `backstage-cli repo lint` + +``` +Usage: backstage-cli repo lint [options] + +Options: + --format + --since + --fix + -h, --help +``` + +### `backstage-cli test` + +``` +Usage: backstage-cli [--config=] [TestPathPattern] + +Options: + -h, --help + -v, --version + --all + --automock + -b, --bail + --cache + --cacheDirectory + --changedFilesWithAncestor + --changedSince + --ci + --clearCache + --clearMocks + --collectCoverage + --collectCoverageFrom + --collectCoverageOnlyFrom + --color + --colors + -c, --config + --coverage + --coverageDirectory + --coveragePathIgnorePatterns + --coverageProvider + --coverageReporters + --coverageThreshold + --debug + --detectLeaks + --detectOpenHandles + --env + --errorOnDeprecated + -e, --expand + --filter + --findRelatedTests + --forceExit +``` + +### `backstage-cli versions:bump` + +``` +Usage: backstage-cli versions:bump [options] + +Options: + --pattern + --release + -h, --help +``` + +### `backstage-cli versions:check` + +``` +Usage: backstage-cli versions:check [options] + +Options: + --fix + -h, --help +``` diff --git a/packages/codemods/cli-report.md b/packages/codemods/cli-report.md new file mode 100644 index 0000000000..57d2198141 --- /dev/null +++ b/packages/codemods/cli-report.md @@ -0,0 +1,61 @@ +## CLI Report file for "@backstage/codemods" + +> Do not edit this file. It is a report generated by `yarn build:api-reports` + +### `backstage-codemods` + +``` +Usage: backstage-codemods [options] [command] + +Options: + -V, --version + -h, --help + +Commands: + apply [target-dirs...] + list + help [command] +``` + +### `backstage-codemods apply` + +``` +Usage: backstage-codemods apply [options] [command] [target-dirs...] + +Options: + -h, --help + +Commands: + core-imports [options] [target-dirs...] + extension-names [options] [target-dirs...] + help [command] +``` + +### `backstage-codemods apply core-imports` + +``` +Usage: backstage-codemods apply core-imports [options] [target-dirs...] + +Options: + -d, --dry + -h, --help +``` + +### `backstage-codemods apply extension-names` + +``` +Usage: backstage-codemods apply extension-names [options] [target-dirs...] + +Options: + -d, --dry + -h, --help +``` + +### `backstage-codemods list` + +``` +Usage: backstage-codemods list [options] + +Options: + -h, --help +``` diff --git a/packages/create-app/cli-report.md b/packages/create-app/cli-report.md new file mode 100644 index 0000000000..1244432c6a --- /dev/null +++ b/packages/create-app/cli-report.md @@ -0,0 +1,15 @@ +## CLI Report file for "@backstage/create-app" + +> Do not edit this file. It is a report generated by `yarn build:api-reports` + +### `backstage-create-app` + +``` +Usage: backstage-create-app [options] + +Options: + -V, --version + --path [directory] + --skip-install + -h, --help +``` diff --git a/packages/e2e-test/cli-report.md b/packages/e2e-test/cli-report.md new file mode 100644 index 0000000000..3a3912b8fc --- /dev/null +++ b/packages/e2e-test/cli-report.md @@ -0,0 +1,26 @@ +## CLI Report file for "e2e-test" + +> Do not edit this file. It is a report generated by `yarn build:api-reports` + +### `e2e-test` + +``` +Usage: e2e-test [options] [command] + +Options: + -V, --version + -h, --help + +Commands: + run + help [command] +``` + +### `e2e-test run` + +``` +Usage: e2e-test run [options] + +Options: + -h, --help +``` diff --git a/packages/techdocs-cli/cli-report.md b/packages/techdocs-cli/cli-report.md new file mode 100644 index 0000000000..64b5e9c090 --- /dev/null +++ b/packages/techdocs-cli/cli-report.md @@ -0,0 +1,117 @@ +## CLI Report file for "@techdocs/cli" + +> Do not edit this file. It is a report generated by `yarn build:api-reports` + +### `techdocs-cli` + +``` +Usage: techdocs-cli [options] [command] + +Options: + -V, --version + -h, --help + +Commands: + generate|build [options] + migrate [options] + publish [options] + serve:mkdocs [options] + serve [options] + help [command] +``` + +### `techdocs-cli generate` + +``` +Usage: techdocs-cli generate|build [options] + +Options: + --source-dir + --output-dir + --docker-image + --no-pull + --no-docker + --techdocs-ref + --etag + -v --verbose + --omitTechdocsCoreMkdocsPlugin + --legacyCopyReadmeMdToIndexMd + -h, --help +``` + +### `techdocs-cli migrate` + +``` +Usage: techdocs-cli migrate [options] + +Options: + --publisher-type + --storage-name + --azureAccountName + --azureAccountKey + --awsRoleArn + --awsEndpoint + --awsS3ForcePathStyle + --awsBucketRootPath + --osCredentialId + --osSecret + --osAuthUrl + --osSwiftUrl + --removeOriginal + --concurrency + -v --verbose + -h, --help +``` + +### `techdocs-cli publish` + +``` +Usage: techdocs-cli publish [options] + +Options: + --publisher-type + --storage-name + --entity + --legacyUseCaseSensitiveTripletPaths + --azureAccountName + --azureAccountKey + --awsRoleArn + --awsEndpoint + --awsS3sse + --awsS3ForcePathStyle + --osCredentialId + --osSecret + --osAuthUrl + --osSwiftUrl + --gcsBucketRootPath + --directory + -h, --help +``` + +### `techdocs-cli serve` + +``` +Usage: techdocs-cli serve [options] + +Options: + -i, --docker-image + --docker-entrypoint + --no-docker + --mkdocs-port + -v --verbose + -h, --help +``` + +### `techdocs-cli serve:mkdocs` + +``` +Usage: techdocs-cli serve:mkdocs [options] + +Options: + -i, --docker-image + --docker-entrypoint + --no-docker + -p, --port + -v --verbose + -h, --help +``` From bbf005fb55f15f51b808fcade0479f6cd96af873 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 23 Jun 2022 16:20:43 +0200 Subject: [PATCH 041/231] scripts/generate-changeset-feedback: ignore cli-report.md Signed-off-by: Patrik Oldsberg --- scripts/generate-changeset-feedback.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/generate-changeset-feedback.js b/scripts/generate-changeset-feedback.js index b614459a0e..b34147798d 100644 --- a/scripts/generate-changeset-feedback.js +++ b/scripts/generate-changeset-feedback.js @@ -42,7 +42,7 @@ function isPublishedPath(path) { return false; } // API report changes by themselves don't count - if (path === 'api-report.md') { + if (path === 'api-report.md' || path === 'cli-report.md') { return false; } // Lint changes don't count From 130ad3f34e6774c315157ec53e641c7d8d218602 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 23 Jun 2022 16:24:28 +0200 Subject: [PATCH 042/231] .prettierignore: add cli-report.md Signed-off-by: Patrik Oldsberg --- .prettierignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.prettierignore b/.prettierignore index 393c35fdbe..8f1fae0456 100644 --- a/.prettierignore +++ b/.prettierignore @@ -5,6 +5,7 @@ coverage *.hbs templates api-report.md +cli-report.md plugins/scaffolder-backend/sample-templates .vscode dist-types From 480dae16c815a5e8eece4bdd0246aec41a03a797 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 23 Jun 2022 16:43:50 +0200 Subject: [PATCH 043/231] scripts/api-extractor: better error reporting for cli errors Signed-off-by: Patrik Oldsberg --- scripts/api-extractor.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/api-extractor.ts b/scripts/api-extractor.ts index 9331edc9a2..bd3dac2ee8 100644 --- a/scripts/api-extractor.ts +++ b/scripts/api-extractor.ts @@ -1100,9 +1100,9 @@ function createBinRunner(cwd: string, path: string) { }, (err, stdout, stderr) => { if (err) { - reject(err); + reject(new Error(`${err.message}\n${stderr}`)); } else if (stderr) { - reject(stderr); + reject(new Error(`Command printed error output: ${stderr}`)); } else { resolve(stdout); } From c1f4ad85d58e13c9322af81241fa2e8fefafcef3 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 23 Jun 2022 16:44:17 +0200 Subject: [PATCH 044/231] scripts/api-extractor: increase cli exec timeout and buffer size Signed-off-by: Patrik Oldsberg --- scripts/api-extractor.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/api-extractor.ts b/scripts/api-extractor.ts index bd3dac2ee8..cfa2fe270e 100644 --- a/scripts/api-extractor.ts +++ b/scripts/api-extractor.ts @@ -1096,7 +1096,8 @@ function createBinRunner(cwd: string, path: string) { { cwd, shell: true, - timeout: 5000, + timeout: 30000, + maxBuffer: 1024 * 1024, }, (err, stdout, stderr) => { if (err) { From 4235353f463734e42bf3aaf13c91ebc451167705 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 29 Jun 2022 13:37:09 +0200 Subject: [PATCH 045/231] chore: remove duplicate changeset Signed-off-by: blam --- .changeset/cold-apples-film.md | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 .changeset/cold-apples-film.md diff --git a/.changeset/cold-apples-film.md b/.changeset/cold-apples-film.md deleted file mode 100644 index d8c7ec283d..0000000000 --- a/.changeset/cold-apples-film.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'example-app': patch -'@backstage/plugin-catalog': patch ---- - -Adding ability to customize the "unregister entity" menu item in the entity context menu on the entity page with options 'visible','hidden','disabled'. -With this three new options, one can hide the "unregister entity" menu item from the list, disable or keep it enabled. - -The boolean input for "unregister entity" will be deprecated later in favour of the above three options. From 6ecafa9d3b7fb251339eee77c10311778b949bbb Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 29 Jun 2022 13:41:17 +0200 Subject: [PATCH 046/231] chore: make pretty Signed-off-by: blam --- packages/app/src/components/catalog/EntityPage.tsx | 2 +- .../src/components/EntityContextMenu/EntityContextMenu.tsx | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index 743dea29e4..c2ae001060 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -165,7 +165,7 @@ const EntityLayoutWrapper = (props: { children?: ReactNode }) => { }, ]; }, []); - + const options: EntityContextMenuOptions = { disableUnregister: 'visible', }; diff --git a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx index 94df8dac29..e37362a1e3 100644 --- a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx +++ b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx @@ -33,7 +33,6 @@ import { catalogEntityDeletePermission } from '@backstage/plugin-catalog-common' import { BackstageTheme } from '@backstage/theme'; import { UnregisterEntity, UnregisterEntityOptions } from './UnregisterEntity'; - /** @public */ export type EntityContextMenuClassKey = 'button'; From 9d0db13c2245566ae49e0f223a7cfc5306894de8 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 29 Jun 2022 13:48:17 +0200 Subject: [PATCH 047/231] chore: dont export them as they're part of the unstable API, just reference inline for now Signed-off-by: blam --- packages/app/src/components/catalog/EntityPage.tsx | 9 +++------ plugins/catalog/api-report.md | 4 ++-- .../catalog/src/components/EntityLayout/EntityLayout.tsx | 3 ++- plugins/catalog/src/components/EntityLayout/index.ts | 6 +----- 4 files changed, 8 insertions(+), 14 deletions(-) diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index c2ae001060..155dc071ff 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -43,7 +43,6 @@ import { } from '@backstage/plugin-azure-devops'; import { EntityBadgesDialog } from '@backstage/plugin-badges'; import { - EntityContextMenuOptions, EntityAboutCard, EntityDependsOnComponentsCard, EntityDependsOnResourcesCard, @@ -166,15 +165,13 @@ const EntityLayoutWrapper = (props: { children?: ReactNode }) => { ]; }, []); - const options: EntityContextMenuOptions = { - disableUnregister: 'visible', - }; - return ( <> {props.children} diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md index 0d2d611412..61dc503f2d 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/api-report.md @@ -259,10 +259,10 @@ export interface EntityLayoutProps { children?: React_2.ReactNode; // (undocumented) NotFoundComponent?: React_2.ReactNode; - // Warning: (ae-forgotten-export) The symbol "contextMenuOptions" needs to be exported by the entry point index.d.ts + // Warning: (ae-forgotten-export) The symbol "EntityContextMenuOptions" needs to be exported by the entry point index.d.ts // // (undocumented) - UNSTABLE_contextMenuOptions?: contextMenuOptions; + UNSTABLE_contextMenuOptions?: EntityContextMenuOptions; // Warning: (ae-forgotten-export) The symbol "ExtraContextMenuItem" needs to be exported by the entry point index.d.ts // // (undocumented) diff --git a/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx b/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx index 5d82b5ccab..2295034905 100644 --- a/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx +++ b/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx @@ -144,8 +144,9 @@ interface ExtraContextMenuItem { type VisibleType = 'visible' | 'hidden' | 'disable'; +// NOTE(blam): Intentionally not exported at this point, since it's part of // unstable context menu option, eg: disable the unregister entity menu -export interface EntityContextMenuOptions { +interface EntityContextMenuOptions { disableUnregister: boolean | VisibleType; } diff --git a/plugins/catalog/src/components/EntityLayout/index.ts b/plugins/catalog/src/components/EntityLayout/index.ts index 73a58dfddc..251d213637 100644 --- a/plugins/catalog/src/components/EntityLayout/index.ts +++ b/plugins/catalog/src/components/EntityLayout/index.ts @@ -15,8 +15,4 @@ */ export { EntityLayout } from './EntityLayout'; -export type { - EntityLayoutProps, - EntityLayoutRouteProps, - EntityContextMenuOptions, -} from './EntityLayout'; +export type { EntityLayoutProps, EntityLayoutRouteProps } from './EntityLayout'; From 6e5be0ca68580b0177e6af5515c4eb13a86efb3e Mon Sep 17 00:00:00 2001 From: Francesco Corti Date: Wed, 29 Jun 2022 16:34:36 +0200 Subject: [PATCH 048/231] Roadmap update for Q3 2022. Signed-off-by: Francesco Corti --- docs/overview/roadmap.md | 79 +++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 42 deletions(-) diff --git a/docs/overview/roadmap.md b/docs/overview/roadmap.md index 727000728f..18af070382 100644 --- a/docs/overview/roadmap.md +++ b/docs/overview/roadmap.md @@ -15,9 +15,9 @@ work"](#future-work). With "next" we mean features planned for release within the ongoing quarter from April through June 2022. With "future" we mean features on the radar, but not yet scheduled. -| [What's next](#whats-next) | [Future work](#future-work) | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | -| [Ease of onboarding](#ease-of-onboarding)
[Backstage Search 1.0](#search-1.0)
[TechDocs Addon Framework](#techdocs-addon-framework)
[Backend Services (initial)](#backend-services-initial)
[Backstage Security Audit](#backstage-security-audit)
[SIGs for contributors](#sigs-for-contributors) | Security Plan (and Strategy)
Composable Homepage 1.0
GraphQL
Telemetry
Improved UX design | +| [What's next](#whats-next) | [Future work](#future-work) | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | +| [Backstage Search 1.0](#search-1.0)
[Backend Services (MVP)](#backend-services-mvp)
[Backstage Security Audit](#backstage-security-audit)
[Backstage Threat Model](#backstage-threat-model)
[TechDocs Addon Framework](techDocs-addon-framework)
[Software Catalog pagination](#software-catalog-pagination)
[More SIGs](#more-sigs) | Ease of onboarding
Composable Homepage 1.0
Creator experience
GraphQL
Telemetry | The long-term roadmap (12 - 36 months) is not detailed in the public roadmap. Third-party contributions are also not currently included in the roadmap. Let us @@ -30,47 +30,22 @@ The feature set below is planned for the ongoing quarter, and grouped by theme. The list order doesn't necessarily reflect priority, and the development/release cycle will vary based on maintainer schedules. -### Ease of onboarding - -A faster (with less development) and easier setup of a proof-of-concept -deployment, as part of the onboarding experience, has been a common and loud -suggestion from new adopters as well as analysts looking at Backstage. - -With this initiative we plan to start facing this important topic with the most -commonly used and challenging tasks. More in particular we plan to reduce the -effort required to go from zero to production in installing and customizing -Backstage, as well as reducing the effort required to populate the Software -Catalog. - -More iterations will be required in the following quarters, but this will be a -good improvement in the onboarding experience, especially for the benefit of new -adopters. - ### Backstage Search 1.0 Fix the few remaining issues to get Backstage Search platform up to 1.0. For more information, see the [Backstage Search documentation and roadmap page](https://backstage.io/docs/features/search/search-overview). -### TechDocs Addon Framework - -Addons are TechDocs features that are added on top of the base docs-like-code experience. An example would be a feature that showed comments on the page. We plan to add an Addon framework and open source a selection of the Addons that we use internally at Spotify. We encourage the Backstage community to add further Addons. - -For more information about the TechDocs Addon Framework, see the documentation page [here](https://backstage.io/docs/features/techdocs/addons) - -For general information about TechDocs including roadmap, see [here](https://backstage.io/docs/features/techdocs/techdocs-overview). - -### Backend Services (initial) +### Backend Services (MVP) To better scale and maintain the Backstage instances, a backend services system is planned to be introduced as part of the software architecture. This layer of backend services will help in decoupling the various modules (e.g. Catalog and Scaffolder) from the frontend experience. -In this quarter we plan to start designing the new architecture, together with -the first experimentation and development of the software components. +After the experimentation and design happened in the past quarter, soon we plan to release a first version to start providing the first benefits to adopters and developers. ### Backstage Security Audit -This is the continuation of the initiative started in the previous quarter. This +This is the continuation of the initiative started in the previous quarters. This quarter will see the publication of the report describing the outcome of the audit, together the first fixes and the development of some of the changes required to address the vulnerabilities. @@ -84,12 +59,34 @@ initiative. This initiative is done together with, and with the support of, the [Cloud Native Computing Foundation (CNCF)](https://www.cncf.io/). -### SIGs for contributors +### Backstage Threat Model -The request to better coordinate the increasing number of contributions coming -from the various adopters' developers is loud and clear. We think that the -community is mature enough to start launching the SIGs (Special Interest Groups) -following the successful model of Kubernetes. +This is another (relevant) initiative planned to make Backstage a secure product for the adopters. The goals of this initiative are: + +1. Understand where security investment and attention is needed. +2. Guide the upcoming security audit. +3. Communicate expectations to Backstage adopters and inform and attract security researchers. + +The planned artifacts are: + +- Concise high level threat model that will be included as part of the Backstage security documentation. +- Granular threat model created in conjunction with the security audit to inform further security investment areas for Backstage. + +### TechDocs Addon Framework + +Addons are TechDocs features that are added on top of the base docs-like-code experience. An example would be a feature that showed comments on the page. We plan to add an Addon framework and open source a selection of the Addons that we use internally at Spotify. We encourage the Backstage community to add further Addons. + +For more information about the TechDocs Addon Framework, see the documentation page [here](https://backstage.io/docs/features/techdocs/addons) + +For general information about TechDocs including roadmap, see [here](https://backstage.io/docs/features/techdocs/techdocs-overview). + +### Software Catalog pagination + +Today adopters with a big catalog (with several thousands of software components) might not have an ideal end-user experience when viewing the `/catalog` page. The issue is related to how the entities are fetched by the frontend. In order to provide a better end-user experience the pagination of the catalog’s entities needs to be enforced. Some experimentations are already completed but in this quarter we plan to continue, and hopefully complete, this relevant enhancement. + +### More SIGs + +In the last quarter we launched the [Catalog SIG (Special Interest Group)](https://github.com/backstage/community/tree/main/sigs/sig-catalog) to better coordinate the increasing number of contributions to the project. We think that this is the proper path to follow to engage more with the contributors. For this reason we will launch other SIGs dedicated to the most interesting topics for the community. ## Future work @@ -97,18 +94,16 @@ The following feature list doesn't represent a commitment to develop, and the list order doesn't reflect any priority or importance, but these features are on the maintainers' radar, with clear interest expressed by the community. -- **Security Plan (and Strategy):** The purpose of the Security Strategy is to - move another step along the path to maturing the platform, setting the - expectations of any adopters from a security standpoint. +- **Ease of onboarding:** A faster (with less development) and easier setup of Backstage and the most relevant/adopted plugins. - **Composable Homepage 1.0:** Driving this to 1.0 by adding some composable components. +- **Creator experience:** Provide a better Backstage user experience through + visual guidelines and templates, especially navigation across plug-ins and + portal functionalities. - **[GraphQL](https://graphql.org/) support:** Introduce the ability to query Backstage backend services with a standard query language for APIs. - **Telemetry:** To efficiently generate logging and metrics in such a way that adopters can get insights so that Backstage can be monitored and improved. -- **Improved UX design:** Provide a better Backstage user experience through - visual guidelines and templates, especially navigation across plug-ins and - portal functionalities. ## How to influence the roadmap From 7ecaf0067de5daa1fa2382331e5175a633d0e100 Mon Sep 17 00:00:00 2001 From: Ke Ma Date: Wed, 29 Jun 2022 16:42:58 +0200 Subject: [PATCH 049/231] fix header style so that EntityContextMenu is in correct shape Signed-off-by: codermango --- packages/core-components/src/layout/Header/Header.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core-components/src/layout/Header/Header.tsx b/packages/core-components/src/layout/Header/Header.tsx index bb4d19b949..a32d116b56 100644 --- a/packages/core-components/src/layout/Header/Header.tsx +++ b/packages/core-components/src/layout/Header/Header.tsx @@ -63,6 +63,7 @@ const useStyles = makeStyles( }, rightItemsBox: { width: 'auto', + alignItems: 'center', }, title: { color: theme.palette.bursts.fontColor, From b4b711bcc2c1e93b5851799ab596bababbf5f856 Mon Sep 17 00:00:00 2001 From: codermango Date: Wed, 29 Jun 2022 16:51:26 +0200 Subject: [PATCH 050/231] add changeset Signed-off-by: codermango --- .changeset/five-fireants-run.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/five-fireants-run.md diff --git a/.changeset/five-fireants-run.md b/.changeset/five-fireants-run.md new file mode 100644 index 0000000000..a18ba2b8d2 --- /dev/null +++ b/.changeset/five-fireants-run.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': minor +--- + +Fix the EntityLayout header style so that EntityContextMenu button can display in correct shape when user hover on it From bdc77d8cb61e1f578decef2d01d3cc0dd9476b5a Mon Sep 17 00:00:00 2001 From: codermango Date: Wed, 29 Jun 2022 17:18:16 +0200 Subject: [PATCH 051/231] fix changeset Signed-off-by: codermango --- .changeset/five-fireants-run.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/five-fireants-run.md b/.changeset/five-fireants-run.md index a18ba2b8d2..589d46cc81 100644 --- a/.changeset/five-fireants-run.md +++ b/.changeset/five-fireants-run.md @@ -1,5 +1,5 @@ --- -'@backstage/core-components': minor +'@backstage/core-components': patch --- Fix the EntityLayout header style so that EntityContextMenu button can display in correct shape when user hover on it From bb5f171472e0c948526fe13910c65b1635b50a1e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Jun 2022 16:19:23 +0000 Subject: [PATCH 052/231] chore(deps): update dependency @graphql-codegen/cli to v2.6.3 Signed-off-by: Renovate Bot --- yarn.lock | 47 +++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3cb38cc83b..ccb89c56bd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2364,9 +2364,9 @@ meros "^1.1.4" "@graphql-codegen/cli@^2.3.1": - version "2.6.2" - resolved "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-2.6.2.tgz#a9aa4656141ee0998cae8c7ad7d0bf9ca8e0c9ae" - integrity sha512-UO75msoVgvLEvfjCezM09cQQqp32+mR8Ma1ACsBpr7nroFvHbgcu2ulx1cMovg4sxDBCsvd9Eq/xOOMpARUxtw== + version "2.6.3" + resolved "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-2.6.3.tgz#80d6f0324bcf9a375b9a1d5e998fcd62b3bace66" + integrity sha512-gxtKbe6LlBhGqDISZldCMcGaV1rSTS4D836clSR52kBY7UBhZZcDOcNZM0zDJDFGpjHtwuL9p0Kb4w9HRXYfew== dependencies: "@graphql-codegen/core" "2.5.1" "@graphql-codegen/plugin-helpers" "^2.4.1" @@ -2387,24 +2387,18 @@ common-tags "^1.8.0" cosmiconfig "^7.0.0" debounce "^1.2.0" - dependency-graph "^0.11.0" detect-indent "^6.0.0" - glob "^7.1.6" - globby "^11.0.4" graphql-config "^4.1.0" inquirer "^8.0.0" is-glob "^4.0.1" json-to-pretty-yaml "^1.2.2" - latest-version "5.1.0" + latest-version "^6.0.0" listr "^0.14.3" listr-update-renderer "^0.5.0" log-symbols "^4.0.0" - minimatch "^4.0.0" mkdirp "^1.0.4" string-env-interpolation "^1.0.1" ts-log "^2.2.3" - tslib "~2.3.0" - valid-url "^1.0.9" wrap-ansi "^7.0.0" yaml "^1.10.0" yargs "^17.0.0" @@ -14075,7 +14069,7 @@ got@11.8.3: p-cancelable "^2.0.0" responselike "^2.0.0" -got@^11.8.0: +got@^11.8.0, got@^11.8.2: version "11.8.5" resolved "https://registry.npmjs.org/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== @@ -17051,13 +17045,20 @@ language-tags@^1.0.5: dependencies: language-subtag-registry "~0.3.2" -latest-version@5.1.0, latest-version@^5.1.0: +latest-version@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== dependencies: package-json "^6.3.0" +latest-version@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/latest-version/-/latest-version-6.0.0.tgz#469fb95f1d588b38436c1ec8fec947b99ed268c7" + integrity sha512-zfTuGx4PwpoSJ1mABs58AkM6qMzu49LZ7LT5JHprKvpGpQ+cYtfSibi3tLLrH4z7UylYU42rfBdwN8YgqbTljA== + dependencies: + package-json "^7.0.0" + lazy-ass@1.6.0, lazy-ass@^1.6.0: version "1.6.0" resolved "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" @@ -18681,13 +18682,6 @@ minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^4.0.0: - version "4.2.1" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" - integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== - dependencies: - brace-expansion "^1.1.7" - minimist-options@4.1.0, minimist-options@^4.0.2: version "4.1.0" resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -20012,6 +20006,16 @@ package-json@^6.3.0: registry-url "^5.0.0" semver "^6.2.0" +package-json@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/package-json/-/package-json-7.0.0.tgz#1355416e50a5c1b8f1a6f471197a3650d21186bf" + integrity sha512-CHJqc94AA8YfSLHGQT3DbvSIuE12NLFekpM4n7LRrAd3dOJtA911+4xe9q6nC3/jcKraq7nNS9VxgtT0KC+diA== + dependencies: + got "^11.8.2" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^7.3.5" + packet-reader@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" @@ -25678,11 +25682,6 @@ v8-to-istanbul@^8.1.0: convert-source-map "^1.6.0" source-map "^0.7.3" -valid-url@^1.0.9: - version "1.0.9" - resolved "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" - integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA= - validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" From f6b6fb7165bec17359a9bd344980daad2bf518a8 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 29 Jun 2022 18:35:59 +0200 Subject: [PATCH 053/231] cli: blocking IO for test --help Signed-off-by: Patrik Oldsberg --- .changeset/smart-elephants-knock.md | 5 +++++ packages/cli/src/commands/test.ts | 4 ++++ 2 files changed, 9 insertions(+) create mode 100644 .changeset/smart-elephants-knock.md diff --git a/.changeset/smart-elephants-knock.md b/.changeset/smart-elephants-knock.md new file mode 100644 index 0000000000..7aed10a71e --- /dev/null +++ b/.changeset/smart-elephants-knock.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +The `test` command now ensures that all IO is flushed before exiting when printing `--help`. diff --git a/packages/cli/src/commands/test.ts b/packages/cli/src/commands/test.ts index f1bfcc356b..88769aec1a 100644 --- a/packages/cli/src/commands/test.ts +++ b/packages/cli/src/commands/test.ts @@ -78,6 +78,10 @@ export default async (_opts: OptionValues, cmd: Command) => { process.env.TZ = 'UTC'; } + if (args.includes('--help')) { + (process.stdout as any)._handle.setBlocking(true); + } + // eslint-disable-next-line jest/no-jest-import await require('jest').run(args); }; From c1f6fcb2e9716dd3def7acfbb179f4e8154f24e3 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 29 Jun 2022 18:42:36 +0200 Subject: [PATCH 054/231] cli: update cli report Signed-off-by: Patrik Oldsberg --- packages/cli/cli-report.md | 138 +++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) diff --git a/packages/cli/cli-report.md b/packages/cli/cli-report.md index 04f034cee1..8c678d885e 100644 --- a/packages/cli/cli-report.md +++ b/packages/cli/cli-report.md @@ -312,6 +312,75 @@ Options: --filter --findRelatedTests --forceExit + --globalSetup + --globalTeardown + --globals + --haste + --init + --injectGlobals + --json + --lastCommit + --listTests + --logHeapUsage + --maxConcurrency + -w, --maxWorkers + --moduleDirectories + --moduleFileExtensions + --moduleNameMapper + --modulePathIgnorePatterns + --modulePaths + --noStackTrace + --notify + --notifyMode + -o, --onlyChanged + -f, --onlyFailures + --outputFile + --passWithNoTests + --preset + --prettierPath + --projects + --reporters + --resetMocks + --resetModules + --resolver + --restoreMocks + --rootDir + --roots + -i, --runInBand + --runTestsByPath + --runner + --selectProjects + --setupFiles + --setupFilesAfterEnv + --showConfig + --silent + --skipFilter + --snapshotSerializers + --testEnvironment + --testEnvironmentOptions + --testFailureExitCode + --testLocationInResults + --testMatch + -t, --testNamePattern + --testPathIgnorePatterns + --testPathPattern + --testRegex + --testResultsProcessor + --testRunner + --testSequencer + --testTimeout + --testURL + --timers + --transform + --transformIgnorePatterns + --unmockedModulePathPatterns + -u, --updateSnapshot + --useStderr + --verbose + --watch + --watchAll + --watchPathIgnorePatterns + --watchman ``` ### `backstage-cli plugin:diff` @@ -401,6 +470,75 @@ Options: --filter --findRelatedTests --forceExit + --globalSetup + --globalTeardown + --globals + --haste + --init + --injectGlobals + --json + --lastCommit + --listTests + --logHeapUsage + --maxConcurrency + -w, --maxWorkers + --moduleDirectories + --moduleFileExtensions + --moduleNameMapper + --modulePathIgnorePatterns + --modulePaths + --noStackTrace + --notify + --notifyMode + -o, --onlyChanged + -f, --onlyFailures + --outputFile + --passWithNoTests + --preset + --prettierPath + --projects + --reporters + --resetMocks + --resetModules + --resolver + --restoreMocks + --rootDir + --roots + -i, --runInBand + --runTestsByPath + --runner + --selectProjects + --setupFiles + --setupFilesAfterEnv + --showConfig + --silent + --skipFilter + --snapshotSerializers + --testEnvironment + --testEnvironmentOptions + --testFailureExitCode + --testLocationInResults + --testMatch + -t, --testNamePattern + --testPathIgnorePatterns + --testPathPattern + --testRegex + --testResultsProcessor + --testRunner + --testSequencer + --testTimeout + --testURL + --timers + --transform + --transformIgnorePatterns + --unmockedModulePathPatterns + -u, --updateSnapshot + --useStderr + --verbose + --watch + --watchAll + --watchPathIgnorePatterns + --watchman ``` ### `backstage-cli versions:bump` From 396111dd05cd7de573c2b37a434f5d46d8b6779c Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 29 Jun 2022 16:25:18 +0200 Subject: [PATCH 055/231] workflows: use latest version of cron action with app auth Signed-off-by: Patrik Oldsberg --- .github/workflows/cron.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml index 4d1ba7fc0e..e2144a56c1 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -8,4 +8,8 @@ jobs: cron: runs-on: ubuntu-latest steps: - - uses: backstage/actions/cron@v0.1.8 + - uses: backstage/actions/cron@v0.1.12 + with: + app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} + private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} + installation-id: ${{ secrets.BACKSTAGE_GOALIE_INSTALLATION_ID }} From 48df40d383592cff0b8982e624656e7edcafba66 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Jun 2022 18:55:35 +0000 Subject: [PATCH 056/231] fix(deps): update dependency aws-sdk to v2.1165.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 3cb38cc83b..bd30071ed1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8335,9 +8335,9 @@ aws-sdk-mock@^5.2.1: traverse "^0.6.6" aws-sdk@^2.1122.0, aws-sdk@^2.840.0, aws-sdk@^2.948.0: - version "2.1164.0" - resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1164.0.tgz#050ce644ed9993582bd02151bf3ac9d9ebc143f5" - integrity sha512-q/M9E68WabF22G8d8lFgo3NH+9RooYswSY9VG6zqN16C19RRm2sGThp8Sxtz/WUK98BAsxSnkLW1ksmy3BsP7Q== + version "2.1165.0" + resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1165.0.tgz#4da669d1e9020344cef75d961882f52a7931a379" + integrity sha512-2oVkSuXsLeErt+H4M2OGIz4p1LPS+QRfY2WnW4QKMndASOcvHKZTfzuY8jmc9ZnDGyguiGdT3idYU8KpNg0sGw== dependencies: buffer "4.9.2" events "1.1.1" From 9b1120cf9073fc7ee19dedd89e6eb6f62a05b761 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Jun 2022 18:57:06 +0000 Subject: [PATCH 057/231] fix(deps): update dependency eslint-plugin-jsx-a11y to v6.6.0 Signed-off-by: Renovate Bot --- yarn.lock | 56 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3cb38cc83b..d56540762a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1457,7 +1457,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.6", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.6", "@babel/runtime@^7.15.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.17.7" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.7.tgz#a5f3328dc41ff39d803f311cfe17703418cf9825" integrity sha512-L6rvG9GDxaLgFjg41K+5Yv9OMrU98sWe+Ykmc6FDJW/+vYZMhdOMKkISgzptMaERHvS2Y2lw9MDRm2gHhlQQoA== @@ -1471,6 +1471,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.18.3": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz#6a1ef59f838debd670421f8c7f2cbb8da9751580" + integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.16.7", "@babel/template@^7.3.3": version "7.16.7" resolved "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" @@ -8118,7 +8125,7 @@ array-ify@^1.0.0: resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= -array-includes@^3.1.2, array-includes@^3.1.3, array-includes@^3.1.4: +array-includes@^3.1.2, array-includes@^3.1.4: version "3.1.4" resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== @@ -8359,10 +8366,10 @@ aws4@^1.11.0, aws4@^1.8.0: resolved "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -axe-core@^4.3.5: - version "4.3.5" - resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz#78d6911ba317a8262bfee292aeafcc1e04b49cc5" - integrity sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA== +axe-core@^4.4.2: + version "4.4.2" + resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.4.2.tgz#dcf7fb6dea866166c3eab33d68208afe4d5f670c" + integrity sha512-LVAaGp/wkkgYJcjmHsoKx4juT1aQvJyPcW09MLCjVTh3V2cc6PnyempiLMNH5iMdfIX/zdbjUx2KDjMLCTdPeA== axios-cached-dns-resolve@0.5.2: version "0.5.2" @@ -11089,10 +11096,10 @@ dagre@^0.8.5: graphlib "^2.1.8" lodash "^4.17.15" -damerau-levenshtein@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz#64368003512a1a6992593741a09a9d31a836f55d" - integrity sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw== +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== dargs@^7.0.0: version "7.0.0" @@ -12308,22 +12315,23 @@ eslint-plugin-jest@^26.1.2: "@typescript-eslint/utils" "^5.10.0" eslint-plugin-jsx-a11y@^6.5.1: - version "6.5.1" - resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz#cdbf2df901040ca140b6ec14715c988889c2a6d8" - integrity sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g== + version "6.6.0" + resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.0.tgz#2c5ac12e013eb98337b9aa261c3b355275cc6415" + integrity sha512-kTeLuIzpNhXL2CwLlc8AHI0aFRwWHcg483yepO9VQiHzM9bZwJdzTkzBszbuPrbgGmq2rlX/FaT2fJQsjUSHsw== dependencies: - "@babel/runtime" "^7.16.3" + "@babel/runtime" "^7.18.3" aria-query "^4.2.2" - array-includes "^3.1.4" + array-includes "^3.1.5" ast-types-flow "^0.0.7" - axe-core "^4.3.5" + axe-core "^4.4.2" axobject-query "^2.2.0" - damerau-levenshtein "^1.0.7" + damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" has "^1.0.3" - jsx-ast-utils "^3.2.1" + jsx-ast-utils "^3.3.1" language-tags "^1.0.5" - minimatch "^3.0.4" + minimatch "^3.1.2" + semver "^6.3.0" eslint-plugin-monorepo@^0.3.2: version "0.3.2" @@ -16885,12 +16893,12 @@ jss@~10.8.2: array-includes "^3.1.2" object.assign "^4.1.2" -jsx-ast-utils@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b" - integrity sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA== +jsx-ast-utils@^3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.1.tgz#a3e0f1cb7e230954eab4dcbce9f6288a78f8ba44" + integrity sha512-pxrjmNpeRw5wwVeWyEAk7QJu2GnBO3uzPFmHCKJJFPKK2Cy0cWL23krGtLdnMmbIi6/FjlrQpPyfQI19ByPOhQ== dependencies: - array-includes "^3.1.3" + array-includes "^3.1.5" object.assign "^4.1.2" just-diff-apply@^4.0.1: From a0258a9587c7c3fcf724236a16da380ade5787cf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Jun 2022 21:55:58 +0000 Subject: [PATCH 058/231] chore(deps): update dependency @types/node to v16.11.42 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3cb38cc83b..450ec3b541 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6653,9 +6653,9 @@ integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== "@types/node@^16.0.0", "@types/node@^16.11.26", "@types/node@^16.9.2": - version "16.11.41" - resolved "https://registry.npmjs.org/@types/node/-/node-16.11.41.tgz#88eb485b1bfdb4c224d878b7832239536aa2f813" - integrity sha512-mqoYK2TnVjdkGk8qXAVGc/x9nSaTpSrFaGFm43BUH3IdoBV0nta6hYaGmdOvIMlbHJbUEVen3gvwpwovAZKNdQ== + version "16.11.42" + resolved "https://registry.npmjs.org/@types/node/-/node-16.11.42.tgz#d2a75c58e9b0902b82dc54bd4c13f8ef12bd1020" + integrity sha512-iwLrPOopPy6V3E+1yHTpJea3bdsNso0b0utLOJJwaa/PLzqBt3GZl3stMcakc/gr89SfcNk2ki3z7Gvue9hYGQ== "@types/normalize-package-data@^2.4.0": version "2.4.1" From 26a38b60b3b88a92d3064e26a6e1c897a1d49f33 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Jun 2022 21:56:42 +0000 Subject: [PATCH 059/231] fix(deps): update dependency @google-cloud/storage to v6.2.2 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3cb38cc83b..aa881dc838 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2316,9 +2316,9 @@ integrity sha512-91ArYvRgXWb73YvEOBMmOcJc0bDRs5yiVHnqkwoG0f3nm7nZuipllz6e7BvFESBvjkDTBC0zMD8QxedUwNLc1A== "@google-cloud/storage@^6.0.0": - version "6.2.1" - resolved "https://registry.npmjs.org/@google-cloud/storage/-/storage-6.2.1.tgz#6f02e44d907e2fcb2b80aeea5cc6e5575dfeefcc" - integrity sha512-obLGOFCp25rpRn4CZvZqQkSHhY+dBrK7IjDdFpF5gOXVxE40ilr287uikiGPjflVFbgNwO2qhioJNqMzxoqHZg== + version "6.2.2" + resolved "https://registry.npmjs.org/@google-cloud/storage/-/storage-6.2.2.tgz#1fd3ee85e5fea55a9696c98769d097b28ff4d775" + integrity sha512-KhAOxmGfmELKKn6cdvgGfAi/YBLi19hI1jX3QI7xQmbeajSFMgUKrIPbbyfMIxQPOEQ9vG0MQX1uganlA/HTRA== dependencies: "@google-cloud/paginator" "^3.0.7" "@google-cloud/projectify" "^3.0.0" From 34f4b938e304584654cc98c348bfd30b737d69f6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 01:08:24 +0000 Subject: [PATCH 060/231] fix(deps): update dependency npm-packlist to v5.1.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 3cb38cc83b..7b7bb1ba45 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19355,9 +19355,9 @@ npm-packlist@^3.0.0: npm-normalize-package-bin "^1.0.1" npm-packlist@^5.0.0, npm-packlist@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.0.tgz#f3fd52903a021009913a133732022132eb355ce7" - integrity sha512-a04sqF6FbkyOAFA19AA0e94gS7Et5T2/IMj3VOT9nOF2RaRdVPQ1Q17Fb/HaDRFs+gbC7HOmhVZ29adpWgmDZg== + version "5.1.1" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz#79bcaf22a26b6c30aa4dd66b976d69cc286800e0" + integrity sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw== dependencies: glob "^8.0.1" ignore-walk "^5.0.1" From 4ae70086df3700d24e9e8028e0b22a9946a75b72 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 07:36:33 +0000 Subject: [PATCH 061/231] chore(deps): update dependency esbuild to v0.14.48 Signed-off-by: Renovate Bot --- yarn.lock | 206 +++++++++++++++++++++++++++--------------------------- 1 file changed, 103 insertions(+), 103 deletions(-) diff --git a/yarn.lock b/yarn.lock index 450ec3b541..5584ec9b1d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12048,75 +12048,75 @@ es6-error@^4.1.1: resolved "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== -esbuild-android-64@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz#ef95b42c67bcf4268c869153fa3ad1466c4cea6b" - integrity sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g== +esbuild-android-64@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.48.tgz#7e6394a0e517f738641385aaf553c7e4fb6d1ae3" + integrity sha512-3aMjboap/kqwCUpGWIjsk20TtxVoKck8/4Tu19rubh7t5Ra0Yrpg30Mt1QXXlipOazrEceGeWurXKeFJgkPOUg== -esbuild-android-arm64@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz#4ebd7ce9fb250b4695faa3ee46fd3b0754ecd9e6" - integrity sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ== +esbuild-android-arm64@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.48.tgz#6877566be0f82dd5a43030c0007d06ece7f7c02f" + integrity sha512-vptI3K0wGALiDq+EvRuZotZrJqkYkN5282iAfcffjI5lmGG9G1ta/CIVauhY42MBXwEgDJkweiDcDMRLzBZC4g== -esbuild-darwin-64@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz#e0da6c244f497192f951807f003f6a423ed23188" - integrity sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA== +esbuild-darwin-64@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.48.tgz#ea3caddb707d88f844b1aa1dea5ff3b0a71ef1fd" + integrity sha512-gGQZa4+hab2Va/Zww94YbshLuWteyKGD3+EsVon8EWTWhnHFRm5N9NbALNbwi/7hQ/hM1Zm4FuHg+k6BLsl5UA== -esbuild-darwin-arm64@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz#cd40fd49a672fca581ed202834239dfe540a9028" - integrity sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw== +esbuild-darwin-arm64@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.48.tgz#4e5eaab54df66cc319b76a2ac0e8af4e6f0d9c2f" + integrity sha512-bFjnNEXjhZT+IZ8RvRGNJthLWNHV5JkCtuOFOnjvo5pC0sk2/QVk0Qc06g2PV3J0TcU6kaPC3RN9yy9w2PSLEA== -esbuild-freebsd-64@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz#8da6a14c095b29c01fc8087a16cb7906debc2d67" - integrity sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ== +esbuild-freebsd-64@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.48.tgz#47b5abc7426eae66861490ffbb380acc67af5b15" + integrity sha512-1NOlwRxmOsnPcWOGTB10JKAkYSb2nue0oM1AfHWunW/mv3wERfJmnYlGzL3UAOIUXZqW8GeA2mv+QGwq7DToqA== -esbuild-freebsd-arm64@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz#ad31f9c92817ff8f33fd253af7ab5122dc1b83f6" - integrity sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ== +esbuild-freebsd-arm64@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.48.tgz#e8c54c8637cd44feed967ea12338b0a4da3a7b11" + integrity sha512-gXqKdO8wabVcYtluAbikDH2jhXp+Klq5oCD5qbVyUG6tFiGhrC9oczKq3vIrrtwcxDQqK6+HDYK8Zrd4bCA9Gw== -esbuild-linux-32@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz#de085e4db2e692ea30c71208ccc23fdcf5196c58" - integrity sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw== +esbuild-linux-32@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.48.tgz#229cf3246de2b7937c3ac13fac622d4d7a1344c5" + integrity sha512-ghGyDfS289z/LReZQUuuKq9KlTiTspxL8SITBFQFAFRA/IkIvDpnZnCAKTCjGXAmUqroMQfKJXMxyjJA69c/nQ== -esbuild-linux-64@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz#2a9321bbccb01f01b04cebfcfccbabeba3658ba1" - integrity sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw== +esbuild-linux-64@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.48.tgz#7c0e7226c02c42aacc5656c36977493dc1e96c4f" + integrity sha512-vni3p/gppLMVZLghI7oMqbOZdGmLbbKR23XFARKnszCIBpEMEDxOMNIKPmMItQrmH/iJrL1z8Jt2nynY0bE1ug== -esbuild-linux-arm64@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz#b9da7b6fc4b0ca7a13363a0c5b7bb927e4bc535a" - integrity sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw== +esbuild-linux-arm64@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.48.tgz#0af1eda474b5c6cc0cace8235b74d0cb8fcf57a7" + integrity sha512-3CFsOlpoxlKPRevEHq8aAntgYGYkE1N9yRYAcPyng/p4Wyx0tPR5SBYsxLKcgPB9mR8chHEhtWYz6EZ+H199Zw== -esbuild-linux-arm@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz#56fec2a09b9561c337059d4af53625142aded853" - integrity sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA== +esbuild-linux-arm@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.48.tgz#de4d1fa6b77cdcd00e2bb43dd0801e4680f0ab52" + integrity sha512-+VfSV7Akh1XUiDNXgqgY1cUP1i2vjI+BmlyXRfVz5AfV3jbpde8JTs5Q9sYgaoq5cWfuKfoZB/QkGOI+QcL1Tw== -esbuild-linux-mips64le@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz#9db21561f8f22ed79ef2aedb7bbef082b46cf823" - integrity sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg== +esbuild-linux-mips64le@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.48.tgz#822c1778495f7868e990d4da47ad7281df28fd15" + integrity sha512-cs0uOiRlPp6ymknDnjajCgvDMSsLw5mST2UXh+ZIrXTj2Ifyf2aAP3Iw4DiqgnyYLV2O/v/yWBJx+WfmKEpNLA== -esbuild-linux-ppc64le@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz#dc3a3da321222b11e96e50efafec9d2de408198b" - integrity sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w== +esbuild-linux-ppc64le@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.48.tgz#55de0a9ec4a48fedfe82a63e083164d001709447" + integrity sha512-+2F0vJMkuI0Wie/wcSPDCqXvSFEELH7Jubxb7mpWrA/4NpT+/byjxDz0gG6R1WJoeDefcrMfpBx4GFNN1JQorQ== -esbuild-linux-riscv64@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz#9bd6dcd3dca6c0357084ecd06e1d2d4bf105335f" - integrity sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g== +esbuild-linux-riscv64@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.48.tgz#cd2b7381880b2f4b21a5a598fb673492120f18a5" + integrity sha512-BmaK/GfEE+5F2/QDrIXteFGKnVHGxlnK9MjdVKMTfvtmudjY3k2t8NtlY4qemKSizc+QwyombGWTBDc76rxePA== -esbuild-linux-s390x@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz#a458af939b52f2cd32fc561410d441a51f69d41f" - integrity sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw== +esbuild-linux-s390x@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.48.tgz#4b319eca2a5c64637fc7397ffbd9671719cdb6bf" + integrity sha512-tndw/0B9jiCL+KWKo0TSMaUm5UWBLsfCKVdbfMlb3d5LeV9WbijZ8Ordia8SAYv38VSJWOEt6eDCdOx8LqkC4g== esbuild-loader@^2.18.0: version "2.19.0" @@ -12130,61 +12130,61 @@ esbuild-loader@^2.18.0: tapable "^2.2.0" webpack-sources "^2.2.0" -esbuild-netbsd-64@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz#6388e785d7e7e4420cb01348d7483ab511b16aa8" - integrity sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ== +esbuild-netbsd-64@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.48.tgz#c27cde8b5cb55dcc227943a18ab078fb98d0adbf" + integrity sha512-V9hgXfwf/T901Lr1wkOfoevtyNkrxmMcRHyticybBUHookznipMOHoF41Al68QBsqBxnITCEpjjd4yAos7z9Tw== -esbuild-openbsd-64@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz#309af806db561aa886c445344d1aacab850dbdc5" - integrity sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw== +esbuild-openbsd-64@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.48.tgz#af5ab2d1cb41f09064bba9465fc8bf1309150df1" + integrity sha512-+IHf4JcbnnBl4T52egorXMatil/za0awqzg2Vy6FBgPcBpisDWT2sVz/tNdrK9kAqj+GZG/jZdrOkj7wsrNTKA== -esbuild-sunos-64@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz#3f19612dcdb89ba6c65283a7ff6e16f8afbf8aaa" - integrity sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ== +esbuild-sunos-64@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.48.tgz#db3ae20526055cf6fd5c4582676233814603ac54" + integrity sha512-77m8bsr5wOpOWbGi9KSqDphcq6dFeJyun8TA+12JW/GAjyfTwVtOnN8DOt6DSPUfEV+ltVMNqtXUeTeMAxl5KA== -esbuild-windows-32@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz#a92d279c8458d5dc319abcfeb30aa49e8f2e6f7f" - integrity sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ== +esbuild-windows-32@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.48.tgz#021ffceb0a3f83078262870da88a912293c57475" + integrity sha512-EPgRuTPP8vK9maxpTGDe5lSoIBHGKO/AuxDncg5O3NkrPeLNdvvK8oywB0zGaAZXxYWfNNSHskvvDgmfVTguhg== -esbuild-windows-64@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz#2564c3fcf0c23d701edb71af8c52d3be4cec5f8a" - integrity sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ== +esbuild-windows-64@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.48.tgz#a4d3407b580f9faac51f61eec095fa985fb3fee4" + integrity sha512-YmpXjdT1q0b8ictSdGwH3M8VCoqPpK1/UArze3X199w6u8hUx3V8BhAi1WjbsfDYRBanVVtduAhh2sirImtAvA== -esbuild-windows-arm64@0.14.47: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz#86d9db1a22d83360f726ac5fba41c2f625db6878" - integrity sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ== +esbuild-windows-arm64@0.14.48: + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.48.tgz#762c0562127d8b09bfb70a3c816460742dd82880" + integrity sha512-HHaOMCsCXp0rz5BT2crTka6MPWVno121NKApsGs/OIW5QC0ggC69YMGs1aJct9/9FSUF4A1xNE/cLvgB5svR4g== esbuild@^0.14.1, esbuild@^0.14.10, esbuild@^0.14.39: - version "0.14.47" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.47.tgz#0d6415f6bd8eb9e73a58f7f9ae04c5276cda0e4d" - integrity sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA== + version "0.14.48" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.48.tgz#da5d8d25cd2d940c45ea0cfecdca727f7aee2b85" + integrity sha512-w6N1Yn5MtqK2U1/WZTX9ZqUVb8IOLZkZ5AdHkT6x3cHDMVsYWC7WPdiLmx19w3i4Rwzy5LqsEMtVihG3e4rFzA== optionalDependencies: - esbuild-android-64 "0.14.47" - esbuild-android-arm64 "0.14.47" - esbuild-darwin-64 "0.14.47" - esbuild-darwin-arm64 "0.14.47" - esbuild-freebsd-64 "0.14.47" - esbuild-freebsd-arm64 "0.14.47" - esbuild-linux-32 "0.14.47" - esbuild-linux-64 "0.14.47" - esbuild-linux-arm "0.14.47" - esbuild-linux-arm64 "0.14.47" - esbuild-linux-mips64le "0.14.47" - esbuild-linux-ppc64le "0.14.47" - esbuild-linux-riscv64 "0.14.47" - esbuild-linux-s390x "0.14.47" - esbuild-netbsd-64 "0.14.47" - esbuild-openbsd-64 "0.14.47" - esbuild-sunos-64 "0.14.47" - esbuild-windows-32 "0.14.47" - esbuild-windows-64 "0.14.47" - esbuild-windows-arm64 "0.14.47" + esbuild-android-64 "0.14.48" + esbuild-android-arm64 "0.14.48" + esbuild-darwin-64 "0.14.48" + esbuild-darwin-arm64 "0.14.48" + esbuild-freebsd-64 "0.14.48" + esbuild-freebsd-arm64 "0.14.48" + esbuild-linux-32 "0.14.48" + esbuild-linux-64 "0.14.48" + esbuild-linux-arm "0.14.48" + esbuild-linux-arm64 "0.14.48" + esbuild-linux-mips64le "0.14.48" + esbuild-linux-ppc64le "0.14.48" + esbuild-linux-riscv64 "0.14.48" + esbuild-linux-s390x "0.14.48" + esbuild-netbsd-64 "0.14.48" + esbuild-openbsd-64 "0.14.48" + esbuild-sunos-64 "0.14.48" + esbuild-windows-32 "0.14.48" + esbuild-windows-64 "0.14.48" + esbuild-windows-arm64 "0.14.48" escalade@^3.1.1: version "3.1.1" From ddf30fbd8acc1dee9b5473fd41079ad46be89d3a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 07:50:46 +0000 Subject: [PATCH 062/231] fix(deps): update dependency @uiw/react-codemirror to v4.9.5 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1e60c65663..6e03b9eade 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7402,9 +7402,9 @@ eslint-visitor-keys "^3.0.0" "@uiw/react-codemirror@^4.9.3": - version "4.9.4" - resolved "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.9.4.tgz#4643201f279fed103f2cf15df9431931fe4e9f15" - integrity sha512-IsC5xDevpIeLMzHQQwT2W40gFFIdKeT1T0DHjzzai+s5SIrMlGe3QSHWeC1wSO7FtfNxFpFlTYMGJm5JwUviMA== + version "4.9.5" + resolved "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.9.5.tgz#0f66c09dfc355baef5a7020f206da8db90bae223" + integrity sha512-KHgP/PII9Gv4iEUzbdO95qpSSPy27iSHzxQ01mBPWC4UvzuA0eQY2h64gzi/ld68esbKMGYoevgOBPCRJwNN1A== dependencies: "@babel/runtime" ">=7.11.0" "@codemirror/theme-one-dark" "^6.0.0" From e6ed8153ccc4414a29abddf36f041ae3b004310f Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 29 Jun 2022 21:11:19 +0200 Subject: [PATCH 063/231] workflows: switch to common composite action for yarn install Signed-off-by: Patrik Oldsberg --- .github/workflows/ci.yml | 35 ++------------ .github/workflows/deploy_nightly.yml | 24 ++-------- .github/workflows/deploy_packages.yml | 48 +++---------------- .github/workflows/sync_code-formatting.yml | 24 ++-------- .github/workflows/sync_snyk-github-issues.yml | 24 ++-------- .github/workflows/verify_e2e-linux.yml | 26 ++-------- .github/workflows/verify_storybook.yml | 34 ++++--------- .github/workflows/verify_windows.yml | 14 +----- 8 files changed, 33 insertions(+), 196 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0718c8a8b9..c9fc151fb1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,45 +64,16 @@ jobs: - name: fetch branch master run: git fetch origin master - # Beginning of yarn setup, keep in sync between all workflows. - # TODO(Rugvip): move this to composite action once all features we use are supported - name: use node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - # Cache every node_modules folder inside the monorepo - - name: cache all node_modules - id: cache-modules - uses: actions/cache@v3 - with: - path: '**/node_modules' - # We use both yarn.lock and package.json as cache keys to ensure that - # changes to local monorepo packages bust the cache. - key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }} - - # If we get a cache hit for node_modules, there's no need to bring in the global - # yarn cache or run yarn install, as all dependencies will be installed already. - - - name: find location of global yarn cache - id: yarn-cache - if: steps.cache-modules.outputs.cache-hit != 'true' - run: echo "::set-output name=dir::$(yarn cache dir)" - - - name: cache global yarn cache - uses: actions/cache@v3 - if: steps.cache-modules.outputs.cache-hit != 'true' - with: - path: ${{ steps.yarn-cache.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - name: yarn install - if: steps.cache-modules.outputs.cache-hit != 'true' - run: yarn install --frozen-lockfile - # End of yarn setup + uses: backstage/actions/yarn-install@v0.2.1 + with: + cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} - name: check for yarn.lock changes id: yarn-lock diff --git a/.github/workflows/deploy_nightly.yml b/.github/workflows/deploy_nightly.yml index c90894bce4..97b3f45954 100644 --- a/.github/workflows/deploy_nightly.yml +++ b/.github/workflows/deploy_nightly.yml @@ -20,33 +20,15 @@ jobs: steps: - uses: actions/checkout@v3 - # Beginning of yarn setup, keep in sync between all workflows, see ci.yml - name: use node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - - name: cache all node_modules - id: cache-modules - uses: actions/cache@v3 - with: - path: '**/node_modules' - key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }} - - name: find location of global yarn cache - id: yarn-cache - if: steps.cache-modules.outputs.cache-hit != 'true' - run: echo "::set-output name=dir::$(yarn cache dir)" - - name: cache global yarn cache - uses: actions/cache@v3 - if: steps.cache-modules.outputs.cache-hit != 'true' - with: - path: ${{ steps.yarn-cache.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - name: yarn install - run: yarn install --frozen-lockfile - # End of yarn setup + uses: backstage/actions/yarn-install@v0.2.1 + with: + cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} # No verification done here, only build & publish. If the master branch # is broken we will see that from those builds, but we still want to push nightly diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml index b63507df0c..529c7a4286 100644 --- a/.github/workflows/deploy_packages.yml +++ b/.github/workflows/deploy_packages.yml @@ -61,33 +61,15 @@ jobs: steps: - uses: actions/checkout@v3 - # Beginning of yarn setup, keep in sync between all workflows, see ci.yml - name: use node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - - name: cache all node_modules - id: cache-modules - uses: actions/cache@v3 - with: - path: '**/node_modules' - key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }} - - name: find location of global yarn cache - id: yarn-cache - if: steps.cache-modules.outputs.cache-hit != 'true' - run: echo "::set-output name=dir::$(yarn cache dir)" - - name: cache global yarn cache - uses: actions/cache@v3 - if: steps.cache-modules.outputs.cache-hit != 'true' - with: - path: ${{ steps.yarn-cache.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - name: yarn install - run: yarn install --frozen-lockfile - # End of yarn setup + uses: backstage/actions/yarn-install@v0.2.1 + with: + cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} - name: Fetch previous commit for release check run: git fetch origin '${{ github.event.before }}' @@ -157,33 +139,15 @@ jobs: steps: - uses: actions/checkout@v3 - # Beginning of yarn setup, keep in sync between all workflows, see ci.yml - name: use node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - - name: cache all node_modules - id: cache-modules - uses: actions/cache@v3 - with: - path: '**/node_modules' - key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }} - - name: find location of global yarn cache - id: yarn-cache - if: steps.cache-modules.outputs.cache-hit != 'true' - run: echo "::set-output name=dir::$(yarn cache dir)" - - name: cache global yarn cache - uses: actions/cache@v3 - if: steps.cache-modules.outputs.cache-hit != 'true' - with: - path: ${{ steps.yarn-cache.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - name: yarn install - run: yarn install --frozen-lockfile - # End of yarn setup + uses: backstage/actions/yarn-install@v0.2.1 + with: + cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} - name: build type declarations run: yarn tsc:full diff --git a/.github/workflows/sync_code-formatting.yml b/.github/workflows/sync_code-formatting.yml index b6fce0e68d..6ea6bc5de6 100644 --- a/.github/workflows/sync_code-formatting.yml +++ b/.github/workflows/sync_code-formatting.yml @@ -14,33 +14,15 @@ jobs: # Fetch changes to previous commit - required for 'only_changed' in Prettier action fetch-depth: 0 - # Beginning of yarn setup, keep in sync between all workflows, see ci.yml - name: use node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - - name: cache all node_modules - id: cache-modules - uses: actions/cache@v3 - with: - path: '**/node_modules' - key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }} - - name: find location of global yarn cache - id: yarn-cache - if: steps.cache-modules.outputs.cache-hit != 'true' - run: echo "::set-output name=dir::$(yarn cache dir)" - - name: cache global yarn cache - uses: actions/cache@v3 - if: steps.cache-modules.outputs.cache-hit != 'true' - with: - path: ${{ steps.yarn-cache.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - name: yarn install - run: yarn install --frozen-lockfile - # End of yarn setup + uses: backstage/actions/yarn-install@v0.2.1 + with: + cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} - name: Run Prettier on ADOPTERS.md uses: creyD/prettier_action@v4.2 diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml index e45a36c8e8..9daf85ffa6 100644 --- a/.github/workflows/sync_snyk-github-issues.yml +++ b/.github/workflows/sync_snyk-github-issues.yml @@ -16,33 +16,15 @@ jobs: steps: - uses: actions/checkout@v3 - # Beginning of yarn setup, keep in sync between all workflows, see ci.yml - name: use node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - - name: cache all node_modules - id: cache-modules - uses: actions/cache@v3 - with: - path: '**/node_modules' - key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }} - - name: find location of global yarn cache - id: yarn-cache - if: steps.cache-modules.outputs.cache-hit != 'true' - run: echo "::set-output name=dir::$(yarn cache dir)" - - name: cache global yarn cache - uses: actions/cache@v3 - if: steps.cache-modules.outputs.cache-hit != 'true' - with: - path: ${{ steps.yarn-cache.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - name: yarn install - run: yarn install --frozen-lockfile - # End of yarn setup + uses: backstage/actions/yarn-install@v0.2.1 + with: + cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} - name: Create Snyk report uses: snyk/actions/node@master diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml index 884d8bf172..0fe18b345e 100644 --- a/.github/workflows/verify_e2e-linux.yml +++ b/.github/workflows/verify_e2e-linux.yml @@ -40,35 +40,15 @@ jobs: steps: - uses: actions/checkout@v3 - # Beginning of yarn setup, keep in sync between all workflows, see ci.yml - name: use node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - - name: cache all node_modules - id: cache-modules - uses: actions/cache@v3 - with: - path: '**/node_modules' - key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }} - - name: find location of global yarn cache - id: yarn-cache - if: steps.cache-modules.outputs.cache-hit != 'true' - run: echo "::set-output name=dir::$(yarn cache dir)" - - name: setup chrome - uses: browser-actions/setup-chrome@latest - - name: cache global yarn cache - uses: actions/cache@v3 - if: steps.cache-modules.outputs.cache-hit != 'true' - with: - path: ${{ steps.yarn-cache.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - name: yarn install - run: yarn install --frozen-lockfile - # End of yarn setup + uses: backstage/actions/yarn-install@v0.2.1 + with: + cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} - run: yarn tsc - run: yarn backstage-cli repo build diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml index a13aa3ae71..7bbbac8a40 100644 --- a/.github/workflows/verify_storybook.yml +++ b/.github/workflows/verify_storybook.yml @@ -17,44 +17,30 @@ on: jobs: chromatic: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [ubuntu-latest] + node-version: [16.x] + steps: - uses: actions/checkout@v3 with: fetch-depth: 0 # Required to retrieve git history - # Beginning of yarn setup, keep in sync between all workflows, see ci.yml - name: use node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - - name: cache all node_modules - id: cache-modules - uses: actions/cache@v3 + - name: yarn install + uses: backstage/actions/yarn-install@v0.2.1 with: - path: '**/node_modules' - key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }} - - name: find location of global yarn cache - id: yarn-cache - if: steps.cache-modules.outputs.cache-hit != 'true' - run: echo "::set-output name=dir::$(yarn cache dir)" - - name: cache global yarn cache - uses: actions/cache@v3 - if: steps.cache-modules.outputs.cache-hit != 'true' - with: - path: ${{ steps.yarn-cache.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - - name: top-level install - run: yarn install --frozen-lockfile - + cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} - name: storybook yarn install run: yarn install --frozen-lockfile working-directory: storybook - # End of yarn setup - run: yarn build-storybook diff --git a/.github/workflows/verify_windows.yml b/.github/workflows/verify_windows.yml index bb8aa9e5aa..e286d42c7e 100644 --- a/.github/workflows/verify_windows.yml +++ b/.github/workflows/verify_windows.yml @@ -26,25 +26,15 @@ jobs: steps: - uses: actions/checkout@v3 - # Beginning of yarn setup, keep in sync between all workflows, see ci.yml - name: use node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - - name: find location of global yarn cache - id: yarn-cache - run: echo "::set-output name=dir::$(yarn cache dir)" - - name: cache global yarn cache - uses: actions/cache@v3 - with: - path: ${{ steps.yarn-cache.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- + + # Windows file operation slowness means there's no point caching this - name: yarn install run: yarn install --frozen-lockfile - # End of yarn setup - name: lint run: yarn backstage-cli repo lint From ec5a609dedf08568175a5ae494a596ccbede8877 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 08:05:55 +0000 Subject: [PATCH 064/231] fix(deps): update dependency webpack-dev-server to v4.9.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 1e60c65663..c069f8a2d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10142,10 +10142,10 @@ configstore@^5.0.1: write-file-atomic "^3.0.0" xdg-basedir "^4.0.0" -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== consola@^2.15.0: version "2.15.3" @@ -25930,9 +25930,9 @@ webpack-dev-middleware@^5.3.1: schema-utils "^4.0.0" webpack-dev-server@^4.7.3: - version "4.9.2" - resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.2.tgz#c188db28c7bff12f87deda2a5595679ebbc3c9bc" - integrity sha512-H95Ns95dP24ZsEzO6G9iT+PNw4Q7ltll1GfJHV4fKphuHWgKFzGHWi4alTlTnpk1SPPk41X+l2RB7rLfIhnB9Q== + version "4.9.3" + resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz#2360a5d6d532acb5410a668417ad549ee3b8a3c9" + integrity sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw== dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5" @@ -25946,7 +25946,7 @@ webpack-dev-server@^4.7.3: chokidar "^3.5.3" colorette "^2.0.10" compression "^1.7.4" - connect-history-api-fallback "^1.6.0" + connect-history-api-fallback "^2.0.0" default-gateway "^6.0.3" express "^4.17.3" graceful-fs "^4.2.6" From a581804805a721ce21fe03246aafe3e8b6632ed8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 08:06:06 +0000 Subject: [PATCH 065/231] chore(deps): update backstage/actions action to v0.2.1 Signed-off-by: Renovate Bot --- .github/workflows/cron.yml | 2 +- .github/workflows/issue.yaml | 2 +- .github/workflows/pr.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml index e2144a56c1..85d7786cf7 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -8,7 +8,7 @@ jobs: cron: runs-on: ubuntu-latest steps: - - uses: backstage/actions/cron@v0.1.12 + - uses: backstage/actions/cron@v0.2.1 with: app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml index 972f90795c..5fa11b839f 100644 --- a/.github/workflows/issue.yaml +++ b/.github/workflows/issue.yaml @@ -10,4 +10,4 @@ jobs: if: github.repository == 'backstage/backstage' steps: - name: Issue sync - uses: backstage/actions/issue-sync@v0.1.8 + uses: backstage/actions/issue-sync@v0.2.1 diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 01254a53a8..e65240ac1b 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -9,6 +9,6 @@ jobs: if: github.repository == 'backstage/backstage' steps: - name: PR sync - uses: backstage/actions/pr-sync@v0.1.8 + uses: backstage/actions/pr-sync@v0.2.1 with: github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }} From 948d675442ab62fdd72bd9b54d3ac0f7bb38a25d Mon Sep 17 00:00:00 2001 From: sblausten Date: Wed, 29 Jun 2022 17:19:34 +0200 Subject: [PATCH 066/231] Allow FactRetrieverRegistry to be passed in to context builder for more flexibility Signed-off-by: sblausten --- .../techInsightsContextBuilder.test.ts | 74 +++++++++++++++++++ .../src/service/techInsightsContextBuilder.ts | 18 ++++- 2 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts diff --git a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts new file mode 100644 index 0000000000..d9aee6d1d3 --- /dev/null +++ b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts @@ -0,0 +1,74 @@ +/* + * 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 { buildTechInsightsContext } from './techInsightsContextBuilder'; +import { + DatabaseManager, + getVoidLogger, + PluginDatabaseManager, + ServerTokenManager, +} from '@backstage/backend-common'; +import { ConfigReader } from '@backstage/config'; +import { TaskScheduler } from '@backstage/backend-tasks'; +import { FactRetrieverRegistry } from './fact/FactRetrieverRegistry'; + +jest.mock('./fact/FactRetrieverRegistry'); + +describe('buildTechInsightsContext', () => { + const pluginDatabase = {} as PluginDatabaseManager; + const manager = {} as DatabaseManager; + const discoveryMock = { + getBaseUrl: (_: string) => Promise.resolve('http://mock.url'), + getExternalBaseUrl: (_: string) => Promise.resolve('http://mock.url'), + }; + const scheduler = new TaskScheduler(manager, getVoidLogger()).forPlugin( + 'tech-insights', + ); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('constructs the default FactRetrieverRegistry if factRetrievers but no factRetrieverRegistry are passed in', () => { + buildTechInsightsContext({ + database: pluginDatabase, + logger: getVoidLogger(), + factRetrievers: [], + scheduler: scheduler, + config: ConfigReader.fromConfigs([]), + discovery: discoveryMock, + tokenManager: ServerTokenManager.noop(), + }); + + expect(FactRetrieverRegistry).toHaveBeenCalledTimes(1); + }); + + it('uses factRetrieverRegistry implementation instead of the default FactRetrieverRegistry if it is passed in', () => { + const factRetrieverRegistryMock = {} as FactRetrieverRegistry; + + buildTechInsightsContext({ + database: pluginDatabase, + logger: getVoidLogger(), + factRetrievers: [], + factRetrieverRegistry: factRetrieverRegistryMock, + scheduler: scheduler, + config: ConfigReader.fromConfigs([]), + discovery: discoveryMock, + tokenManager: ServerTokenManager.noop(), + }); + + expect(FactRetrieverRegistry).not.toHaveBeenCalled(); + }); +}); diff --git a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts index e22bfbd253..418c406784 100644 --- a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts +++ b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts @@ -52,13 +52,15 @@ export interface TechInsightsOptions< * A collection of FactRetrieverRegistrations. * Used to register FactRetrievers and their schemas and schedule an execution loop for them. */ - factRetrievers: FactRetrieverRegistration[]; + factRetrievers?: FactRetrieverRegistration[]; /** * Optional factory exposing a `construct` method to initialize a FactChecker implementation */ factCheckerFactory?: FactCheckerFactory; + factRetrieverRegistry?: FactRetrieverRegistry; + logger: Logger; config: Config; discovery: PluginEndpointDiscovery; @@ -109,7 +111,19 @@ export const buildTechInsightsContext = async < tokenManager, } = options; - const factRetrieverRegistry = new FactRetrieverRegistry(factRetrievers); + const buildFactRetrieverRegistry = () => { + if (!options.factRetrieverRegistry) { + if (!factRetrievers) { + throw new Error( + 'Failed to build FactRetrieverRegistry because no factRetrievers found', + ); + } + return new FactRetrieverRegistry(factRetrievers); + } + return options.factRetrieverRegistry; + }; + + const factRetrieverRegistry = buildFactRetrieverRegistry(); const persistenceContext = await initializePersistenceContext( await database.getClient(), From f3d530bbe6ab5328059f49326bd3471ab7a9862b Mon Sep 17 00:00:00 2001 From: sblausten Date: Wed, 29 Jun 2022 18:01:31 +0200 Subject: [PATCH 067/231] Use new interface Signed-off-by: sblausten --- .../src/service/fact/FactRetrieverRegistry.ts | 13 +++++++++++-- .../src/service/techInsightsContextBuilder.ts | 9 ++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts b/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts index b122f52f0a..a8317db1d2 100644 --- a/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts +++ b/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts @@ -21,8 +21,17 @@ import { } from '@backstage/plugin-tech-insights-node'; import { ConflictError, NotFoundError } from '@backstage/errors'; -export class FactRetrieverRegistry { - private readonly retrievers = new Map(); +export interface FactRetrieverRegistryInterface { + readonly retrievers: Map; + register(registration: FactRetrieverRegistration): void; + get(retrieverReference: string): FactRetrieverRegistration; + listRetrievers(): FactRetriever[]; + listRegistrations(): FactRetrieverRegistration[]; + getSchemas(): FactSchema[]; +} + +export class FactRetrieverRegistry implements FactRetrieverRegistryInterface { + readonly retrievers = new Map(); constructor(retrievers: FactRetrieverRegistration[]) { retrievers.forEach(it => { diff --git a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts index 418c406784..1314ee5dbd 100644 --- a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts +++ b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts @@ -16,7 +16,10 @@ import { FactRetrieverEngine } from './fact/FactRetrieverEngine'; import { Logger } from 'winston'; -import { FactRetrieverRegistry } from './fact/FactRetrieverRegistry'; +import { + FactRetrieverRegistry, + FactRetrieverRegistryInterface, +} from './fact/FactRetrieverRegistry'; import { Config } from '@backstage/config'; import { PluginDatabaseManager, @@ -59,7 +62,7 @@ export interface TechInsightsOptions< */ factCheckerFactory?: FactCheckerFactory; - factRetrieverRegistry?: FactRetrieverRegistry; + factRetrieverRegistry?: FactRetrieverRegistryInterface; logger: Logger; config: Config; @@ -111,7 +114,7 @@ export const buildTechInsightsContext = async < tokenManager, } = options; - const buildFactRetrieverRegistry = () => { + const buildFactRetrieverRegistry = (): FactRetrieverRegistryInterface => { if (!options.factRetrieverRegistry) { if (!factRetrievers) { throw new Error( From 9120fb3056fdd49ae0e19b2381e4f0e3542af4a0 Mon Sep 17 00:00:00 2001 From: sblausten Date: Thu, 30 Jun 2022 10:06:01 +0200 Subject: [PATCH 068/231] Refactor naming Signed-off-by: sblausten --- plugins/tech-insights-backend/src/index.ts | 1 + .../src/service/fact/FactRetrieverRegistry.ts | 4 ++-- .../src/service/techInsightsContextBuilder.test.ts | 10 +++++----- .../src/service/techInsightsContextBuilder.ts | 8 ++++---- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/plugins/tech-insights-backend/src/index.ts b/plugins/tech-insights-backend/src/index.ts index 82fda47367..66180b1006 100644 --- a/plugins/tech-insights-backend/src/index.ts +++ b/plugins/tech-insights-backend/src/index.ts @@ -25,5 +25,6 @@ export type { export type { PersistenceContext } from './service/persistence/persistenceContext'; export { createFactRetrieverRegistration } from './service/fact/createFactRetriever'; +export type { FactRetrieverRegistry } from './service/fact/FactRetrieverRegistry'; export type { FactRetrieverRegistrationOptions } from './service/fact/createFactRetriever'; export * from './service/fact/factRetrievers'; diff --git a/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts b/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts index a8317db1d2..29099201ce 100644 --- a/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts +++ b/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts @@ -21,7 +21,7 @@ import { } from '@backstage/plugin-tech-insights-node'; import { ConflictError, NotFoundError } from '@backstage/errors'; -export interface FactRetrieverRegistryInterface { +export interface FactRetrieverRegistry { readonly retrievers: Map; register(registration: FactRetrieverRegistration): void; get(retrieverReference: string): FactRetrieverRegistration; @@ -30,7 +30,7 @@ export interface FactRetrieverRegistryInterface { getSchemas(): FactSchema[]; } -export class FactRetrieverRegistry implements FactRetrieverRegistryInterface { +export class DefaultFactRetrieverRegistry implements FactRetrieverRegistry { readonly retrievers = new Map(); constructor(retrievers: FactRetrieverRegistration[]) { diff --git a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts index d9aee6d1d3..d2660880b8 100644 --- a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts +++ b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts @@ -22,7 +22,7 @@ import { } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { TaskScheduler } from '@backstage/backend-tasks'; -import { FactRetrieverRegistry } from './fact/FactRetrieverRegistry'; +import { DefaultFactRetrieverRegistry } from './fact/FactRetrieverRegistry'; jest.mock('./fact/FactRetrieverRegistry'); @@ -41,7 +41,7 @@ describe('buildTechInsightsContext', () => { jest.clearAllMocks(); }); - it('constructs the default FactRetrieverRegistry if factRetrievers but no factRetrieverRegistry are passed in', () => { + it('constructs the default FactRetrieverRegistry if factRetrievers but no factRetrieverRegistry are passed', () => { buildTechInsightsContext({ database: pluginDatabase, logger: getVoidLogger(), @@ -52,11 +52,11 @@ describe('buildTechInsightsContext', () => { tokenManager: ServerTokenManager.noop(), }); - expect(FactRetrieverRegistry).toHaveBeenCalledTimes(1); + expect(DefaultFactRetrieverRegistry).toHaveBeenCalledTimes(1); }); it('uses factRetrieverRegistry implementation instead of the default FactRetrieverRegistry if it is passed in', () => { - const factRetrieverRegistryMock = {} as FactRetrieverRegistry; + const factRetrieverRegistryMock = {} as DefaultFactRetrieverRegistry; buildTechInsightsContext({ database: pluginDatabase, @@ -69,6 +69,6 @@ describe('buildTechInsightsContext', () => { tokenManager: ServerTokenManager.noop(), }); - expect(FactRetrieverRegistry).not.toHaveBeenCalled(); + expect(DefaultFactRetrieverRegistry).not.toHaveBeenCalled(); }); }); diff --git a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts index 1314ee5dbd..b194fb6b69 100644 --- a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts +++ b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts @@ -17,8 +17,8 @@ import { FactRetrieverEngine } from './fact/FactRetrieverEngine'; import { Logger } from 'winston'; import { + DefaultFactRetrieverRegistry, FactRetrieverRegistry, - FactRetrieverRegistryInterface, } from './fact/FactRetrieverRegistry'; import { Config } from '@backstage/config'; import { @@ -62,7 +62,7 @@ export interface TechInsightsOptions< */ factCheckerFactory?: FactCheckerFactory; - factRetrieverRegistry?: FactRetrieverRegistryInterface; + factRetrieverRegistry?: FactRetrieverRegistry; logger: Logger; config: Config; @@ -114,14 +114,14 @@ export const buildTechInsightsContext = async < tokenManager, } = options; - const buildFactRetrieverRegistry = (): FactRetrieverRegistryInterface => { + const buildFactRetrieverRegistry = (): FactRetrieverRegistry => { if (!options.factRetrieverRegistry) { if (!factRetrievers) { throw new Error( 'Failed to build FactRetrieverRegistry because no factRetrievers found', ); } - return new FactRetrieverRegistry(factRetrievers); + return new DefaultFactRetrieverRegistry(factRetrievers); } return options.factRetrieverRegistry; }; From 818fa28d71e12bb5397038f54690fb3d05bff66d Mon Sep 17 00:00:00 2001 From: sblausten Date: Thu, 30 Jun 2022 10:11:09 +0200 Subject: [PATCH 069/231] Add Changeset Signed-off-by: sblausten --- .changeset/eighty-windows-brush.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/eighty-windows-brush.md diff --git a/.changeset/eighty-windows-brush.md b/.changeset/eighty-windows-brush.md new file mode 100644 index 0000000000..e66a0e1574 --- /dev/null +++ b/.changeset/eighty-windows-brush.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-tech-insights-backend': minor +--- + +Make FactRetrieverRegistry injectable to overrider default implementation From ef2196cb524bf6b356a5e8c183bff5c19d5a36e2 Mon Sep 17 00:00:00 2001 From: sblausten Date: Thu, 30 Jun 2022 10:19:19 +0200 Subject: [PATCH 070/231] Fix grammer in changeset and export default registry also Signed-off-by: sblausten --- .changeset/eighty-windows-brush.md | 2 +- plugins/tech-insights-backend/src/index.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.changeset/eighty-windows-brush.md b/.changeset/eighty-windows-brush.md index e66a0e1574..61a09fb663 100644 --- a/.changeset/eighty-windows-brush.md +++ b/.changeset/eighty-windows-brush.md @@ -2,4 +2,4 @@ '@backstage/plugin-tech-insights-backend': minor --- -Make FactRetrieverRegistry injectable to overrider default implementation +Make FactRetrieverRegistry injectable to override default implementation diff --git a/plugins/tech-insights-backend/src/index.ts b/plugins/tech-insights-backend/src/index.ts index 66180b1006..7ab9246f9a 100644 --- a/plugins/tech-insights-backend/src/index.ts +++ b/plugins/tech-insights-backend/src/index.ts @@ -26,5 +26,6 @@ export type { export type { PersistenceContext } from './service/persistence/persistenceContext'; export { createFactRetrieverRegistration } from './service/fact/createFactRetriever'; export type { FactRetrieverRegistry } from './service/fact/FactRetrieverRegistry'; +export { DefaultFactRetrieverRegistry } from './service/fact/FactRetrieverRegistry'; export type { FactRetrieverRegistrationOptions } from './service/fact/createFactRetriever'; export * from './service/fact/factRetrievers'; From 38d46bfe02b9aaec0459b1027fbb3e04ee5f8992 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 08:21:22 +0000 Subject: [PATCH 071/231] fix(deps): update dependency eslint-webpack-plugin to v3.2.0 Signed-off-by: Renovate Bot --- yarn.lock | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index bcd803a1e7..886d7cb6b0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6213,7 +6213,7 @@ "@types/eslint" "*" "@types/estree" "*" -"@types/eslint@*", "@types/eslint@^7.28.2": +"@types/eslint@*": version "7.29.0" resolved "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz#e56ddc8e542815272720bb0b4ccc2aff9c3e1c78" integrity sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng== @@ -6221,6 +6221,14 @@ "@types/estree" "*" "@types/json-schema" "*" +"@types/eslint@^7.29.0 || ^8.4.1": + version "8.4.3" + resolved "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.3.tgz#5c92815a3838b1985c90034cd85f26f59d9d0ece" + integrity sha512-YP1S7YJRMPs+7KZKDb9G63n8YejIwW9BALq7a5j2+H4yl6iOv9CB29edho+cuFRrvmJbbaH2yiVChKLJVysDGw== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + "@types/estree@*", "@types/estree@^0.0.51": version "0.0.51" resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" @@ -12408,15 +12416,15 @@ eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0: integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint-webpack-plugin@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz#83dad2395e5f572d6f4d919eedaa9cf902890fcb" - integrity sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg== + version "3.2.0" + resolved "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz#1978cdb9edc461e4b0195a20da950cf57988347c" + integrity sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w== dependencies: - "@types/eslint" "^7.28.2" - jest-worker "^27.3.1" - micromatch "^4.0.4" + "@types/eslint" "^7.29.0 || ^8.4.1" + jest-worker "^28.0.2" + micromatch "^4.0.5" normalize-path "^3.0.0" - schema-utils "^3.1.1" + schema-utils "^4.0.0" eslint@^8.6.0: version "8.18.0" @@ -16344,7 +16352,7 @@ jest-when@^3.1.0: resolved "https://registry.npmjs.org/jest-when/-/jest-when-3.5.1.tgz#33ab6f923661cf878cd08fe9df64b507934603db" integrity sha512-o+HiaIVCg1IC95sMDKHU9G5v5N5l3UHqXvJpf0PgAMThZeQo4Hf5Sgoj+wpCBRGg4/KtzSAZZZEKNiLqE0i4eQ== -jest-worker@^27.3.1, jest-worker@^27.4.5, jest-worker@^27.5.1: +jest-worker@^27.4.5, jest-worker@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== @@ -16353,6 +16361,15 @@ jest-worker@^27.3.1, jest-worker@^27.4.5, jest-worker@^27.5.1: merge-stream "^2.0.0" supports-color "^8.0.0" +jest-worker@^28.0.2: + version "28.1.1" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.1.tgz#3480c73247171dfd01eda77200f0063ab6a3bf28" + integrity sha512-Au7slXB08C6h+xbJPp7VIb6U0XX5Kc9uel/WFc6/rcTzGiaVCBRngBExSYuXSLFPULPSYU3cJ3ybS988lNFQhQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" From 8e40830f9005b43f80271d74024c5a5d802f3cd4 Mon Sep 17 00:00:00 2001 From: sblausten Date: Thu, 30 Jun 2022 10:42:16 +0200 Subject: [PATCH 072/231] Fix Vale check Signed-off-by: sblausten --- .changeset/eighty-windows-brush.md | 2 +- plugins/tech-insights-backend/src/index.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.changeset/eighty-windows-brush.md b/.changeset/eighty-windows-brush.md index 61a09fb663..753b53fbb4 100644 --- a/.changeset/eighty-windows-brush.md +++ b/.changeset/eighty-windows-brush.md @@ -2,4 +2,4 @@ '@backstage/plugin-tech-insights-backend': minor --- -Make FactRetrieverRegistry injectable to override default implementation +Allow FactRetrieverRegistry to be injected into buildTechInsightsContext so that we can override default registry implementation. diff --git a/plugins/tech-insights-backend/src/index.ts b/plugins/tech-insights-backend/src/index.ts index 7ab9246f9a..66180b1006 100644 --- a/plugins/tech-insights-backend/src/index.ts +++ b/plugins/tech-insights-backend/src/index.ts @@ -26,6 +26,5 @@ export type { export type { PersistenceContext } from './service/persistence/persistenceContext'; export { createFactRetrieverRegistration } from './service/fact/createFactRetriever'; export type { FactRetrieverRegistry } from './service/fact/FactRetrieverRegistry'; -export { DefaultFactRetrieverRegistry } from './service/fact/FactRetrieverRegistry'; export type { FactRetrieverRegistrationOptions } from './service/fact/createFactRetriever'; export * from './service/fact/factRetrievers'; From 3c84892796c7cdacc4dffc281d131055fb1e58a8 Mon Sep 17 00:00:00 2001 From: sblausten Date: Thu, 30 Jun 2022 11:07:32 +0200 Subject: [PATCH 073/231] Add documentation Signed-off-by: sblausten --- .../src/service/techInsightsContextBuilder.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts index b194fb6b69..1e3eabfb8b 100644 --- a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts +++ b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts @@ -52,8 +52,10 @@ export interface TechInsightsOptions< CheckResultType extends CheckResult, > { /** - * A collection of FactRetrieverRegistrations. + * Optional collection of FactRetrieverRegistrations. * Used to register FactRetrievers and their schemas and schedule an execution loop for them. + * + * Not needed if passing in your own FactRetrieverRegistry implementation */ factRetrievers?: FactRetrieverRegistration[]; @@ -62,6 +64,11 @@ export interface TechInsightsOptions< */ factCheckerFactory?: FactCheckerFactory; + /** + * Optional FactRetrieverRegistry implementation that replaces the default one. + * + * If passing this in you don't need to pass in factRetrievers also. + */ factRetrieverRegistry?: FactRetrieverRegistry; logger: Logger; From 156bb8ffba1bb933d6a1681d45f4d1420ec1f309 Mon Sep 17 00:00:00 2001 From: sblausten Date: Thu, 30 Jun 2022 11:50:26 +0200 Subject: [PATCH 074/231] Add clearer documentation Signed-off-by: sblausten --- .../src/service/techInsightsContextBuilder.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts index 1e3eabfb8b..008acf192d 100644 --- a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts +++ b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts @@ -52,10 +52,10 @@ export interface TechInsightsOptions< CheckResultType extends CheckResult, > { /** - * Optional collection of FactRetrieverRegistrations. + * Optional collection of FactRetrieverRegistrations (required if no factRetrieverRegistry passed in). * Used to register FactRetrievers and their schemas and schedule an execution loop for them. * - * Not needed if passing in your own FactRetrieverRegistry implementation + * Not needed if passing in your own FactRetrieverRegistry implementation. Required otherwise. */ factRetrievers?: FactRetrieverRegistration[]; From 0b36b9cb0beef252a11f2d2bcd24fdd07b785eda Mon Sep 17 00:00:00 2001 From: sblausten Date: Thu, 30 Jun 2022 12:24:50 +0200 Subject: [PATCH 075/231] Adds api report Signed-off-by: sblausten --- plugins/tech-insights-backend/api-report.md | 20 ++++++++++++++++++- .../src/service/fact/FactRetrieverRegistry.ts | 4 ++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/plugins/tech-insights-backend/api-report.md b/plugins/tech-insights-backend/api-report.md index 9fee3be281..32d45f8afd 100644 --- a/plugins/tech-insights-backend/api-report.md +++ b/plugins/tech-insights-backend/api-report.md @@ -11,6 +11,7 @@ import { FactCheckerFactory } from '@backstage/plugin-tech-insights-node'; import { FactLifecycle } from '@backstage/plugin-tech-insights-node'; import { FactRetriever } from '@backstage/plugin-tech-insights-node'; import { FactRetrieverRegistration } from '@backstage/plugin-tech-insights-node'; +import { FactSchema } from '@backstage/plugin-tech-insights-node'; import { Logger } from 'winston'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; @@ -51,6 +52,22 @@ export type FactRetrieverRegistrationOptions = { lifecycle?: FactLifecycle; }; +// @public (undocumented) +export interface FactRetrieverRegistry { + // (undocumented) + get(retrieverReference: string): FactRetrieverRegistration; + // (undocumented) + getSchemas(): FactSchema[]; + // (undocumented) + listRegistrations(): FactRetrieverRegistration[]; + // (undocumented) + listRetrievers(): FactRetriever[]; + // (undocumented) + register(registration: FactRetrieverRegistration): void; + // (undocumented) + readonly retrievers: Map; +} + // @public export type PersistenceContext = { techInsightsStore: TechInsightsStore; @@ -91,7 +108,8 @@ export interface TechInsightsOptions< // (undocumented) discovery: PluginEndpointDiscovery; factCheckerFactory?: FactCheckerFactory; - factRetrievers: FactRetrieverRegistration[]; + factRetrieverRegistry?: FactRetrieverRegistry; + factRetrievers?: FactRetrieverRegistration[]; // (undocumented) logger: Logger; // (undocumented) diff --git a/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts b/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts index 29099201ce..504d561f17 100644 --- a/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts +++ b/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts @@ -21,6 +21,10 @@ import { } from '@backstage/plugin-tech-insights-node'; import { ConflictError, NotFoundError } from '@backstage/errors'; +/** + * @public + * + */ export interface FactRetrieverRegistry { readonly retrievers: Map; register(registration: FactRetrieverRegistration): void; From 331b68025874aa47cf04468edd534ce39cd0233b Mon Sep 17 00:00:00 2001 From: sblausten Date: Thu, 30 Jun 2022 12:46:49 +0200 Subject: [PATCH 076/231] Fix test mock Signed-off-by: sblausten --- .../src/service/techInsightsContextBuilder.test.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts index d2660880b8..ef9484369a 100644 --- a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts +++ b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts @@ -23,11 +23,20 @@ import { import { ConfigReader } from '@backstage/config'; import { TaskScheduler } from '@backstage/backend-tasks'; import { DefaultFactRetrieverRegistry } from './fact/FactRetrieverRegistry'; +import { Knex } from 'knex'; jest.mock('./fact/FactRetrieverRegistry'); describe('buildTechInsightsContext', () => { - const pluginDatabase = {} as PluginDatabaseManager; + const pluginDatabase: PluginDatabaseManager = { + getClient: () => { + return Promise.resolve({ + migrate: { + latest: () => {}, + }, + }) as unknown as Promise; + }, + }; const manager = {} as DatabaseManager; const discoveryMock = { getBaseUrl: (_: string) => Promise.resolve('http://mock.url'), From 90b3bc0a20da4fd874ed29a1a8340a428881adc3 Mon Sep 17 00:00:00 2001 From: David Rubio Vidal Date: Thu, 30 Jun 2022 12:52:34 +0200 Subject: [PATCH 077/231] chore: update early adopters for DAZN Signed-off-by: David Rubio Vidal --- ADOPTERS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ADOPTERS.md b/ADOPTERS.md index b72da367b1..15432ab24c 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -36,7 +36,7 @@ _If you're using Backstage in your organization, please try to add your company | [PagerDuty](https://www.pagerduty.com/) | [Mark Shaw](https://github.com/markshawtoronto) | Developer portal, initially focused on software templates and tech-docs. | | [MoonShiner](https://moonshiner.at) | [Fabian Hippmann](https://github.com/FabianHippmann) | Developer portal - helps us keep track of our customer projects, onboard new developers & improve our development process 🌕🚀🧑‍🚀 | | [FundApps](https://www.fundapps.co/) | [Elliot Greenwood](https://github.com/egnwd) | Developer Portal - A place for us to keep track of our projects and documentation for all services and processes | -| [DAZN](https://dazn.com/) | [Lou Bichard](https://twitter.com/loujaybee), [Marco Crivellaro](https://github.com/crivetechie), [Alex Hollerith](mailto:alex.hollerith@dazn.com), [Kamil Wolny](https://github.com/mrwolny) | Ingesting all of DAZN's repos for the catalog, migrating our internal platform apps (pull request boards, release information, inner source marketplace etc) to Backstage plugins (where applicable). | +| [DAZN](https://dazn.com/) | [David Rubio Vidal](https://github.com/davidrv87), [Marco Crivellaro](https://github.com/crivetechie), [Alex Hollerith](mailto:alex.hollerith@dazn.com), [Kamil Wolny](https://github.com/mrwolny) | Ingesting all of DAZN's repos for the catalog, migrating our internal platform apps (pull request boards, release information, inner source marketplace etc) to Backstage plugins (where applicable). | | [HelloFresh](https://www.hellofresh.de/) | [@iammuho](https://github.com/iammuho), [@ElenaForester](https://github.com/ElenaForester), [@diegomarangoni](https://github.com/diegomarangoni) | Our developer portal at HelloFresh - Spread across an organisation of 500+ engineers globally. | | [FactSet](https://www.factset.com/) | [@kuangp](https://github.com/kuangp) | Developer portal to provide discoverability to all internal components, APIs, documentation, and scaffold templates with integrations to our internal infrastructure tools. | | [Workrise](https://www.workrise.com/) | [Michael Rode](https://github.com/michaelrode) | Developer portal, main gateway to our infrastructure, documentation and internal tooling. | From f90371a6bb5e09ac951683e63be06592a150a8c9 Mon Sep 17 00:00:00 2001 From: sblausten Date: Thu, 30 Jun 2022 12:58:36 +0200 Subject: [PATCH 078/231] Fix test mock Signed-off-by: sblausten --- .../src/service/techInsightsContextBuilder.test.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts index ef9484369a..ef3ce98690 100644 --- a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts +++ b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts @@ -37,7 +37,10 @@ describe('buildTechInsightsContext', () => { }) as unknown as Promise; }, }; - const manager = {} as DatabaseManager; + const databaseManager: Partial = { + forPlugin: () => pluginDatabase, + }; + const manager = databaseManager as DatabaseManager; const discoveryMock = { getBaseUrl: (_: string) => Promise.resolve('http://mock.url'), getExternalBaseUrl: (_: string) => Promise.resolve('http://mock.url'), From 5dedcb541e77639ac8d9b752e22f720239a7faad Mon Sep 17 00:00:00 2001 From: sblausten Date: Thu, 30 Jun 2022 13:21:23 +0200 Subject: [PATCH 079/231] Mock out engine Signed-off-by: sblausten --- .../src/service/techInsightsContextBuilder.test.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts index ef3ce98690..46d1e61e22 100644 --- a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts +++ b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts @@ -26,6 +26,11 @@ import { DefaultFactRetrieverRegistry } from './fact/FactRetrieverRegistry'; import { Knex } from 'knex'; jest.mock('./fact/FactRetrieverRegistry'); +jest.mock('./fact/FactRetrieverEngine', () => ({ + create: jest.fn().mockResolvedValue({ + schedule: jest.fn(), + }), +})); describe('buildTechInsightsContext', () => { const pluginDatabase: PluginDatabaseManager = { From 516f506e4443ec443276377d304ae1f771b95c0a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 11:30:32 +0000 Subject: [PATCH 080/231] chore(deps): update dependency @graphql-codegen/cli to v2.6.4 Signed-off-by: Renovate Bot --- yarn.lock | 29 ++++++----------------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/yarn.lock b/yarn.lock index bcd803a1e7..3b66d66d79 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2371,9 +2371,9 @@ meros "^1.1.4" "@graphql-codegen/cli@^2.3.1": - version "2.6.3" - resolved "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-2.6.3.tgz#80d6f0324bcf9a375b9a1d5e998fcd62b3bace66" - integrity sha512-gxtKbe6LlBhGqDISZldCMcGaV1rSTS4D836clSR52kBY7UBhZZcDOcNZM0zDJDFGpjHtwuL9p0Kb4w9HRXYfew== + version "2.6.4" + resolved "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-2.6.4.tgz#2fbcd3917cb96ae08c54a865fbcc0393e66abc17" + integrity sha512-VNK5l4lRXOs3uueKkN4YKhO7ZldXaPw/6dZo4BnAzH2ip9XDroNJ0n+ESkbhSBd1bH6wVk3iCIzBfJOnfcsAcg== dependencies: "@graphql-codegen/core" "2.5.1" "@graphql-codegen/plugin-helpers" "^2.4.1" @@ -2399,7 +2399,7 @@ inquirer "^8.0.0" is-glob "^4.0.1" json-to-pretty-yaml "^1.2.2" - latest-version "^6.0.0" + latest-version "5.1.0" listr "^0.14.3" listr-update-renderer "^0.5.0" log-symbols "^4.0.0" @@ -14077,7 +14077,7 @@ got@11.8.3: p-cancelable "^2.0.0" responselike "^2.0.0" -got@^11.8.0, got@^11.8.2: +got@^11.8.0: version "11.8.5" resolved "https://registry.npmjs.org/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== @@ -17053,20 +17053,13 @@ language-tags@^1.0.5: dependencies: language-subtag-registry "~0.3.2" -latest-version@^5.1.0: +latest-version@5.1.0, latest-version@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== dependencies: package-json "^6.3.0" -latest-version@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/latest-version/-/latest-version-6.0.0.tgz#469fb95f1d588b38436c1ec8fec947b99ed268c7" - integrity sha512-zfTuGx4PwpoSJ1mABs58AkM6qMzu49LZ7LT5JHprKvpGpQ+cYtfSibi3tLLrH4z7UylYU42rfBdwN8YgqbTljA== - dependencies: - package-json "^7.0.0" - lazy-ass@1.6.0, lazy-ass@^1.6.0: version "1.6.0" resolved "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" @@ -20014,16 +20007,6 @@ package-json@^6.3.0: registry-url "^5.0.0" semver "^6.2.0" -package-json@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/package-json/-/package-json-7.0.0.tgz#1355416e50a5c1b8f1a6f471197a3650d21186bf" - integrity sha512-CHJqc94AA8YfSLHGQT3DbvSIuE12NLFekpM4n7LRrAd3dOJtA911+4xe9q6nC3/jcKraq7nNS9VxgtT0KC+diA== - dependencies: - got "^11.8.2" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^7.3.5" - packet-reader@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" From bf0284f4313c2e401140b61ecb5bc8fc6d1f4afd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 11:44:13 +0000 Subject: [PATCH 081/231] fix(deps): update dependency @codemirror/language to v6.2.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 98689d74a2..319a959e84 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1989,9 +1989,9 @@ "@lezer/common" "^1.0.0" "@codemirror/language@^6.0.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@codemirror/language/-/language-6.1.0.tgz#7686f0ecafd958c35332c3cc2aa3d564fd33dc44" - integrity sha512-CeqY80nvUFrJcXcBW115aNi06D0PS8NSW6nuJRSwbrYFkE0SfJnPfyLGrcM90AV95lqg5+4xUi99BCmzNaPGJg== + version "6.2.0" + resolved "https://registry.npmjs.org/@codemirror/language/-/language-6.2.0.tgz#f8d103927bb61346e93781b1ca7d3f4ac3c9280b" + integrity sha512-tabB0Ef/BflwoEmTB4a//WZ9P90UQyne9qWB9YFsmeS4bnEqSys7UpGk/da1URMXhyfuzWCwp+AQNMhvu8SfnA== dependencies: "@codemirror/state" "^6.0.0" "@codemirror/view" "^6.0.0" From e18e86adfe3bea1bb56f01575bd774f56f346216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 30 Jun 2022 13:45:32 +0200 Subject: [PATCH 082/231] fixup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- docs/overview/roadmap.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/overview/roadmap.md b/docs/overview/roadmap.md index 18af070382..df242ed172 100644 --- a/docs/overview/roadmap.md +++ b/docs/overview/roadmap.md @@ -15,9 +15,9 @@ work"](#future-work). With "next" we mean features planned for release within the ongoing quarter from April through June 2022. With "future" we mean features on the radar, but not yet scheduled. -| [What's next](#whats-next) | [Future work](#future-work) | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | -| [Backstage Search 1.0](#search-1.0)
[Backend Services (MVP)](#backend-services-mvp)
[Backstage Security Audit](#backstage-security-audit)
[Backstage Threat Model](#backstage-threat-model)
[TechDocs Addon Framework](techDocs-addon-framework)
[Software Catalog pagination](#software-catalog-pagination)
[More SIGs](#more-sigs) | Ease of onboarding
Composable Homepage 1.0
Creator experience
GraphQL
Telemetry | +| [What's next](#whats-next) | [Future work](#future-work) | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | +| [Backstage Search 1.0](#search-1.0)
[Backend Services (MVP)](#backend-services-mvp)
[Backstage Security Audit](#backstage-security-audit)
[Backstage Threat Model](#backstage-threat-model)
[TechDocs Addon Framework](#techdocs-addon-framework)
[Software Catalog pagination](#software-catalog-pagination)
[More SIGs](#more-sigs) | Ease of onboarding
Composable Homepage 1.0
Creator experience
GraphQL
Telemetry | The long-term roadmap (12 - 36 months) is not detailed in the public roadmap. Third-party contributions are also not currently included in the roadmap. Let us @@ -63,9 +63,9 @@ Native Computing Foundation (CNCF)](https://www.cncf.io/). This is another (relevant) initiative planned to make Backstage a secure product for the adopters. The goals of this initiative are: -1. Understand where security investment and attention is needed. -2. Guide the upcoming security audit. -3. Communicate expectations to Backstage adopters and inform and attract security researchers. +1. Understand where security investment and attention is needed. +2. Guide the upcoming security audit. +3. Communicate expectations to Backstage adopters and inform and attract security researchers. The planned artifacts are: @@ -76,13 +76,13 @@ The planned artifacts are: Addons are TechDocs features that are added on top of the base docs-like-code experience. An example would be a feature that showed comments on the page. We plan to add an Addon framework and open source a selection of the Addons that we use internally at Spotify. We encourage the Backstage community to add further Addons. -For more information about the TechDocs Addon Framework, see the documentation page [here](https://backstage.io/docs/features/techdocs/addons) +For more information about the TechDocs Addon Framework, see the documentation page [here](https://backstage.io/docs/features/techdocs/addons). For general information about TechDocs including roadmap, see [here](https://backstage.io/docs/features/techdocs/techdocs-overview). ### Software Catalog pagination -Today adopters with a big catalog (with several thousands of software components) might not have an ideal end-user experience when viewing the `/catalog` page. The issue is related to how the entities are fetched by the frontend. In order to provide a better end-user experience the pagination of the catalog’s entities needs to be enforced. Some experimentations are already completed but in this quarter we plan to continue, and hopefully complete, this relevant enhancement. +Today adopters with a big catalog (with several thousands of software components) might not have an ideal end-user experience when viewing the `/catalog` page. The issue is related to how the entities are fetched by the frontend. In order to provide a better end-user experience the pagination of the catalog’s entities needs to be enforced. Some experimentation is already completed but in this quarter we plan to continue, and hopefully complete, this relevant enhancement. ### More SIGs @@ -94,7 +94,8 @@ The following feature list doesn't represent a commitment to develop, and the list order doesn't reflect any priority or importance, but these features are on the maintainers' radar, with clear interest expressed by the community. -- **Ease of onboarding:** A faster (with less development) and easier setup of Backstage and the most relevant/adopted plugins. +- **Ease of onboarding:** A faster (with less development) and easier setup of + Backstage and the most relevant/adopted plugins. - **Composable Homepage 1.0:** Driving this to 1.0 by adding some composable components. - **Creator experience:** Provide a better Backstage user experience through From 27b526e377cc3ecbcbb6dd775813559b3da2c2a3 Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 30 Jun 2022 13:48:11 +0200 Subject: [PATCH 083/231] chore: updating adopter notice Signed-off-by: blam --- ADOPTERS.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ADOPTERS.md b/ADOPTERS.md index bb9b7fe077..2f47f22f90 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -1,6 +1,8 @@ # Adopters -_If you're using Backstage in your organization, please try to add your company name to this list. This really helps the project to gain momentum and credibility. It's a small contribution back to the project with a big impact._ +_If you're using Backstage in your organization, please try to add your company name to this list. It really helps the project to gain momentum and credibility. It's a small contribution back to the project with a big impact._ +_You can do this by using the [Adopter form](https://form.typeform.com/to/zcOaKikB) or by editing this file after following the [CONTRIBUTING.md](./CONTRIBUTING.md)._ + | Organization | Contact | Description of Use | |-----------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| @@ -187,4 +189,4 @@ _If you're using Backstage in your organization, please try to add your company | [William Hill](https://www.williamhillgroup.com/) | [Pat Mills](mailto:pat.mills@williamhill.com), [Nathan Flynn](mailto:nflynn@williamhill.co.uk), and [Nishkarsh Raj](mailto:nishkarsh.raj@williamhill.co.uk) | William Hill are leveraging Backstage to build our Engineering Portal. Our mission is to centralize the software catalog inventory to enable service discoverability, reduce the onboarding time for new Engineers, provide a single pane of glass to accelerate Developer Productivity and Save Engineers time. Our aspiration is to create an InnerSource community focussed on organization-wide patterns that are re-usable and can be self-served with the Scaffolder. | | [Vodafone NewZealand Limited](https://vodafone.co.nz) | [Ankit Gupta](mailto:ankit.gupta@vodafone.nz), [DevOps COE](mailto:devopstooling@vodafone.nz) | Vodafone NZ are leveraging Backstage to build centralised and self service Engineering Portal. Our mission is to standardised Pipeline templates across the Engineering teams, One shop stop to create the pipelines and repository with a template approach which reduces creation part from days to minutes and no wait time for developers. A unified view for Azure DevOps pipeline, Azure Repo pull requests, Deployment status from Azure RedHat Openshift-ArgoCD and SonarQube Security and code quality scans report on a single pan to provide a streamlined view for all microservices across the app stack. | | [Coamo](http://www.coamo.com.br) | [@holiiveira](https://github.com/holiiveira), [@gpxlnx](https://github.com/gpxlnx) | We're starting to use it as the main tool of a DevOps platform. Our goal is to provide software templates, centralize our software catalog enabling efficient service discovery, and make it easy to manage the entire software ecosystem in one place. - | \ No newline at end of file + | From c86c0019ea6a42597d03a42589fbb9c578f9a8ee Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 30 Jun 2022 13:49:22 +0200 Subject: [PATCH 084/231] chore: updating contributing Signed-off-by: blam --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index eb60bc48e0..1afbf072fc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -58,9 +58,9 @@ If you are proposing a feature: - Remember that this is a volunteer-driven project, and that contributions are welcome :) -### Add your company to ADOPTERS +### Add your company to `ADOPTERS` -Have you started using Backstage? Adding your company to [ADOPTERS](ADOPTERS.md) really helps the project. +Have you started using Backstage? Adding your company to [ADOPTERS](ADOPTERS.md) really helps the project, you can do this by filling out this [Adopter form](https://form.typeform.com/to/zcOaKikB). ## Get Started! From d5f3f64a8896af63aaf9b00c84e1c74f2094b287 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 30 Jun 2022 13:54:31 +0200 Subject: [PATCH 085/231] workflows: bump cron to 0.2.2 Signed-off-by: Patrik Oldsberg --- .github/workflows/cron.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml index 85d7786cf7..ca21c1c283 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -8,7 +8,7 @@ jobs: cron: runs-on: ubuntu-latest steps: - - uses: backstage/actions/cron@v0.2.1 + - uses: backstage/actions/cron@v0.2.2 with: app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} From c3b35b911be2ae9c3a884a3ab554813a09d2e931 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 12:35:46 +0000 Subject: [PATCH 086/231] chore(deps): update backstage/actions action to v0.2.2 Signed-off-by: Renovate Bot --- .github/workflows/ci.yml | 2 +- .github/workflows/deploy_nightly.yml | 2 +- .github/workflows/deploy_packages.yml | 4 ++-- .github/workflows/issue.yaml | 2 +- .github/workflows/pr.yaml | 2 +- .github/workflows/sync_code-formatting.yml | 2 +- .github/workflows/sync_snyk-github-issues.yml | 2 +- .github/workflows/verify_e2e-linux.yml | 2 +- .github/workflows/verify_storybook.yml | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c9fc151fb1..95ec35c795 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,7 +71,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.1 + uses: backstage/actions/yarn-install@v0.2.2 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/deploy_nightly.yml b/.github/workflows/deploy_nightly.yml index 97b3f45954..e8b48ee2fe 100644 --- a/.github/workflows/deploy_nightly.yml +++ b/.github/workflows/deploy_nightly.yml @@ -26,7 +26,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.1 + uses: backstage/actions/yarn-install@v0.2.2 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml index 529c7a4286..fd8ae58e3c 100644 --- a/.github/workflows/deploy_packages.yml +++ b/.github/workflows/deploy_packages.yml @@ -67,7 +67,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.1 + uses: backstage/actions/yarn-install@v0.2.2 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -145,7 +145,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.1 + uses: backstage/actions/yarn-install@v0.2.2 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml index 5fa11b839f..8e7955645d 100644 --- a/.github/workflows/issue.yaml +++ b/.github/workflows/issue.yaml @@ -10,4 +10,4 @@ jobs: if: github.repository == 'backstage/backstage' steps: - name: Issue sync - uses: backstage/actions/issue-sync@v0.2.1 + uses: backstage/actions/issue-sync@v0.2.2 diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index e65240ac1b..92bd759e36 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -9,6 +9,6 @@ jobs: if: github.repository == 'backstage/backstage' steps: - name: PR sync - uses: backstage/actions/pr-sync@v0.2.1 + uses: backstage/actions/pr-sync@v0.2.2 with: github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }} diff --git a/.github/workflows/sync_code-formatting.yml b/.github/workflows/sync_code-formatting.yml index 6ea6bc5de6..565f0e9df2 100644 --- a/.github/workflows/sync_code-formatting.yml +++ b/.github/workflows/sync_code-formatting.yml @@ -20,7 +20,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.1 + uses: backstage/actions/yarn-install@v0.2.2 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml index 9daf85ffa6..77c192edae 100644 --- a/.github/workflows/sync_snyk-github-issues.yml +++ b/.github/workflows/sync_snyk-github-issues.yml @@ -22,7 +22,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.1 + uses: backstage/actions/yarn-install@v0.2.2 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml index 0fe18b345e..724e220ecb 100644 --- a/.github/workflows/verify_e2e-linux.yml +++ b/.github/workflows/verify_e2e-linux.yml @@ -46,7 +46,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.1 + uses: backstage/actions/yarn-install@v0.2.2 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml index 7bbbac8a40..4ade8e1924 100644 --- a/.github/workflows/verify_storybook.yml +++ b/.github/workflows/verify_storybook.yml @@ -35,7 +35,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.1 + uses: backstage/actions/yarn-install@v0.2.2 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} - name: storybook yarn install From 374a5049e3c9bdde21d12c22869d5be8761ca46a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 12:37:31 +0000 Subject: [PATCH 087/231] fix(deps): update dependency @react-hookz/web to v14.4.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 319a959e84..d64acad3a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5263,9 +5263,9 @@ "@react-hookz/deep-equal" "^1.0.1" "@react-hookz/web@^14.0.0": - version "14.3.0" - resolved "https://registry.npmjs.org/@react-hookz/web/-/web-14.3.0.tgz#ccfcfa65aa1e56ca5a3b258a9bd987e0daa67bae" - integrity sha512-lmZ9rAoHbBFZo0v72cjHMCY/hz9Wp6WQd/Kx53A+HumxkAaJT3AuBkd9jJgrtdsNiHdG0IEr93/oOza3+G6kVA== + version "14.4.0" + resolved "https://registry.npmjs.org/@react-hookz/web/-/web-14.4.0.tgz#8c5003d2ee243e4f628ca7f69a6975a4c1a84713" + integrity sha512-MZUeiC/xCg30yBVfV3LS4gtQUngVb/r0xhaeGKk+Bx5ZaJOhHQ8kuduXP13RmbzpehJk2e1TL0oZsTofzT7QJQ== dependencies: "@react-hookz/deep-equal" "^1.0.2" From 423e3d8e957606438755a7c712e7c8450d4b91ea Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Fri, 17 Jun 2022 19:51:40 -0500 Subject: [PATCH 088/231] Highlight PG search results Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .changeset/metal-windows-share.md | 5 ++++ .../search-backend-module-pg/api-report.md | 6 ++++- plugins/search-backend-module-pg/package.json | 3 ++- .../src/PgSearchEngine/PgSearchEngine.test.ts | 15 +++++++++++ .../src/PgSearchEngine/PgSearchEngine.ts | 18 ++++++++++++- .../database/DatabaseDocumentStore.test.ts | 26 +++++++++++++++++-- .../src/database/DatabaseDocumentStore.ts | 10 +++++-- .../src/database/types.ts | 3 +++ 8 files changed, 79 insertions(+), 7 deletions(-) create mode 100644 .changeset/metal-windows-share.md diff --git a/.changeset/metal-windows-share.md b/.changeset/metal-windows-share.md new file mode 100644 index 0000000000..4fc568986a --- /dev/null +++ b/.changeset/metal-windows-share.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend-module-pg': patch +--- + +Added support for highlighting matched terms in search result data diff --git a/plugins/search-backend-module-pg/api-report.md b/plugins/search-backend-module-pg/api-report.md index 71ceac996e..6a8b68a042 100644 --- a/plugins/search-backend-module-pg/api-report.md +++ b/plugins/search-backend-module-pg/api-report.md @@ -43,7 +43,7 @@ export class DatabaseDocumentStore implements DatabaseStore { // (undocumented) query( tx: Knex.Transaction, - { types, pgTerm, fields, offset, limit }: PgSearchQuery, + { types, pgTerm, fields, offset, limit, preTag, postTag }: PgSearchQuery, ): Promise; // (undocumented) static supported(knex: Knex): Promise; @@ -134,6 +134,10 @@ export interface PgSearchQuery { // (undocumented) pgTerm?: string; // (undocumented) + postTag: string; + // (undocumented) + preTag: string; + // (undocumented) types?: string[]; } diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index fb8cd4afc4..7809f9dd06 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -27,7 +27,8 @@ "@backstage/plugin-search-backend-node": "^0.6.3-next.1", "@backstage/plugin-search-common": "^0.3.6-next.0", "lodash": "^4.17.21", - "knex": "^2.0.0" + "knex": "^2.0.0", + "uuid": "^8.3.2" }, "devDependencies": { "@backstage/backend-test-utils": "^0.1.26-next.1", diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts index 3ed002567e..5f3bc3c5d8 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts @@ -158,6 +158,11 @@ describe('PgSearchEngine', () => { location: 'location-1', }, type: 'my-type', + highlight: { + title: 'Hello World', + text: 'Lorem Ipsum', + location: 'location-1', + }, }, ]); @@ -199,6 +204,11 @@ describe('PgSearchEngine', () => { location: `location-${i}`, }, type: 'my-type', + highlight: { + title: 'Hello World', + text: 'Lorem Ipsum', + location: 'location-1', + }, })), ); @@ -240,6 +250,11 @@ describe('PgSearchEngine', () => { location: `location-${i}`, }, type: 'my-type', + highlight: { + title: 'Hello World', + text: 'Lorem Ipsum', + location: 'location-1', + }, })) .slice(25), ); diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts index bf98c58de9..77aa003c5d 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts @@ -26,6 +26,7 @@ import { DatabaseStore, PgSearchQuery, } from '../database'; +import { v4 as uuid } from 'uuid'; export type ConcretePgSearchQuery = { pgQuery: PgSearchQuery; @@ -53,6 +54,7 @@ export class PgSearchEngine implements SearchEngine { const offset = page * pageSize; // We request more result to know whether there is another page const limit = pageSize + 1; + const uuidTag = uuid(); return { pgQuery: { @@ -66,6 +68,8 @@ export class PgSearchEngine implements SearchEngine { types: query.types, offset, limit, + preTag: `<${uuidTag}>`, + postTag: ``, }, pageSize, }; @@ -106,10 +110,22 @@ export class PgSearchEngine implements SearchEngine { : undefined; const results = pageRows.map( - ({ type, document }, index): IndexableResult => ({ + ({ type, document, highlight }, index): IndexableResult => ({ type, document, rank: page * pageSize + index + 1, + highlight: { + preTag: pgQuery.preTag, + postTag: pgQuery.postTag, + fields: highlight + ? { + text: highlight.text, + title: highlight.title, + location: highlight.location, + path: '', + } + : {}, + }, }), ); diff --git a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts index b973c2e14f..e2303d90b2 100644 --- a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts +++ b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts @@ -220,7 +220,13 @@ describe('DatabaseDocumentStore', () => { }); const rows = await store.transaction(tx => - store.query(tx, { pgTerm: 'Hello & World', offset: 1, limit: 1 }), + store.query(tx, { + pgTerm: 'Hello & World', + offset: 1, + limit: 1, + preTag: '', + postTag: '', + }), ); expect(rows).toEqual([ @@ -261,7 +267,13 @@ describe('DatabaseDocumentStore', () => { }); const rows = await store.transaction(tx => - store.query(tx, { pgTerm: 'Hello & World', offset: 0, limit: 25 }), + store.query(tx, { + pgTerm: 'Hello & World', + offset: 0, + limit: 25, + preTag: '', + postTag: '', + }), ); expect(rows).toEqual([ @@ -322,6 +334,8 @@ describe('DatabaseDocumentStore', () => { types: ['my-type'], offset: 0, limit: 25, + preTag: '', + postTag: '', }), ); @@ -375,6 +389,8 @@ describe('DatabaseDocumentStore', () => { fields: { myField: 'this' }, offset: 0, limit: 25, + preTag: '', + postTag: '', }), ); @@ -429,6 +445,8 @@ describe('DatabaseDocumentStore', () => { fields: { myField: ['this', 'that'] }, offset: 0, limit: 25, + preTag: '', + postTag: '', }), ); @@ -490,6 +508,8 @@ describe('DatabaseDocumentStore', () => { fields: { myField: 'this', otherField: 'another' }, offset: 0, limit: 25, + preTag: '', + postTag: '', }), ); @@ -539,6 +559,8 @@ describe('DatabaseDocumentStore', () => { fields: { myField: 'this' }, offset: 0, limit: 25, + preTag: '', + postTag: '', }), ); diff --git a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts index 33b2d0c0d6..3a1ec128ef 100644 --- a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts +++ b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts @@ -132,10 +132,11 @@ export class DatabaseDocumentStore implements DatabaseStore { async query( tx: Knex.Transaction, - { types, pgTerm, fields, offset, limit }: PgSearchQuery, + { types, pgTerm, fields, offset, limit, preTag, postTag }: PgSearchQuery, ): Promise { // Builds a query like: - // SELECT ts_rank_cd(body, query) AS rank, type, document + // SELECT ts_rank_cd(body, query) AS rank, type, document, + // ts_headline('english', document, query) AS highlight // FROM documents, to_tsquery('english', 'consent') query // WHERE query @@ body AND (document @> '{"kind": "API"}') // ORDER BY rank DESC @@ -173,6 +174,11 @@ export class DatabaseDocumentStore implements DatabaseStore { if (pgTerm) { query .select(tx.raw('ts_rank_cd(body, query) AS "rank"')) + .select( + tx.raw( + `ts_headline(\'english\', document, query, 'StartSel=${preTag}, StopSel=${postTag}') as "highlight"`, + ), + ) .orderBy('rank', 'desc'); } else { query.select(tx.raw('1 as rank')); diff --git a/plugins/search-backend-module-pg/src/database/types.ts b/plugins/search-backend-module-pg/src/database/types.ts index 7e87658745..23679d100f 100644 --- a/plugins/search-backend-module-pg/src/database/types.ts +++ b/plugins/search-backend-module-pg/src/database/types.ts @@ -22,6 +22,8 @@ export interface PgSearchQuery { pgTerm?: string; offset: number; limit: number; + preTag: string; + postTag: string; } export interface DatabaseStore { @@ -49,4 +51,5 @@ export interface RawDocumentRow { export interface DocumentResultRow { document: IndexableDocument; type: string; + highlight: IndexableDocument; } From d43228a1832118dfa2b1e60c6e37c9d8c6568dc5 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Sat, 18 Jun 2022 07:39:23 -0500 Subject: [PATCH 089/231] Refactored to support config with options Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- packages/backend/src/plugins/search.ts | 5 +- plugins/search-backend-module-pg/config.d.ts | 62 +++++++++++++++++++ plugins/search-backend-module-pg/package.json | 7 ++- .../src/PgSearchEngine/PgSearchEngine.test.ts | 57 ++++++++++++----- .../src/PgSearchEngine/PgSearchEngine.ts | 42 ++++++++++--- .../database/DatabaseDocumentStore.test.ts | 34 +++++----- .../src/database/DatabaseDocumentStore.ts | 11 +++- .../src/database/types.ts | 4 +- plugins/search-backend-module-pg/src/types.ts | 40 ++++++++++++ 9 files changed, 216 insertions(+), 46 deletions(-) create mode 100644 plugins/search-backend-module-pg/config.d.ts create mode 100644 plugins/search-backend-module-pg/src/types.ts diff --git a/packages/backend/src/plugins/search.ts b/packages/backend/src/plugins/search.ts index a0ea83ab61..db92d79d71 100644 --- a/packages/backend/src/plugins/search.ts +++ b/packages/backend/src/plugins/search.ts @@ -39,7 +39,10 @@ async function createSearchEngine( } if (await PgSearchEngine.supported(env.database)) { - return await PgSearchEngine.from({ database: env.database }); + return await PgSearchEngine.from({ + database: env.database, + config: env.config, + }); } return new LunrSearchEngine({ logger: env.logger }); diff --git a/plugins/search-backend-module-pg/config.d.ts b/plugins/search-backend-module-pg/config.d.ts new file mode 100644 index 0000000000..6cdda27156 --- /dev/null +++ b/plugins/search-backend-module-pg/config.d.ts @@ -0,0 +1,62 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface Config { + /** Configuration options for the search plugin */ + search?: { + /** + * Options for PG + */ + pg?: { + /** + * Options for configuring highlight settings + * See https://www.postgresql.org/docs/current/textsearch-controls.html#TEXTSEARCH-HEADLINE + */ + highlightOptions?: { + /** + * Used to enable to disable the highlight feature. The default value is true + */ + useHighlight?: boolean; + /** + * Used to set the longest headlines to output. The default value is 35. + */ + maxWords?: number; + /** + * Used to set the shortest headlines to output. The default value is 15. + */ + minWords?: number; + /** + * Words of this length or less will be dropped at the start and end of a headline, unless they are query terms. + * The default value of three (3) eliminates common English articles. + */ + shortWord?: number; + /** + * If true the whole document will be used as the headline, ignoring the preceding three parameters. The default is false. + */ + highlightAll?: boolean; + /** + * maximum number of text fragments to display. The default value of zero selects a non-fragment-based headline generation method. + * A value greater than zero selects fragment-based headline generation (see the linked documentation above for more details). + */ + maxFragments?: number; + /** + * Delimiter string used to concatenate fragments. Defaults to " ... ". + */ + fragmentDelimiter?: string; + }; + }; + }; +} diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index 7809f9dd06..16367b9ef1 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -24,6 +24,7 @@ }, "dependencies": { "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/config": "^1.0.1", "@backstage/plugin-search-backend-node": "^0.6.3-next.1", "@backstage/plugin-search-common": "^0.3.6-next.0", "lodash": "^4.17.21", @@ -36,6 +37,8 @@ }, "files": [ "dist", - "migrations" - ] + "migrations", + "config.d.ts" + ], + "configSchema": "config.d.ts" } diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts index 5f3bc3c5d8..1d0e31757f 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts @@ -14,6 +14,7 @@ * limitations under the License. */ import { DatabaseStore } from '../database'; +import { PgSearchHighlightConfig } from '../types'; import { ConcretePgSearchQuery, decodePageCursor, @@ -22,6 +23,18 @@ import { } from './PgSearchEngine'; import { PgSearchEngineIndexer } from './PgSearchEngineIndexer'; +const highlightOptions: PgSearchHighlightConfig = { + preTag: '', + postTag: '', + useHighlight: false, + maxWords: 35, + minWords: 15, + shortWord: 3, + highlightAll: false, + maxFragments: 0, + fragmentDelimiter: ' ... ', +}; + jest.mock('./PgSearchEngineIndexer', () => ({ PgSearchEngineIndexer: jest .fn() @@ -65,10 +78,13 @@ describe('PgSearchEngine', () => { }); it('should pass page cursor', async () => { - const actualTranslatedQuery = searchEngine.translator({ - term: 'Hello', - pageCursor: 'MQ==', - }); + const actualTranslatedQuery = searchEngine.translator( + { + term: 'Hello', + pageCursor: 'MQ==', + }, + highlightOptions, + ); expect(actualTranslatedQuery).toMatchObject({ pgQuery: { @@ -81,9 +97,12 @@ describe('PgSearchEngine', () => { }); it('should return translated query term', async () => { - const actualTranslatedQuery = searchEngine.translator({ - term: 'Hello World', - }); + const actualTranslatedQuery = searchEngine.translator( + { + term: 'Hello World', + }, + highlightOptions, + ); expect(actualTranslatedQuery).toMatchObject({ pgQuery: { @@ -96,10 +115,13 @@ describe('PgSearchEngine', () => { }); it('should sanitize query term', async () => { - const actualTranslatedQuery = searchEngine.translator({ - term: 'H&e|l!l*o W\0o(r)l:d', - pageCursor: '', - }) as ConcretePgSearchQuery; + const actualTranslatedQuery = searchEngine.translator( + { + term: 'H&e|l!l*o W\0o(r)l:d', + pageCursor: '', + }, + highlightOptions, + ) as ConcretePgSearchQuery; expect(actualTranslatedQuery).toMatchObject({ pgQuery: { @@ -110,11 +132,14 @@ describe('PgSearchEngine', () => { }); it('should return translated query with filters', async () => { - const actualTranslatedQuery = searchEngine.translator({ - term: 'testTerm', - filters: { kind: 'testKind' }, - types: ['my-filter'], - }); + const actualTranslatedQuery = searchEngine.translator( + { + term: 'testTerm', + filters: { kind: 'testKind' }, + types: ['my-filter'], + }, + highlightOptions, + ); expect(actualTranslatedQuery).toMatchObject({ pgQuery: { diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts index 77aa003c5d..764e530435 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts @@ -27,6 +27,8 @@ import { PgSearchQuery, } from '../database'; import { v4 as uuid } from 'uuid'; +import { Config } from '@backstage/config'; +import { PgSearchHighlightConfig, PgSearchHighlightOptions } from '../types'; export type ConcretePgSearchQuery = { pgQuery: PgSearchQuery; @@ -34,13 +36,36 @@ export type ConcretePgSearchQuery = { }; export class PgSearchEngine implements SearchEngine { - constructor(private readonly databaseStore: DatabaseStore) {} + private readonly highlightOptions: PgSearchHighlightConfig; + + constructor( + private readonly databaseStore: DatabaseStore, + highlightOptions?: PgSearchHighlightOptions, + ) { + const uuidTag = uuid(); + this.highlightOptions = { + preTag: `<${uuidTag}>`, + postTag: ``, + useHighlight: false, + maxWords: 35, + minWords: 15, + shortWord: 3, + highlightAll: false, + maxFragments: 0, + fragmentDelimiter: ' ... ', + ...highlightOptions, + }; + } static async from(options: { database: PluginDatabaseManager; + config: Config; }): Promise { return new PgSearchEngine( await DatabaseDocumentStore.create(await options.database.getClient()), + options.config.getOptional( + 'search.pg.highlightOptions', + ), ); } @@ -48,13 +73,15 @@ export class PgSearchEngine implements SearchEngine { return await DatabaseDocumentStore.supported(await database.getClient()); } - translator(query: SearchQuery): ConcretePgSearchQuery { + translator( + query: SearchQuery, + options: PgSearchHighlightConfig, + ): ConcretePgSearchQuery { const pageSize = 25; const { page } = decodePageCursor(query.pageCursor); const offset = page * pageSize; // We request more result to know whether there is another page const limit = pageSize + 1; - const uuidTag = uuid(); return { pgQuery: { @@ -68,8 +95,7 @@ export class PgSearchEngine implements SearchEngine { types: query.types, offset, limit, - preTag: `<${uuidTag}>`, - postTag: ``, + options, }, pageSize, }; @@ -90,7 +116,7 @@ export class PgSearchEngine implements SearchEngine { } async query(query: SearchQuery): Promise { - const { pgQuery, pageSize } = this.translator(query); + const { pgQuery, pageSize } = this.translator(query, this.highlightOptions); const rows = await this.databaseStore.transaction(async tx => this.databaseStore.query(tx, pgQuery), @@ -115,8 +141,8 @@ export class PgSearchEngine implements SearchEngine { document, rank: page * pageSize + index + 1, highlight: { - preTag: pgQuery.preTag, - postTag: pgQuery.postTag, + preTag: pgQuery.options.preTag, + postTag: pgQuery.options.postTag, fields: highlight ? { text: highlight.text, diff --git a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts index e2303d90b2..693a3ea3c0 100644 --- a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts +++ b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts @@ -15,8 +15,21 @@ */ import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils'; import { IndexableDocument } from '@backstage/plugin-search-common'; +import { PgSearchHighlightConfig } from '../types'; import { DatabaseDocumentStore } from './DatabaseDocumentStore'; +const highlightOptions: PgSearchHighlightConfig = { + preTag: '', + postTag: '', + useHighlight: false, + maxWords: 35, + minWords: 15, + shortWord: 3, + highlightAll: false, + maxFragments: 0, + fragmentDelimiter: ' ... ', +}; + describe('DatabaseDocumentStore', () => { describe('unsupported', () => { const databases = TestDatabases.create({ @@ -224,8 +237,7 @@ describe('DatabaseDocumentStore', () => { pgTerm: 'Hello & World', offset: 1, limit: 1, - preTag: '', - postTag: '', + options: highlightOptions, }), ); @@ -271,8 +283,7 @@ describe('DatabaseDocumentStore', () => { pgTerm: 'Hello & World', offset: 0, limit: 25, - preTag: '', - postTag: '', + options: highlightOptions, }), ); @@ -334,8 +345,7 @@ describe('DatabaseDocumentStore', () => { types: ['my-type'], offset: 0, limit: 25, - preTag: '', - postTag: '', + options: highlightOptions, }), ); @@ -389,8 +399,7 @@ describe('DatabaseDocumentStore', () => { fields: { myField: 'this' }, offset: 0, limit: 25, - preTag: '', - postTag: '', + options: highlightOptions, }), ); @@ -445,8 +454,7 @@ describe('DatabaseDocumentStore', () => { fields: { myField: ['this', 'that'] }, offset: 0, limit: 25, - preTag: '', - postTag: '', + options: highlightOptions, }), ); @@ -508,8 +516,7 @@ describe('DatabaseDocumentStore', () => { fields: { myField: 'this', otherField: 'another' }, offset: 0, limit: 25, - preTag: '', - postTag: '', + options: highlightOptions, }), ); @@ -559,8 +566,7 @@ describe('DatabaseDocumentStore', () => { fields: { myField: 'this' }, offset: 0, limit: 25, - preTag: '', - postTag: '', + options: highlightOptions, }), ); diff --git a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts index 3a1ec128ef..1695db3cf5 100644 --- a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts +++ b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts @@ -132,7 +132,7 @@ export class DatabaseDocumentStore implements DatabaseStore { async query( tx: Knex.Transaction, - { types, pgTerm, fields, offset, limit, preTag, postTag }: PgSearchQuery, + { types, pgTerm, fields, offset, limit, options }: PgSearchQuery, ): Promise { // Builds a query like: // SELECT ts_rank_cd(body, query) AS rank, type, document, @@ -171,15 +171,20 @@ export class DatabaseDocumentStore implements DatabaseStore { query.select('type', 'document'); - if (pgTerm) { + if (pgTerm && options.useHighlight) { + const headlineOptions = `MaxWords=${options.maxWords}, MinWords=${options.minWords}, ShortWord=${options.shortWord}, HighlightAll=${options.highlightAll}, MaxFragments=${options.maxFragments}, FragmentDelimiter=${options.fragmentDelimiter}, StartSel=${options.preTag}, StopSel=${options.postTag}`; query .select(tx.raw('ts_rank_cd(body, query) AS "rank"')) .select( tx.raw( - `ts_headline(\'english\', document, query, 'StartSel=${preTag}, StopSel=${postTag}') as "highlight"`, + `ts_headline(\'english\', document, query, '${headlineOptions}') as "highlight"`, ), ) .orderBy('rank', 'desc'); + } else if (pgTerm && !options.useHighlight) { + query + .select(tx.raw('ts_rank_cd(body, query) AS "rank"')) + .orderBy('rank', 'desc'); } else { query.select(tx.raw('1 as rank')); } diff --git a/plugins/search-backend-module-pg/src/database/types.ts b/plugins/search-backend-module-pg/src/database/types.ts index 23679d100f..d572eba146 100644 --- a/plugins/search-backend-module-pg/src/database/types.ts +++ b/plugins/search-backend-module-pg/src/database/types.ts @@ -15,6 +15,7 @@ */ import { IndexableDocument } from '@backstage/plugin-search-common'; import { Knex } from 'knex'; +import { PgSearchHighlightConfig } from '../types'; export interface PgSearchQuery { fields?: Record; @@ -22,8 +23,7 @@ export interface PgSearchQuery { pgTerm?: string; offset: number; limit: number; - preTag: string; - postTag: string; + options: PgSearchHighlightConfig; } export interface DatabaseStore { diff --git a/plugins/search-backend-module-pg/src/types.ts b/plugins/search-backend-module-pg/src/types.ts new file mode 100644 index 0000000000..9ad56b9b12 --- /dev/null +++ b/plugins/search-backend-module-pg/src/types.ts @@ -0,0 +1,40 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export type PgSearchHighlightOptions = { + useHighlight?: boolean; + maxWords?: number; + minWords?: number; + shortWord?: number; + highlightAll?: boolean; + maxFragments?: number; + fragmentDelimiter?: string; +}; + +/** + * @public + */ +export type PgSearchHighlightConfig = { + useHighlight: boolean; + maxWords: number; + minWords: number; + shortWord: number; + highlightAll: boolean; + maxFragments: number; + fragmentDelimiter: string; + preTag: string; + postTag: string; +}; From b69dd94766690fab7443b6f7af701ddc2f16bf72 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Sat, 18 Jun 2022 12:29:54 -0500 Subject: [PATCH 090/231] Fixed failing tests Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .../src/PgSearchEngine/PgSearchEngine.test.ts | 48 +++++++++++++++++-- .../src/PgSearchEngine/PgSearchEngine.ts | 2 +- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts index 1d0e31757f..c1ed730053 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts @@ -26,7 +26,7 @@ import { PgSearchEngineIndexer } from './PgSearchEngineIndexer'; const highlightOptions: PgSearchHighlightConfig = { preTag: '', postTag: '', - useHighlight: false, + useHighlight: true, maxWords: 35, minWords: 15, shortWord: 3, @@ -35,6 +35,8 @@ const highlightOptions: PgSearchHighlightConfig = { fragmentDelimiter: ' ... ', }; +jest.mock('uuid', () => ({ v4: () => 'tag' })); + jest.mock('./PgSearchEngineIndexer', () => ({ PgSearchEngineIndexer: jest .fn() @@ -71,10 +73,13 @@ describe('PgSearchEngine', () => { filters: {}, }); - expect(translatorSpy).toHaveBeenCalledWith({ - term: 'testTerm', - filters: {}, - }); + expect(translatorSpy).toHaveBeenCalledWith( + { + term: 'testTerm', + filters: {}, + }, + highlightOptions, + ); }); it('should pass page cursor', async () => { @@ -205,6 +210,16 @@ describe('PgSearchEngine', () => { }, type: 'my-type', rank: 1, + highlight: { + preTag: '', + postTag: '', + fields: { + title: 'Hello World', + text: 'Lorem Ipsum', + location: 'location-1', + path: '', + }, + }, }, ], nextPageCursor: undefined, @@ -214,6 +229,7 @@ describe('PgSearchEngine', () => { pgTerm: '("Hello" | "Hello":*)&("World" | "World":*)', offset: 0, limit: 26, + options: highlightOptions, }); }); @@ -252,6 +268,16 @@ describe('PgSearchEngine', () => { }, type: 'my-type', rank: i + 1, + highlight: { + preTag: '', + postTag: '', + fields: { + title: 'Hello World', + text: 'Lorem Ipsum', + location: 'location-1', + path: '', + }, + }, })), nextPageCursor: 'MQ==', }); @@ -260,6 +286,7 @@ describe('PgSearchEngine', () => { pgTerm: '("Hello" | "Hello":*)&("World" | "World":*)', offset: 0, limit: 26, + options: highlightOptions, }); }); @@ -300,6 +327,16 @@ describe('PgSearchEngine', () => { }, type: 'my-type', rank: i + 1, + highlight: { + preTag: '', + postTag: '', + fields: { + title: 'Hello World', + text: 'Lorem Ipsum', + location: 'location-1', + path: '', + }, + }, })) .slice(25), previousPageCursor: 'MA==', @@ -309,6 +346,7 @@ describe('PgSearchEngine', () => { pgTerm: '("Hello" | "Hello":*)&("World" | "World":*)', offset: 25, limit: 26, + options: highlightOptions, }); }); }); diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts index 764e530435..d0c1571991 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts @@ -46,7 +46,7 @@ export class PgSearchEngine implements SearchEngine { this.highlightOptions = { preTag: `<${uuidTag}>`, postTag: ``, - useHighlight: false, + useHighlight: true, maxWords: 35, minWords: 15, shortWord: 3, From fe664999df0312348f7d17745bbe22f13e8d96a0 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Sat, 18 Jun 2022 12:48:34 -0500 Subject: [PATCH 091/231] Added documentation about optional config Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- plugins/search-backend-module-pg/README.md | 28 ++++++++++++++++++++ plugins/search-backend-module-pg/config.d.ts | 2 +- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/plugins/search-backend-module-pg/README.md b/plugins/search-backend-module-pg/README.md index d3f98132aa..49804a927c 100644 --- a/plugins/search-backend-module-pg/README.md +++ b/plugins/search-backend-module-pg/README.md @@ -14,3 +14,31 @@ other plugins. See [Backstage documentation](https://backstage.io/docs/features/search/search-engines#postgres) for details on how to setup Postgres based search for your Backstage instance. + +## Optional Configuration + +The following is an example of the optional configuration that can be applied when using Postgres as the search backend. Currently this is mostly for just the highlight feature: + +```yaml +search: + pg: + highlightOptions: + useHighlight: true # Used to enable to disable the highlight feature. The default value is true + maxWord: 35 # Used to set the longest headlines to output. The default value is 35. + minWord: 15 # Used to set the shortest headlines to output. The default value is 15. + shortWord: 3 # Words of this length or less will be dropped at the start and end of a headline, unless they are query terms. The default value of three (3) eliminates common English articles. + highlightAll: false # If true the whole document will be used as the headline, ignoring the preceding three parameters. The default is false. + maxFragments: 0 # Maximum number of text fragments to display. The default value of zero selects a non-fragment-based headline generation method. A value greater than zero selects fragment-based headline generation (see the linked documentation above for more details). + fragmentDelimiter: ' ... ' # Delimiter string used to concatenate fragments. Defaults to " ... ". +``` + +**Note:** the highlight search term feature uses `ts_headline` which has been known to potentially impact performance. You only need this minimal config to disable it should you have issues: + +```yaml +search: + pg: + highlightOptions: + useHighlight: false +``` + +The Postgres documentation on [Highlighting Results](https://www.postgresql.org/docs/current/textsearch-controls.html#TEXTSEARCH-HEADLINE) has more details. diff --git a/plugins/search-backend-module-pg/config.d.ts b/plugins/search-backend-module-pg/config.d.ts index 6cdda27156..7367b770bc 100644 --- a/plugins/search-backend-module-pg/config.d.ts +++ b/plugins/search-backend-module-pg/config.d.ts @@ -48,7 +48,7 @@ export interface Config { */ highlightAll?: boolean; /** - * maximum number of text fragments to display. The default value of zero selects a non-fragment-based headline generation method. + * Maximum number of text fragments to display. The default value of zero selects a non-fragment-based headline generation method. * A value greater than zero selects fragment-based headline generation (see the linked documentation above for more details). */ maxFragments?: number; From a678795d252c01b3101b1ab56bd04533081f4bf1 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Sat, 18 Jun 2022 12:54:28 -0500 Subject: [PATCH 092/231] Updated api-report Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .../search-backend-module-pg/api-report.md | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/plugins/search-backend-module-pg/api-report.md b/plugins/search-backend-module-pg/api-report.md index 6a8b68a042..23e261ca4d 100644 --- a/plugins/search-backend-module-pg/api-report.md +++ b/plugins/search-backend-module-pg/api-report.md @@ -4,6 +4,7 @@ ```ts import { BatchSearchEngineIndexer } from '@backstage/plugin-search-backend-node'; +import { Config } from '@backstage/config'; import { IndexableDocument } from '@backstage/plugin-search-common'; import { IndexableResultSet } from '@backstage/plugin-search-common'; import { Knex } from 'knex'; @@ -43,7 +44,7 @@ export class DatabaseDocumentStore implements DatabaseStore { // (undocumented) query( tx: Knex.Transaction, - { types, pgTerm, fields, offset, limit, preTag, postTag }: PgSearchQuery, + { types, pgTerm, fields, offset, limit, options }: PgSearchQuery, ): Promise; // (undocumented) static supported(knex: Knex): Promise; @@ -80,10 +81,15 @@ export interface DatabaseStore { // // @public (undocumented) export class PgSearchEngine implements SearchEngine { - constructor(databaseStore: DatabaseStore); + // Warning: (ae-forgotten-export) The symbol "PgSearchHighlightOptions" needs to be exported by the entry point index.d.ts + constructor( + databaseStore: DatabaseStore, + highlightOptions?: PgSearchHighlightOptions, + ); // (undocumented) static from(options: { database: PluginDatabaseManager; + config: Config; }): Promise; // (undocumented) getIndexer(type: string): Promise; @@ -95,8 +101,13 @@ export class PgSearchEngine implements SearchEngine { ): void; // (undocumented) static supported(database: PluginDatabaseManager): Promise; + // Warning: (ae-forgotten-export) The symbol "PgSearchHighlightConfig" needs to be exported by the entry point index.d.ts + // // (undocumented) - translator(query: SearchQuery): ConcretePgSearchQuery; + translator( + query: SearchQuery, + options: PgSearchHighlightConfig, + ): ConcretePgSearchQuery; } // Warning: (ae-missing-release-tag) "PgSearchEngineIndexer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -132,12 +143,10 @@ export interface PgSearchQuery { // (undocumented) offset: number; // (undocumented) + options: PgSearchHighlightConfig; + // (undocumented) pgTerm?: string; // (undocumented) - postTag: string; - // (undocumented) - preTag: string; - // (undocumented) types?: string[]; } From 90aca31689a7ed778804a21013191dd59790cb81 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Tue, 21 Jun 2022 14:29:45 -0500 Subject: [PATCH 093/231] Refactored config/options based on feedback Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- packages/backend/src/plugins/search.ts | 2 +- .../src/PgSearchEngine/PgSearchEngine.test.ts | 14 ++++-- .../src/PgSearchEngine/PgSearchEngine.ts | 50 +++++++++++-------- .../database/DatabaseDocumentStore.test.ts | 4 +- .../src/database/DatabaseDocumentStore.ts | 3 +- .../src/database/types.ts | 4 +- plugins/search-backend-module-pg/src/index.ts | 1 + plugins/search-backend-module-pg/src/types.ts | 29 ++++++----- 8 files changed, 65 insertions(+), 42 deletions(-) diff --git a/packages/backend/src/plugins/search.ts b/packages/backend/src/plugins/search.ts index db92d79d71..51ab665026 100644 --- a/packages/backend/src/plugins/search.ts +++ b/packages/backend/src/plugins/search.ts @@ -39,7 +39,7 @@ async function createSearchEngine( } if (await PgSearchEngine.supported(env.database)) { - return await PgSearchEngine.from({ + return await PgSearchEngine.fromConfig({ database: env.database, config: env.config, }); diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts index c1ed730053..5ad9d12897 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts @@ -13,8 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { ConfigReader } from '@backstage/config'; import { DatabaseStore } from '../database'; -import { PgSearchHighlightConfig } from '../types'; +import { PgSearchHighlightOptions } from '../types'; import { ConcretePgSearchQuery, decodePageCursor, @@ -23,7 +24,7 @@ import { } from './PgSearchEngine'; import { PgSearchEngineIndexer } from './PgSearchEngineIndexer'; -const highlightOptions: PgSearchHighlightConfig = { +const highlightOptions: PgSearchHighlightOptions = { preTag: '', postTag: '', useHighlight: true, @@ -47,6 +48,13 @@ describe('PgSearchEngine', () => { const tx: any = {} as any; let searchEngine: PgSearchEngine; let database: jest.Mocked; + const config = { + search: { + pg: { + highlightOptions, + }, + }, + }; beforeEach(() => { database = { @@ -57,7 +65,7 @@ describe('PgSearchEngine', () => { completeInsert: jest.fn(), prepareInsert: jest.fn(), }; - searchEngine = new PgSearchEngine(database); + searchEngine = new PgSearchEngine(database, new ConfigReader(config)); }); describe('translator', () => { diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts index d0c1571991..b6e57552ba 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts @@ -28,7 +28,7 @@ import { } from '../database'; import { v4 as uuid } from 'uuid'; import { Config } from '@backstage/config'; -import { PgSearchHighlightConfig, PgSearchHighlightOptions } from '../types'; +import { PgSearchHighlightOptions, PgSearchOptions } from '../types'; export type ConcretePgSearchQuery = { pgQuery: PgSearchQuery; @@ -36,36 +36,46 @@ export type ConcretePgSearchQuery = { }; export class PgSearchEngine implements SearchEngine { - private readonly highlightOptions: PgSearchHighlightConfig; - - constructor( - private readonly databaseStore: DatabaseStore, - highlightOptions?: PgSearchHighlightOptions, - ) { + private readonly highlightOptions: PgSearchHighlightOptions; + constructor(private readonly databaseStore: DatabaseStore, config: Config) { const uuidTag = uuid(); - this.highlightOptions = { + const highlightConfig = config.getOptionalConfig( + 'search.pg.highlightOptions', + ); + + const highlightOptions: PgSearchHighlightOptions = { preTag: `<${uuidTag}>`, postTag: ``, - useHighlight: true, - maxWords: 35, - minWords: 15, - shortWord: 3, - highlightAll: false, - maxFragments: 0, - fragmentDelimiter: ' ... ', - ...highlightOptions, + useHighlight: highlightConfig?.getOptionalBoolean('useHighlight') ?? true, + maxWords: highlightConfig?.getOptionalNumber('maxWords') ?? 35, + minWords: highlightConfig?.getOptionalNumber('minWords') ?? 15, + shortWord: highlightConfig?.getOptionalNumber('shortWord') ?? 3, + highlightAll: + highlightConfig?.getOptionalBoolean('highlightAll') ?? false, + maxFragments: highlightConfig?.getOptionalNumber('maxFragments') ?? 0, + fragmentDelimiter: + highlightConfig?.getOptionalString('fragmentDelimiter') ?? ' ... ', }; + this.highlightOptions = highlightOptions; } + /** + * @deprecated This will be removed in a future release, please us fromConfig instead + */ static async from(options: { database: PluginDatabaseManager; config: Config; }): Promise { return new PgSearchEngine( await DatabaseDocumentStore.create(await options.database.getClient()), - options.config.getOptional( - 'search.pg.highlightOptions', - ), + options.config, + ); + } + + static async fromConfig({ config, database }: PgSearchOptions) { + return new PgSearchEngine( + await DatabaseDocumentStore.create(await database.getClient()), + config, ); } @@ -75,7 +85,7 @@ export class PgSearchEngine implements SearchEngine { translator( query: SearchQuery, - options: PgSearchHighlightConfig, + options: PgSearchHighlightOptions, ): ConcretePgSearchQuery { const pageSize = 25; const { page } = decodePageCursor(query.pageCursor); diff --git a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts index 693a3ea3c0..f4b3e6fb0b 100644 --- a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts +++ b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts @@ -15,10 +15,10 @@ */ import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils'; import { IndexableDocument } from '@backstage/plugin-search-common'; -import { PgSearchHighlightConfig } from '../types'; +import { PgSearchHighlightOptions } from '../types'; import { DatabaseDocumentStore } from './DatabaseDocumentStore'; -const highlightOptions: PgSearchHighlightConfig = { +const highlightOptions: PgSearchHighlightOptions = { preTag: '', postTag: '', useHighlight: false, diff --git a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts index 1695db3cf5..040145f7b8 100644 --- a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts +++ b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts @@ -132,8 +132,9 @@ export class DatabaseDocumentStore implements DatabaseStore { async query( tx: Knex.Transaction, - { types, pgTerm, fields, offset, limit, options }: PgSearchQuery, + searchQuery: PgSearchQuery, ): Promise { + const { types, pgTerm, fields, offset, limit, options } = searchQuery; // Builds a query like: // SELECT ts_rank_cd(body, query) AS rank, type, document, // ts_headline('english', document, query) AS highlight diff --git a/plugins/search-backend-module-pg/src/database/types.ts b/plugins/search-backend-module-pg/src/database/types.ts index d572eba146..43bda32050 100644 --- a/plugins/search-backend-module-pg/src/database/types.ts +++ b/plugins/search-backend-module-pg/src/database/types.ts @@ -15,7 +15,7 @@ */ import { IndexableDocument } from '@backstage/plugin-search-common'; import { Knex } from 'knex'; -import { PgSearchHighlightConfig } from '../types'; +import { PgSearchHighlightOptions } from '../types'; export interface PgSearchQuery { fields?: Record; @@ -23,7 +23,7 @@ export interface PgSearchQuery { pgTerm?: string; offset: number; limit: number; - options: PgSearchHighlightConfig; + options: PgSearchHighlightOptions; } export interface DatabaseStore { diff --git a/plugins/search-backend-module-pg/src/index.ts b/plugins/search-backend-module-pg/src/index.ts index fbc52735dd..4cb54f9676 100644 --- a/plugins/search-backend-module-pg/src/index.ts +++ b/plugins/search-backend-module-pg/src/index.ts @@ -22,3 +22,4 @@ export * from './database'; export * from './PgSearchEngine'; +export type { PgSearchHighlightOptions } from './types'; diff --git a/plugins/search-backend-module-pg/src/types.ts b/plugins/search-backend-module-pg/src/types.ts index 9ad56b9b12..5e32c69e7a 100644 --- a/plugins/search-backend-module-pg/src/types.ts +++ b/plugins/search-backend-module-pg/src/types.ts @@ -14,6 +14,22 @@ * limitations under the License. */ +import { PluginDatabaseManager } from '@backstage/backend-common'; +import { Config } from '@backstage/config'; + +/** + * Options to instantiate PgSearchEngine + * @public + */ +export type PgSearchOptions = { + config: Config; + database: PluginDatabaseManager; +}; + +/** + * Options for highlighting search terms + * @public + */ export type PgSearchHighlightOptions = { useHighlight?: boolean; maxWords?: number; @@ -22,19 +38,6 @@ export type PgSearchHighlightOptions = { highlightAll?: boolean; maxFragments?: number; fragmentDelimiter?: string; -}; - -/** - * @public - */ -export type PgSearchHighlightConfig = { - useHighlight: boolean; - maxWords: number; - minWords: number; - shortWord: number; - highlightAll: boolean; - maxFragments: number; - fragmentDelimiter: string; preTag: string; postTag: string; }; From 8803c2f2dfc2fbea04cf8fe604cf1b8b0af1c7d2 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Tue, 21 Jun 2022 14:57:55 -0500 Subject: [PATCH 094/231] Updated changeset and api-report Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .changeset/metal-windows-share.md | 2 + .../search-backend-module-pg/api-report.md | 40 ++++++++++++++----- plugins/search-backend-module-pg/src/index.ts | 2 +- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/.changeset/metal-windows-share.md b/.changeset/metal-windows-share.md index 4fc568986a..0c5e6bb26e 100644 --- a/.changeset/metal-windows-share.md +++ b/.changeset/metal-windows-share.md @@ -2,4 +2,6 @@ '@backstage/plugin-search-backend-module-pg': patch --- +**DEPRECATED**: `PgSearchEngine` static `from` has been depracated and will be removed in a future release. Use static `fromConfig` method to instantiate. + Added support for highlighting matched terms in search result data diff --git a/plugins/search-backend-module-pg/api-report.md b/plugins/search-backend-module-pg/api-report.md index 23e261ca4d..0d03a83d34 100644 --- a/plugins/search-backend-module-pg/api-report.md +++ b/plugins/search-backend-module-pg/api-report.md @@ -44,7 +44,7 @@ export class DatabaseDocumentStore implements DatabaseStore { // (undocumented) query( tx: Knex.Transaction, - { types, pgTerm, fields, offset, limit, options }: PgSearchQuery, + searchQuery: PgSearchQuery, ): Promise; // (undocumented) static supported(knex: Knex): Promise; @@ -81,17 +81,18 @@ export interface DatabaseStore { // // @public (undocumented) export class PgSearchEngine implements SearchEngine { - // Warning: (ae-forgotten-export) The symbol "PgSearchHighlightOptions" needs to be exported by the entry point index.d.ts - constructor( - databaseStore: DatabaseStore, - highlightOptions?: PgSearchHighlightOptions, - ); - // (undocumented) + constructor(databaseStore: DatabaseStore, config: Config); + // @deprecated (undocumented) static from(options: { database: PluginDatabaseManager; config: Config; }): Promise; // (undocumented) + static fromConfig({ + config, + database, + }: PgSearchOptions): Promise; + // (undocumented) getIndexer(type: string): Promise; // (undocumented) query(query: SearchQuery): Promise; @@ -101,12 +102,10 @@ export class PgSearchEngine implements SearchEngine { ): void; // (undocumented) static supported(database: PluginDatabaseManager): Promise; - // Warning: (ae-forgotten-export) The symbol "PgSearchHighlightConfig" needs to be exported by the entry point index.d.ts - // // (undocumented) translator( query: SearchQuery, - options: PgSearchHighlightConfig, + options: PgSearchHighlightOptions, ): ConcretePgSearchQuery; } @@ -132,6 +131,25 @@ export type PgSearchEngineIndexerOptions = { databaseStore: DatabaseStore; }; +// @public +export type PgSearchHighlightOptions = { + useHighlight?: boolean; + maxWords?: number; + minWords?: number; + shortWord?: number; + highlightAll?: boolean; + maxFragments?: number; + fragmentDelimiter?: string; + preTag: string; + postTag: string; +}; + +// @public +export type PgSearchOptions = { + config: Config; + database: PluginDatabaseManager; +}; + // Warning: (ae-missing-release-tag) "PgSearchQuery" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -143,7 +161,7 @@ export interface PgSearchQuery { // (undocumented) offset: number; // (undocumented) - options: PgSearchHighlightConfig; + options: PgSearchHighlightOptions; // (undocumented) pgTerm?: string; // (undocumented) diff --git a/plugins/search-backend-module-pg/src/index.ts b/plugins/search-backend-module-pg/src/index.ts index 4cb54f9676..86184d1e4e 100644 --- a/plugins/search-backend-module-pg/src/index.ts +++ b/plugins/search-backend-module-pg/src/index.ts @@ -22,4 +22,4 @@ export * from './database'; export * from './PgSearchEngine'; -export type { PgSearchHighlightOptions } from './types'; +export type { PgSearchOptions, PgSearchHighlightOptions } from './types'; From cb62dd8a8a716a75add3388997cfb1bee2dd5d65 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Tue, 21 Jun 2022 15:12:51 -0500 Subject: [PATCH 095/231] Fixed typo in changeset Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .changeset/metal-windows-share.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/metal-windows-share.md b/.changeset/metal-windows-share.md index 0c5e6bb26e..b4443a620f 100644 --- a/.changeset/metal-windows-share.md +++ b/.changeset/metal-windows-share.md @@ -2,6 +2,6 @@ '@backstage/plugin-search-backend-module-pg': patch --- -**DEPRECATED**: `PgSearchEngine` static `from` has been depracated and will be removed in a future release. Use static `fromConfig` method to instantiate. +**DEPRECATED**: `PgSearchEngine` static `from` has been deprecated and will be removed in a future release. Use static `fromConfig` method to instantiate. Added support for highlighting matched terms in search result data From a45d796451ca35984d1ed76e6221644e5c144981 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Tue, 21 Jun 2022 16:03:12 -0500 Subject: [PATCH 096/231] Refactored types based on feedback Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .../search-backend-module-pg/api-report.md | 21 ++++--- .../src/PgSearchEngine/PgSearchEngine.test.ts | 12 ++-- .../src/PgSearchEngine/PgSearchEngine.ts | 59 ++++++++++++++++--- .../src/PgSearchEngine/index.ts | 8 ++- .../database/DatabaseDocumentStore.test.ts | 2 +- .../src/database/types.ts | 2 +- plugins/search-backend-module-pg/src/index.ts | 1 - plugins/search-backend-module-pg/src/types.ts | 43 -------------- 8 files changed, 81 insertions(+), 67 deletions(-) delete mode 100644 plugins/search-backend-module-pg/src/types.ts diff --git a/plugins/search-backend-module-pg/api-report.md b/plugins/search-backend-module-pg/api-report.md index 0d03a83d34..cd47df837c 100644 --- a/plugins/search-backend-module-pg/api-report.md +++ b/plugins/search-backend-module-pg/api-report.md @@ -12,9 +12,7 @@ import { PluginDatabaseManager } from '@backstage/backend-common'; import { SearchEngine } from '@backstage/plugin-search-backend-node'; import { SearchQuery } from '@backstage/plugin-search-common'; -// Warning: (ae-missing-release-tag) "ConcretePgSearchQuery" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) +// @public export type ConcretePgSearchQuery = { pgQuery: PgSearchQuery; pageSize: number; @@ -97,15 +95,13 @@ export class PgSearchEngine implements SearchEngine { // (undocumented) query(query: SearchQuery): Promise; // (undocumented) - setTranslator( - translator: (query: SearchQuery) => ConcretePgSearchQuery, - ): void; + setTranslator(translator: PgSearchQueryTranslator): void; // (undocumented) static supported(database: PluginDatabaseManager): Promise; // (undocumented) translator( query: SearchQuery, - options: PgSearchHighlightOptions, + options: PgSearchQueryTranslatorOptions, ): ConcretePgSearchQuery; } @@ -168,6 +164,17 @@ export interface PgSearchQuery { types?: string[]; } +// @public +export type PgSearchQueryTranslator = ( + query: SearchQuery, + options: PgSearchQueryTranslatorOptions, +) => ConcretePgSearchQuery; + +// @public +export type PgSearchQueryTranslatorOptions = { + highlightOptions: PgSearchHighlightOptions; +}; + // Warning: (ae-missing-release-tag) "RawDocumentRow" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts index 5ad9d12897..23f8983074 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts @@ -15,12 +15,12 @@ */ import { ConfigReader } from '@backstage/config'; import { DatabaseStore } from '../database'; -import { PgSearchHighlightOptions } from '../types'; import { ConcretePgSearchQuery, decodePageCursor, encodePageCursor, PgSearchEngine, + PgSearchHighlightOptions, } from './PgSearchEngine'; import { PgSearchEngineIndexer } from './PgSearchEngineIndexer'; @@ -86,7 +86,7 @@ describe('PgSearchEngine', () => { term: 'testTerm', filters: {}, }, - highlightOptions, + { highlightOptions }, ); }); @@ -96,7 +96,7 @@ describe('PgSearchEngine', () => { term: 'Hello', pageCursor: 'MQ==', }, - highlightOptions, + { highlightOptions }, ); expect(actualTranslatedQuery).toMatchObject({ @@ -114,7 +114,7 @@ describe('PgSearchEngine', () => { { term: 'Hello World', }, - highlightOptions, + { highlightOptions }, ); expect(actualTranslatedQuery).toMatchObject({ @@ -133,7 +133,7 @@ describe('PgSearchEngine', () => { term: 'H&e|l!l*o W\0o(r)l:d', pageCursor: '', }, - highlightOptions, + { highlightOptions }, ) as ConcretePgSearchQuery; expect(actualTranslatedQuery).toMatchObject({ @@ -151,7 +151,7 @@ describe('PgSearchEngine', () => { filters: { kind: 'testKind' }, types: ['my-filter'], }, - highlightOptions, + { highlightOptions }, ); expect(actualTranslatedQuery).toMatchObject({ diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts index b6e57552ba..3f4d419fab 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts @@ -28,13 +28,58 @@ import { } from '../database'; import { v4 as uuid } from 'uuid'; import { Config } from '@backstage/config'; -import { PgSearchHighlightOptions, PgSearchOptions } from '../types'; +/** + * Search query that the Postgres search engine understands. + * @public + */ export type ConcretePgSearchQuery = { pgQuery: PgSearchQuery; pageSize: number; }; +/** + * Options available for the Postgres specific query translator. + * @public + */ +export type PgSearchQueryTranslatorOptions = { + highlightOptions: PgSearchHighlightOptions; +}; + +/** + * Postgres specific query translator. + * @public + */ +export type PgSearchQueryTranslator = ( + query: SearchQuery, + options: PgSearchQueryTranslatorOptions, +) => ConcretePgSearchQuery; + +/** + * Options to instantiate PgSearchEngine + * @public + */ +export type PgSearchOptions = { + config: Config; + database: PluginDatabaseManager; +}; + +/** + * Options for highlighting search terms + * @public + */ +export type PgSearchHighlightOptions = { + useHighlight?: boolean; + maxWords?: number; + minWords?: number; + shortWord?: number; + highlightAll?: boolean; + maxFragments?: number; + fragmentDelimiter?: string; + preTag: string; + postTag: string; +}; + export class PgSearchEngine implements SearchEngine { private readonly highlightOptions: PgSearchHighlightOptions; constructor(private readonly databaseStore: DatabaseStore, config: Config) { @@ -85,7 +130,7 @@ export class PgSearchEngine implements SearchEngine { translator( query: SearchQuery, - options: PgSearchHighlightOptions, + options: PgSearchQueryTranslatorOptions, ): ConcretePgSearchQuery { const pageSize = 25; const { page } = decodePageCursor(query.pageCursor); @@ -105,15 +150,13 @@ export class PgSearchEngine implements SearchEngine { types: query.types, offset, limit, - options, + options: options.highlightOptions, }, pageSize, }; } - setTranslator( - translator: (query: SearchQuery) => ConcretePgSearchQuery, - ): void { + setTranslator(translator: PgSearchQueryTranslator) { this.translator = translator; } @@ -126,7 +169,9 @@ export class PgSearchEngine implements SearchEngine { } async query(query: SearchQuery): Promise { - const { pgQuery, pageSize } = this.translator(query, this.highlightOptions); + const { pgQuery, pageSize } = this.translator(query, { + highlightOptions: this.highlightOptions, + }); const rows = await this.databaseStore.transaction(async tx => this.databaseStore.query(tx, pgQuery), diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/index.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/index.ts index 7f8e297648..e9ea04e5c4 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/index.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/index.ts @@ -14,7 +14,13 @@ * limitations under the License. */ export { PgSearchEngine } from './PgSearchEngine'; -export type { ConcretePgSearchQuery } from './PgSearchEngine'; +export type { + ConcretePgSearchQuery, + PgSearchQueryTranslatorOptions, + PgSearchQueryTranslator, + PgSearchOptions, + PgSearchHighlightOptions, +} from './PgSearchEngine'; export type { PgSearchEngineIndexer, PgSearchEngineIndexerOptions, diff --git a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts index f4b3e6fb0b..355e41352d 100644 --- a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts +++ b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.test.ts @@ -15,7 +15,7 @@ */ import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils'; import { IndexableDocument } from '@backstage/plugin-search-common'; -import { PgSearchHighlightOptions } from '../types'; +import { PgSearchHighlightOptions } from '../PgSearchEngine'; import { DatabaseDocumentStore } from './DatabaseDocumentStore'; const highlightOptions: PgSearchHighlightOptions = { diff --git a/plugins/search-backend-module-pg/src/database/types.ts b/plugins/search-backend-module-pg/src/database/types.ts index 43bda32050..151be7d13f 100644 --- a/plugins/search-backend-module-pg/src/database/types.ts +++ b/plugins/search-backend-module-pg/src/database/types.ts @@ -15,7 +15,7 @@ */ import { IndexableDocument } from '@backstage/plugin-search-common'; import { Knex } from 'knex'; -import { PgSearchHighlightOptions } from '../types'; +import { PgSearchHighlightOptions } from '../PgSearchEngine'; export interface PgSearchQuery { fields?: Record; diff --git a/plugins/search-backend-module-pg/src/index.ts b/plugins/search-backend-module-pg/src/index.ts index 86184d1e4e..fbc52735dd 100644 --- a/plugins/search-backend-module-pg/src/index.ts +++ b/plugins/search-backend-module-pg/src/index.ts @@ -22,4 +22,3 @@ export * from './database'; export * from './PgSearchEngine'; -export type { PgSearchOptions, PgSearchHighlightOptions } from './types'; diff --git a/plugins/search-backend-module-pg/src/types.ts b/plugins/search-backend-module-pg/src/types.ts deleted file mode 100644 index 5e32c69e7a..0000000000 --- a/plugins/search-backend-module-pg/src/types.ts +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { PluginDatabaseManager } from '@backstage/backend-common'; -import { Config } from '@backstage/config'; - -/** - * Options to instantiate PgSearchEngine - * @public - */ -export type PgSearchOptions = { - config: Config; - database: PluginDatabaseManager; -}; - -/** - * Options for highlighting search terms - * @public - */ -export type PgSearchHighlightOptions = { - useHighlight?: boolean; - maxWords?: number; - minWords?: number; - shortWord?: number; - highlightAll?: boolean; - maxFragments?: number; - fragmentDelimiter?: string; - preTag: string; - postTag: string; -}; From e52f7801b0ff54d8cea619bb9219b5020d96b1ba Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Tue, 28 Jun 2022 07:34:57 -0500 Subject: [PATCH 097/231] Adjustments based on feedback Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- docs/features/search/search-engines.md | 30 ++++++++++++++++++- packages/backend/src/plugins/search.ts | 3 +- .../search-backend-module-pg/api-report.md | 10 +++---- .../src/PgSearchEngine/PgSearchEngine.ts | 9 ++++-- .../src/database/DatabaseDocumentStore.ts | 1 + 5 files changed, 42 insertions(+), 11 deletions(-) diff --git a/docs/features/search/search-engines.md b/docs/features/search/search-engines.md index a5ff780c8a..ecd8a85109 100644 --- a/docs/features/search/search-engines.md +++ b/docs/features/search/search-engines.md @@ -59,10 +59,38 @@ configured and make the following changes to your backend: // Initialize a connection to a search engine. const searchEngine = (await PgSearchEngine.supported(env.database)) - ? await PgSearchEngine.from({ database: env.database }) + ? await PgSearchEngine.fromConfig(env.config, { database: env.database }) : new LunrSearchEngine({ logger: env.logger }); ``` +## Optional Configuration + +The following is an example of the optional configuration that can be applied when using Postgres as the search backend. Currently this is mostly for just the highlight feature: + +```yaml +search: + pg: + highlightOptions: + useHighlight: true # Used to enable to disable the highlight feature. The default value is true + maxWord: 35 # Used to set the longest headlines to output. The default value is 35. + minWord: 15 # Used to set the shortest headlines to output. The default value is 15. + shortWord: 3 # Words of this length or less will be dropped at the start and end of a headline, unless they are query terms. The default value of three (3) eliminates common English articles. + highlightAll: false # If true the whole document will be used as the headline, ignoring the preceding three parameters. The default is false. + maxFragments: 0 # Maximum number of text fragments to display. The default value of zero selects a non-fragment-based headline generation method. A value greater than zero selects fragment-based headline generation (see the linked documentation above for more details). + fragmentDelimiter: ' ... ' # Delimiter string used to concatenate fragments. Defaults to " ... ". +``` + +**Note:** the highlight search term feature uses `ts_headline` which has been known to potentially impact performance. You only need this minimal config to disable it should you have issues: + +```yaml +search: + pg: + highlightOptions: + useHighlight: false +``` + +The Postgres documentation on [Highlighting Results](https://www.postgresql.org/docs/current/textsearch-controls.html#TEXTSEARCH-HEADLINE) has more details. + ## ElasticSearch Backstage supports ElasticSearch search engine connections, indexing and diff --git a/packages/backend/src/plugins/search.ts b/packages/backend/src/plugins/search.ts index 51ab665026..c478ecdd05 100644 --- a/packages/backend/src/plugins/search.ts +++ b/packages/backend/src/plugins/search.ts @@ -39,9 +39,8 @@ async function createSearchEngine( } if (await PgSearchEngine.supported(env.database)) { - return await PgSearchEngine.fromConfig({ + return await PgSearchEngine.fromConfig(env.config, { database: env.database, - config: env.config, }); } diff --git a/plugins/search-backend-module-pg/api-report.md b/plugins/search-backend-module-pg/api-report.md index cd47df837c..f7a188a14e 100644 --- a/plugins/search-backend-module-pg/api-report.md +++ b/plugins/search-backend-module-pg/api-report.md @@ -79,6 +79,7 @@ export interface DatabaseStore { // // @public (undocumented) export class PgSearchEngine implements SearchEngine { + // @deprecated constructor(databaseStore: DatabaseStore, config: Config); // @deprecated (undocumented) static from(options: { @@ -86,10 +87,10 @@ export class PgSearchEngine implements SearchEngine { config: Config; }): Promise; // (undocumented) - static fromConfig({ - config, - database, - }: PgSearchOptions): Promise; + static fromConfig( + config: Config, + options: PgSearchOptions, + ): Promise; // (undocumented) getIndexer(type: string): Promise; // (undocumented) @@ -142,7 +143,6 @@ export type PgSearchHighlightOptions = { // @public export type PgSearchOptions = { - config: Config; database: PluginDatabaseManager; }; diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts index 3f4d419fab..abf7cdbf5c 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts @@ -60,7 +60,6 @@ export type PgSearchQueryTranslator = ( * @public */ export type PgSearchOptions = { - config: Config; database: PluginDatabaseManager; }; @@ -82,6 +81,10 @@ export type PgSearchHighlightOptions = { export class PgSearchEngine implements SearchEngine { private readonly highlightOptions: PgSearchHighlightOptions; + + /** + * @deprecated This will be marked as private in a future release, please us fromConfig instead + */ constructor(private readonly databaseStore: DatabaseStore, config: Config) { const uuidTag = uuid(); const highlightConfig = config.getOptionalConfig( @@ -117,9 +120,9 @@ export class PgSearchEngine implements SearchEngine { ); } - static async fromConfig({ config, database }: PgSearchOptions) { + static async fromConfig(config: Config, options: PgSearchOptions) { return new PgSearchEngine( - await DatabaseDocumentStore.create(await database.getClient()), + await DatabaseDocumentStore.create(await options.database.getClient()), config, ); } diff --git a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts index 040145f7b8..8e73c0f16f 100644 --- a/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts +++ b/plugins/search-backend-module-pg/src/database/DatabaseDocumentStore.ts @@ -135,6 +135,7 @@ export class DatabaseDocumentStore implements DatabaseStore { searchQuery: PgSearchQuery, ): Promise { const { types, pgTerm, fields, offset, limit, options } = searchQuery; + // TODO(awanlin): We should make the language a parameter so that we can support more then just english // Builds a query like: // SELECT ts_rank_cd(body, query) AS rank, type, document, // ts_headline('english', document, query) AS highlight From bbd93e2a1d0c3366fbc008fddfb276d937052a86 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 13:34:35 +0000 Subject: [PATCH 098/231] fix(deps): update dependency kafkajs to v2.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 319a959e84..c41d871342 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16967,9 +16967,9 @@ jwt-decode@*, jwt-decode@^3.1.0: integrity sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A== kafkajs@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/kafkajs/-/kafkajs-2.0.2.tgz#cdfc8f57aa4fd69f6d9ca1cce4ee89bbc2a3a1f9" - integrity sha512-g6CM3fAenofOjR1bfOAqeZUEaSGhNtBscNokybSdW1rmIKYNwBPC9xQzwulFJm36u/xcxXUiCl/L/qfslapihA== + version "2.1.0" + resolved "https://registry.npmjs.org/kafkajs/-/kafkajs-2.1.0.tgz#32ede4e8080cc75586c5e4406eeb582fa73f7b1e" + integrity sha512-6IYiOdGWvFPbSbVB+AV3feT+A7vzw5sXm7Ze4QTfP7FRNdY8pGcpiNPvD2lfgYFD8Dm9KbMgBgTt2mf8KaIkzw== keyv-memcache@^1.2.5: version "1.2.9" From f78ed0ae30aac10be9e76d5c98c478dd4d24134e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 13:35:24 +0000 Subject: [PATCH 099/231] fix(deps): update dependency octokit-plugin-create-pull-request to v3.12.2 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 319a959e84..322cd08808 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19648,9 +19648,9 @@ obuf@^1.0.0, obuf@^1.1.2: integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== octokit-plugin-create-pull-request@^3.10.0: - version "3.11.0" - resolved "https://registry.npmjs.org/octokit-plugin-create-pull-request/-/octokit-plugin-create-pull-request-3.11.0.tgz#11f496176111eaa04955fb2bb7e4d953501423d0" - integrity sha512-ZD025HTrm/KoBMRmPYbcCw3tfGomOdAYFB6/K1xiMW+/NFsOyDOeFrEGBbL82b57dhNsPRibs0eL64lpJ3xyvw== + version "3.12.2" + resolved "https://registry.npmjs.org/octokit-plugin-create-pull-request/-/octokit-plugin-create-pull-request-3.12.2.tgz#eaced840587a2f7176c563d94ca6112a93f29da2" + integrity sha512-DwY+vPq7dd2zSiIJw2lN1bYUKEuvjLmBTErTJOQEQd+ujQompN8qjpixeheMZetkJmSNzpWhxxqgZyCMuVnZlQ== dependencies: "@octokit/types" "^6.8.2" From 15201b10321827e3f788b56fc09ff9d554373667 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 14:12:33 +0000 Subject: [PATCH 100/231] fix(deps): update dependency rc-progress to v3.4.0 Signed-off-by: Renovate Bot --- .changeset/renovate-833a91b.md | 7 +++++++ packages/core-components/package.json | 2 +- plugins/codescene/package.json | 2 +- plugins/sonarqube/package.json | 2 +- yarn.lock | 9 +++++++++ 5 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 .changeset/renovate-833a91b.md diff --git a/.changeset/renovate-833a91b.md b/.changeset/renovate-833a91b.md new file mode 100644 index 0000000000..15e23ec5ff --- /dev/null +++ b/.changeset/renovate-833a91b.md @@ -0,0 +1,7 @@ +--- +'@backstage/core-components': patch +'@backstage/plugin-codescene': patch +'@backstage/plugin-sonarqube': patch +--- + +Updated dependency `rc-progress` to `3.4.0`. diff --git a/packages/core-components/package.json b/packages/core-components/package.json index aeea26c17b..51cbc37a1b 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -56,7 +56,7 @@ "pluralize": "^8.0.0", "prop-types": "^15.7.2", "qs": "^6.9.4", - "rc-progress": "3.3.3", + "rc-progress": "3.4.0", "react-helmet": "6.1.0", "react-hook-form": "^7.12.2", "react-markdown": "^8.0.0", diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index 0b06850594..c21c1e24be 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -30,7 +30,7 @@ "@material-ui/core": "^4.9.10", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "^4.0.0-alpha.57", - "rc-progress": "3.3.3", + "rc-progress": "3.4.0", "react-router-dom": "6.0.0-beta.0", "react-use": "^17.2.4" }, diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index 94888e1d95..4aabc80bab 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -46,7 +46,7 @@ "@material-ui/lab": "4.0.0-alpha.57", "@material-ui/styles": "^4.10.0", "cross-fetch": "^3.1.5", - "rc-progress": "3.3.3", + "rc-progress": "3.4.0", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/yarn.lock b/yarn.lock index d64acad3a0..569376c94f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21621,6 +21621,15 @@ rc-progress@3.3.3: classnames "^2.2.6" rc-util "^5.16.1" +rc-progress@3.4.0: + version "3.4.0" + resolved "https://registry.npmjs.org/rc-progress/-/rc-progress-3.4.0.tgz#80a33c25c9675f5836ba25a87cd8dc310aad72b1" + integrity sha512-ZuMyOzzTkZnn+EKqGQ7YHzrvGzBtcCCVjx1McC/E/pMTvr6GWVfVRSawDlWsscxsJs7MkqSTwCO6Lu4IeoY2zQ== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.6" + rc-util "^5.16.1" + rc-util@^5.16.1: version "5.16.1" resolved "https://registry.npmjs.org/rc-util/-/rc-util-5.16.1.tgz#374db7cb735512f05165ddc3d6b2c61c21b8b4e3" From 8915b74167cbcad90ac45b425b42287a9f81a7ed Mon Sep 17 00:00:00 2001 From: sblausten Date: Thu, 30 Jun 2022 16:43:09 +0200 Subject: [PATCH 101/231] Fix mocking Signed-off-by: sblausten --- .../src/service/techInsightsContextBuilder.test.ts | 10 +++++----- .../src/service/techInsightsContextBuilder.ts | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts index 46d1e61e22..82f504c8a8 100644 --- a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts +++ b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.test.ts @@ -27,9 +27,11 @@ import { Knex } from 'knex'; jest.mock('./fact/FactRetrieverRegistry'); jest.mock('./fact/FactRetrieverEngine', () => ({ - create: jest.fn().mockResolvedValue({ - schedule: jest.fn(), - }), + FactRetrieverEngine: { + create: jest.fn().mockResolvedValue({ + schedule: jest.fn(), + }), + }, })); describe('buildTechInsightsContext', () => { @@ -68,7 +70,6 @@ describe('buildTechInsightsContext', () => { discovery: discoveryMock, tokenManager: ServerTokenManager.noop(), }); - expect(DefaultFactRetrieverRegistry).toHaveBeenCalledTimes(1); }); @@ -85,7 +86,6 @@ describe('buildTechInsightsContext', () => { discovery: discoveryMock, tokenManager: ServerTokenManager.noop(), }); - expect(DefaultFactRetrieverRegistry).not.toHaveBeenCalled(); }); }); diff --git a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts index 008acf192d..1ce87adb96 100644 --- a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts +++ b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts @@ -120,6 +120,7 @@ export const buildTechInsightsContext = async < scheduler, tokenManager, } = options; + logger.info('HERE1'); const buildFactRetrieverRegistry = (): FactRetrieverRegistry => { if (!options.factRetrieverRegistry) { @@ -139,6 +140,7 @@ export const buildTechInsightsContext = async < await database.getClient(), { logger }, ); + logger.info('HERE2'); const factRetrieverEngine = await FactRetrieverEngine.create({ scheduler, From d223fa15663a4e4552812b14422fded352a69c32 Mon Sep 17 00:00:00 2001 From: sblausten Date: Thu, 30 Jun 2022 16:47:32 +0200 Subject: [PATCH 102/231] Clean Signed-off-by: sblausten --- .../src/service/techInsightsContextBuilder.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts index 1ce87adb96..008acf192d 100644 --- a/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts +++ b/plugins/tech-insights-backend/src/service/techInsightsContextBuilder.ts @@ -120,7 +120,6 @@ export const buildTechInsightsContext = async < scheduler, tokenManager, } = options; - logger.info('HERE1'); const buildFactRetrieverRegistry = (): FactRetrieverRegistry => { if (!options.factRetrieverRegistry) { @@ -140,7 +139,6 @@ export const buildTechInsightsContext = async < await database.getClient(), { logger }, ); - logger.info('HERE2'); const factRetrieverEngine = await FactRetrieverEngine.create({ scheduler, From 94a4c24fed612732e4559c169ea8c08d865551b3 Mon Sep 17 00:00:00 2001 From: planeiii Date: Thu, 30 Jun 2022 09:52:56 -0500 Subject: [PATCH 103/231] chore: correct yarn.lock registry entry Signed-off-by: planeiii --- yarn.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8d7fe5fa30..6c67be2830 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6502,7 +6502,7 @@ resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== -"@types/react-dom@*", "@types/react-dom@<18.0.0", "@types/react-dom@^17": +"@types/react-dom@*", "@types/react-dom@<18.0.0": version "17.0.17" resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.17.tgz#2e3743277a793a96a99f1bf87614598289da68a1" integrity sha512-VjnqEmqGnasQKV0CWLevqMTXBYG9GbwuE6x3VetERLh0cq2LTptFE73MrQi2S7GkKXCf2GgwItB/melLnxfnsg== @@ -20904,8 +20904,8 @@ promise-all-reject-late@^1.0.0: promise-any-polyfill@^1.0.1: version "1.0.1" - resolved "https://artifactory.thousandeyes.com/artifactory/api/npm/npm/promise-any-polyfill/-/promise-any-polyfill-1.0.1.tgz#563872dd0abd370bfa8039e63980469b4b8b0d53" - integrity sha1-Vjhy3Qq9Nwv6gDnmOYBGm0uLDVM= + resolved "https://registry.npmjs.org/promise-any-polyfill/-/promise-any-polyfill-1.0.1.tgz#563872dd0abd370bfa8039e63980469b4b8b0d53" + integrity sha512-51Tj+hOoV3LOeCHItmWBklN9FYkyV53uIIjjzgIchitGneTvl6+ivOxWXhxraeUzzS3YFRpXRPPbv7+KD3NzYQ== promise-call-limit@^1.0.1: version "1.0.1" @@ -26012,7 +26012,7 @@ ws@^7.3.1, ws@^7.4.6: resolved "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== -ws@^8.0.0, ws@^8.3.0: +ws@^8.3.0: version "8.8.0" resolved "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz#8e71c75e2f6348dbf8d78005107297056cb77769" integrity sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ== From 45770ba8f896f520a77c2373da016bf49062a389 Mon Sep 17 00:00:00 2001 From: Matteo Silvestri Date: Thu, 30 Jun 2022 15:46:46 +0200 Subject: [PATCH 104/231] feat: new setUserAsOwner flag for publish:gitlab action Signed-off-by: Matteo Silvestri --- .../actions/builtin/publish/gitlab.test.ts | 60 +++++++++++++++++++ .../actions/builtin/publish/gitlab.ts | 28 +++++++-- 2 files changed, 83 insertions(+), 5 deletions(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts index f427023c69..27261ecd49 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts @@ -32,6 +32,9 @@ const mockGitlabClient = { Users: { current: jest.fn(), }, + ProjectMembers: { + add: jest.fn(), + }, }; jest.mock('@gitbeaker/node', () => ({ Gitlab: class { @@ -113,6 +116,7 @@ describe('publish:gitlab', () => { }); it('should work when there is a token provided through ctx.input', async () => { + mockGitlabClient.Users.current.mockResolvedValue({ id: 12345 }); mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); mockGitlabClient.Projects.create.mockResolvedValue({ http_url_to_repo: 'http://mockurl.git', @@ -135,6 +139,7 @@ describe('publish:gitlab', () => { }); it('should call the correct Gitlab APIs when the owner is an organization', async () => { + mockGitlabClient.Users.current.mockResolvedValue({ id: 12345 }); mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); mockGitlabClient.Projects.create.mockResolvedValue({ http_url_to_repo: 'http://mockurl.git', @@ -168,6 +173,7 @@ describe('publish:gitlab', () => { }); it('should call initRepoAndPush with the correct values', async () => { + mockGitlabClient.Users.current.mockResolvedValue({ id: 12345 }); mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); mockGitlabClient.Projects.create.mockResolvedValue({ http_url_to_repo: 'http://mockurl.git', @@ -187,6 +193,7 @@ describe('publish:gitlab', () => { }); it('should call initRepoAndPush with the correct default branch', async () => { + mockGitlabClient.Users.current.mockResolvedValue({ id: 12345 }); mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); mockGitlabClient.Projects.create.mockResolvedValue({ http_url_to_repo: 'http://mockurl.git', @@ -241,6 +248,7 @@ describe('publish:gitlab', () => { config: customAuthorConfig, }); + mockGitlabClient.Users.current.mockResolvedValue({ id: 12345 }); mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); mockGitlabClient.Projects.create.mockResolvedValue({ http_url_to_repo: 'http://mockurl.git', @@ -286,6 +294,7 @@ describe('publish:gitlab', () => { config: customAuthorConfig, }); + mockGitlabClient.Users.current.mockResolvedValue({ id: 12345 }); mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); mockGitlabClient.Projects.create.mockResolvedValue({ http_url_to_repo: 'http://mockurl.git', @@ -305,6 +314,7 @@ describe('publish:gitlab', () => { }); it('should call output with the remoteUrl and repoContentsUrl', async () => { + mockGitlabClient.Users.current.mockResolvedValue({ id: 12345 }); mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); mockGitlabClient.Projects.create.mockResolvedValue({ http_url_to_repo: 'http://mockurl.git', @@ -321,4 +331,54 @@ describe('publish:gitlab', () => { 'http://mockurl/-/blob/master', ); }); + + it('should call the correct Gitlab APIs when setUserAsOwner option is true and integration config has a token', async () => { + const customAuthorConfig = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://api.gitlab.com', + }, + ], + }, + }); + + const customAuthorIntegrations = + ScmIntegrations.fromConfig(customAuthorConfig); + const customAuthorAction = createPublishGitlabAction({ + integrations: customAuthorIntegrations, + config: customAuthorConfig, + }); + + mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); + mockGitlabClient.Users.current.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Projects.create.mockResolvedValue({ + id: 123456, + http_url_to_repo: 'http://mockurl.git', + }); + + await customAuthorAction.handler({ + ...mockContext, + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + token: 'token', + setUserAsOwner: true, + }, + }); + + expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith('owner'); + expect(mockGitlabClient.Users.current).toHaveBeenCalled(); + expect(mockGitlabClient.ProjectMembers.add).toHaveBeenCalledWith( + 123456, + 12345, + 50, + ); + expect(mockGitlabClient.Projects.create).toHaveBeenCalledWith({ + namespace_id: 1234, + name: 'repo', + visibility: 'private', + }); + }); }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts index a7c247f4d9..e36bb0aa68 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts @@ -43,6 +43,7 @@ export function createPublishGitlabAction(options: { gitCommitMessage?: string; gitAuthorName?: string; gitAuthorEmail?: string; + setUserAsOwner?: boolean; }>({ id: 'publish:gitlab', description: @@ -92,6 +93,12 @@ export function createPublishGitlabAction(options: { type: 'string', description: 'The token to use for authorization to GitLab', }, + setUserAsOwner: { + title: 'Set User As Owner', + type: 'boolean', + description: + 'Set the token user as owner of the newly created repository. Requires a token authorized to do the edit in the integration configuration for the matching host', + }, }, }, output: { @@ -116,6 +123,7 @@ export function createPublishGitlabAction(options: { gitCommitMessage = 'initial commit', gitAuthorName, gitAuthorEmail, + setUserAsOwner = false, } = ctx.input; const { owner, repo, host } = parseRepoUrl(repoUrl, integrations); @@ -149,19 +157,29 @@ export function createPublishGitlabAction(options: { id: number; }; + const { id: userId } = (await client.Users.current()) as { + id: number; + }; + if (!targetNamespace) { - const { id } = (await client.Users.current()) as { - id: number; - }; - targetNamespace = id; + targetNamespace = userId; } - const { http_url_to_repo } = await client.Projects.create({ + const { id: projectId, http_url_to_repo } = await client.Projects.create({ namespace_id: targetNamespace, name: repo, visibility: repoVisibility, }); + if (setUserAsOwner && integrationConfig.config.token) { + const adminClient = new Gitlab({ + host: integrationConfig.config.baseUrl, + ['token']: integrationConfig.config.token, + }); + + await adminClient.ProjectMembers.add(projectId, userId, 50); + } + const remoteUrl = (http_url_to_repo as string).replace(/\.git$/, ''); const repoContentsUrl = `${remoteUrl}/-/blob/${defaultBranch}`; From af02f5448353313f511e89be40c86bdeef1571e6 Mon Sep 17 00:00:00 2001 From: Matteo Silvestri Date: Thu, 30 Jun 2022 17:07:05 +0200 Subject: [PATCH 105/231] add changeset Signed-off-by: Matteo Silvestri --- .changeset/pink-cars-pretend.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/pink-cars-pretend.md diff --git a/.changeset/pink-cars-pretend.md b/.changeset/pink-cars-pretend.md new file mode 100644 index 0000000000..d2350b4de2 --- /dev/null +++ b/.changeset/pink-cars-pretend.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +new setUserAsOwner flag for publish:gitlab action From 3ba68057fba8f46b70be8bb0b1edd6a1e7337375 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 15:12:48 +0000 Subject: [PATCH 106/231] fix(deps): update dependency @react-hookz/web to v14.5.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 7550d34558..a06b7e2bd4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5263,9 +5263,9 @@ "@react-hookz/deep-equal" "^1.0.1" "@react-hookz/web@^14.0.0": - version "14.4.0" - resolved "https://registry.npmjs.org/@react-hookz/web/-/web-14.4.0.tgz#8c5003d2ee243e4f628ca7f69a6975a4c1a84713" - integrity sha512-MZUeiC/xCg30yBVfV3LS4gtQUngVb/r0xhaeGKk+Bx5ZaJOhHQ8kuduXP13RmbzpehJk2e1TL0oZsTofzT7QJQ== + version "14.5.0" + resolved "https://registry.npmjs.org/@react-hookz/web/-/web-14.5.0.tgz#174804687176956310faeaedc02077272753ae49" + integrity sha512-YEdyRc3Wbs2IEJTEKYQr56+txGE6kMnLxSRiPawUoJbhAzMAS+14xhCr4iUEyBTS3Q4xdI/32w9ls3gK8FQgBw== dependencies: "@react-hookz/deep-equal" "^1.0.2" From 58fd5ee9d5929d52883ebde13188c0da5b30282e Mon Sep 17 00:00:00 2001 From: Stein Welberg Date: Thu, 30 Jun 2022 17:30:55 +0200 Subject: [PATCH 107/231] Add missing installation steps Signed-off-by: Stein Welberg --- .changeset/shiny-seahorses-do.md | 5 +++++ plugins/badges-backend/README.md | 38 ++++++++++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 .changeset/shiny-seahorses-do.md diff --git a/.changeset/shiny-seahorses-do.md b/.changeset/shiny-seahorses-do.md new file mode 100644 index 0000000000..06892900bf --- /dev/null +++ b/.changeset/shiny-seahorses-do.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-badges-backend': patch +--- + +Add missing installation instructions diff --git a/plugins/badges-backend/README.md b/plugins/badges-backend/README.md index bdbfac3fa5..4f2f1ef96c 100644 --- a/plugins/badges-backend/README.md +++ b/plugins/badges-backend/README.md @@ -11,8 +11,14 @@ endpoint. ## Installation -Install the `@backstage/plugin-badges-backend` package in your backend package, -and then integrate the plugin using the following default setup for +Install the `@backstage/plugin-badges-backend` package in your backend package: + +```bash +# From your Backstage root directory +yarn add --cwd packages/backend @backstage/plugin-badges-backend +``` + +Add the plugin using the following default setup for `src/plugins/badges.ts`: ```ts @@ -39,6 +45,34 @@ the badges-backend `createRouter()` to forward to the default badge builder. To customize the available badges, provide a custom set of badge factories. See further down for an example of a custom badge factories function. +Finally, you have to make the following changes in `src/index.ts`: + +```ts +// 1. importing the plugin +import badges from './plugins/badges'; + +... + +const config = await loadBackendConfig({ + argv: process.argv, + logger: rootLogger, +}); +const createEnv = makeCreateEnv(config); + + ... + // 2. Create a PluginEnvironment for the Badges plugin + const badgesEnv = useHotMemoize(module, () => createEnv('badges')); + + ... + + const apiRouter = Router(); + ... + // 3. Register the badges plugin in the router + apiRouter.use('/badges', await badges(badgesEnv)); + ... + apiRouter.use(notFoundHandler()); +``` + ## Badge builder Badges are created by classes implementing the `BadgeBuilder` type. The default From dcf9d886e07e1508ef9820f39126418c19be4248 Mon Sep 17 00:00:00 2001 From: Matteo Silvestri Date: Thu, 30 Jun 2022 17:34:22 +0200 Subject: [PATCH 108/231] edit changeset Signed-off-by: Matteo Silvestri --- .changeset/pink-cars-pretend.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.changeset/pink-cars-pretend.md b/.changeset/pink-cars-pretend.md index d2350b4de2..c46cb99f55 100644 --- a/.changeset/pink-cars-pretend.md +++ b/.changeset/pink-cars-pretend.md @@ -3,3 +3,5 @@ --- new setUserAsOwner flag for publish:gitlab action + +The field default is `false`. When true it will use the token configured in the gitlab integration for the matching host, to try and set the user logged in via `repoUrlPicker` `requestUserCredentials` OAuth flow as owner of the repository created in GitLab. From 705af5b407b84150d20d962adb4d8ad19bdeac3b Mon Sep 17 00:00:00 2001 From: Stein Welberg Date: Thu, 30 Jun 2022 17:37:07 +0200 Subject: [PATCH 109/231] Grammar improvement Signed-off-by: Stein Welberg --- plugins/badges-backend/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/badges-backend/README.md b/plugins/badges-backend/README.md index 4f2f1ef96c..63e43c6692 100644 --- a/plugins/badges-backend/README.md +++ b/plugins/badges-backend/README.md @@ -48,7 +48,7 @@ further down for an example of a custom badge factories function. Finally, you have to make the following changes in `src/index.ts`: ```ts -// 1. importing the plugin +// 1. import the plugin import badges from './plugins/badges'; ... From d7c397db55cfcf7bc64740ce5f257ba341173f99 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 16:10:30 +0000 Subject: [PATCH 110/231] fix(deps): update dependency @react-hookz/web to v14.5.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 a06b7e2bd4..434fe8bd9b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5263,9 +5263,9 @@ "@react-hookz/deep-equal" "^1.0.1" "@react-hookz/web@^14.0.0": - version "14.5.0" - resolved "https://registry.npmjs.org/@react-hookz/web/-/web-14.5.0.tgz#174804687176956310faeaedc02077272753ae49" - integrity sha512-YEdyRc3Wbs2IEJTEKYQr56+txGE6kMnLxSRiPawUoJbhAzMAS+14xhCr4iUEyBTS3Q4xdI/32w9ls3gK8FQgBw== + version "14.6.0" + resolved "https://registry.npmjs.org/@react-hookz/web/-/web-14.6.0.tgz#8b3824841ee679b23516aa9b316e819e55590a1c" + integrity sha512-4ZQU4wsNd4QsMe4LkF9t1y4NS2cCp1N/JfG9TYw1dsWLOJhZ0w+4ebp7cydN5BLeceIaILcfQ7fBYUvrBJN6EA== dependencies: "@react-hookz/deep-equal" "^1.0.2" From 714591a2305b058cfe8ba60e5d2ade9549fcecd0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 16:12:02 +0000 Subject: [PATCH 111/231] fix(deps): update dependency google-auth-library to v8.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 a06b7e2bd4..b56f04b458 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13997,9 +13997,9 @@ google-auth-library@^7.14.0: lru-cache "^6.0.0" google-auth-library@^8.0.0, google-auth-library@^8.0.1, google-auth-library@^8.0.2: - version "8.0.3" - resolved "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.0.3.tgz#1e780430632d03df36dc22a3f5c89dbc251f2105" - integrity sha512-1eC6yaCrPfkv3bwtb3e0AOct7E7xR/uikDyXNo/j8Wd6a1ldRgAey5FmaDGNJnHNDPLtDiENQLYsA69eXOF5sA== + version "8.1.0" + resolved "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.1.0.tgz#879e8d2e90a9d47e6eab32fd1d5fd9ed52d7d441" + integrity sha512-J/fNXEnqLgbr3kmeUshZCtHQia6ZiNbbrebVzpt/+LTeY6Ka9CtbQvloTjVGVO7nyYbs0KYeuIwgUC/t2Gp1Jw== dependencies: arrify "^2.0.0" base64-js "^1.3.0" From a274fe38b9351ba91ff1003cfe97e4646d720d5d Mon Sep 17 00:00:00 2001 From: David Weber Date: Mon, 27 Jun 2022 22:58:57 +0200 Subject: [PATCH 112/231] feat: add hidden title column to catalog and API table to enable filtering by title Signed-off-by: David Weber --- .changeset/silly-geese-design.md | 6 ++++++ .../ApiExplorerPage/DefaultApiExplorerPage.tsx | 1 + plugins/catalog/api-report.md | 7 +++++++ .../src/components/CatalogTable/CatalogTable.tsx | 1 + .../catalog/src/components/CatalogTable/columns.tsx | 10 ++++++++++ 5 files changed, 25 insertions(+) create mode 100644 .changeset/silly-geese-design.md diff --git a/.changeset/silly-geese-design.md b/.changeset/silly-geese-design.md new file mode 100644 index 0000000000..d4f8de2510 --- /dev/null +++ b/.changeset/silly-geese-design.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-api-docs': patch +'@backstage/plugin-catalog': minor +--- + +Add hidden title column to catalog and API table to enable filtering by title. diff --git a/plugins/api-docs/src/components/ApiExplorerPage/DefaultApiExplorerPage.tsx b/plugins/api-docs/src/components/ApiExplorerPage/DefaultApiExplorerPage.tsx index 9fc6b2c3c2..b0acd3567c 100644 --- a/plugins/api-docs/src/components/ApiExplorerPage/DefaultApiExplorerPage.tsx +++ b/plugins/api-docs/src/components/ApiExplorerPage/DefaultApiExplorerPage.tsx @@ -40,6 +40,7 @@ import React from 'react'; import { registerComponentRouteRef } from '../../routes'; const defaultColumns: TableColumn[] = [ + CatalogTable.columns.createTitleColumn({ hidden: true }), CatalogTable.columns.createNameColumn({ defaultKind: 'API' }), CatalogTable.columns.createSystemColumn(), CatalogTable.columns.createOwnerColumn(), diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md index 0d2d611412..c5ee52df5c 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/api-report.md @@ -136,6 +136,13 @@ export const CatalogTable: { createSpecLifecycleColumn(): TableColumn; createMetadataDescriptionColumn(): TableColumn; createTagsColumn(): TableColumn; + createTitleColumn( + options?: + | { + hidden?: boolean | undefined; + } + | undefined, + ): TableColumn; }>; }; diff --git a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx index 94ae7c47f4..96937c52c2 100644 --- a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx +++ b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx @@ -68,6 +68,7 @@ export const CatalogTable = (props: CatalogTableProps) => { const defaultColumns: TableColumn[] = useMemo(() => { return [ + columnFactories.createTitleColumn({ hidden: true }), columnFactories.createNameColumn({ defaultKind: filters.kind?.value }), ...createEntitySpecificColumns(), columnFactories.createMetadataDescriptionColumn(), diff --git a/plugins/catalog/src/components/CatalogTable/columns.tsx b/plugins/catalog/src/components/CatalogTable/columns.tsx index 0fb91d4f3f..d8b52e276e 100644 --- a/plugins/catalog/src/components/CatalogTable/columns.tsx +++ b/plugins/catalog/src/components/CatalogTable/columns.tsx @@ -131,4 +131,14 @@ export const columnFactories = Object.freeze({ ), }; }, + createTitleColumn(options?: { + hidden?: boolean; + }): TableColumn { + return { + title: 'Title', + field: 'entity.metadata.title', + hidden: options?.hidden, + searchable: true, + }; + }, }); From ad3326c66e8ca0fa067ab445ae9769c53e140bb5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 17:18:15 +0000 Subject: [PATCH 113/231] fix(deps): update dependency graphiql to v1.9.10 Signed-off-by: Renovate Bot --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 434fe8bd9b..dc22c47c33 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2348,10 +2348,10 @@ teeny-request "^8.0.0" uuid "^8.0.0" -"@graphiql/react@^0.4.2": - version "0.4.2" - resolved "https://registry.npmjs.org/@graphiql/react/-/react-0.4.2.tgz#2a12c7cf0f3945022c2231ce4e814561f2363ef7" - integrity sha512-Df2BaA0HGRkzETCaUw4ZSDe///sfIAGZ6H436A08hmg7SU3yoWJboWGWGc/QD2NyBKVgVBMmzmHcgWhsYh03EA== +"@graphiql/react@^0.4.3": + version "0.4.3" + resolved "https://registry.npmjs.org/@graphiql/react/-/react-0.4.3.tgz#29ca3125c7a349de5e9beb2aef660137fbcbde2e" + integrity sha512-MnH+7LqRqFnwo8YBDtgDfJOdeS5QqNTzH2gTvTbEYYWaNQW1+Vhbsyu2RKHnPSgKVQlfLzdjw6SAMtSb3q1Qog== dependencies: "@graphiql/toolkit" "^0.6.0" codemirror "^5.65.3" @@ -14135,11 +14135,11 @@ grapheme-splitter@^1.0.4: integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== graphiql@^1.5.12, graphiql@^1.8.8: - version "1.9.9" - resolved "https://registry.npmjs.org/graphiql/-/graphiql-1.9.9.tgz#dfc1760e7552140247e591e3c66d1ccc389ea71f" - integrity sha512-eJ5kGpXFXw69QG/1SJrQs/mzGpDIv4XeGqohGSKQCOh7NtsAsQIxs/VMVR8Lvv9tx6YiIFUvAHp997NlyOwHbQ== + version "1.9.10" + resolved "https://registry.npmjs.org/graphiql/-/graphiql-1.9.10.tgz#ba7113ed8b1bc988d00d8d7cc51901b51b684bde" + integrity sha512-uYYK/zBTV9Y/IHw4uopGVRusbF2xmPnptx7OMFTnTHOTQOmzfIGRTn58WuPgevyEi+9zSLojM86lot9xvNA1/w== dependencies: - "@graphiql/react" "^0.4.2" + "@graphiql/react" "^0.4.3" "@graphiql/toolkit" "^0.6.0" entities "^2.0.0" graphql-language-service "^5.0.6" From 816d4ab03d55afa6ae66f511e2a3b85f3701e8f5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 17:21:11 +0000 Subject: [PATCH 114/231] fix(deps): update dependency testcontainers to v8.11.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 434fe8bd9b..081c7a8b9d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24611,9 +24611,9 @@ test-exclude@^6.0.0: minimatch "^3.0.4" testcontainers@^8.1.2: - version "8.10.1" - resolved "https://registry.npmjs.org/testcontainers/-/testcontainers-8.10.1.tgz#2b3d1d25932f437ba4c46a1f32380ce7987629f8" - integrity sha512-MQFoWe6sJrbcZqXb+fM7uN2w9WnV2KZnNyI7Qc9pbxQZS6oLa/or5kgL4DADAuzYFxXJvL3f8inIGI+/1S+rvA== + version "8.11.0" + resolved "https://registry.npmjs.org/testcontainers/-/testcontainers-8.11.0.tgz#f19307557289b7e80c7e1d65b39ab0054a2b2549" + integrity sha512-sc9FA40waYXKVTp/Dm9qmcc8I5/TLyZd+JxtnYjIQDp1UvLzAckQPjSlGCDTdM00J2X4KDwG0+jY+8WprZbpnQ== dependencies: "@balena/dockerignore" "^1.0.2" "@types/archiver" "^5.3.1" From 3cf7afae083e3f5f3ab2e1b0c17d5ec83ebeacc1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 18:15:26 +0000 Subject: [PATCH 115/231] fix(deps): update dependency winston to v3.8.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 081c7a8b9d..10cf622edc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26165,9 +26165,9 @@ winston-transport@^4.5.0: triple-beam "^1.3.0" winston@^3.2.1, winston@^3.7.2: - version "3.7.2" - resolved "https://registry.npmjs.org/winston/-/winston-3.7.2.tgz#95b4eeddbec902b3db1424932ac634f887c400b1" - integrity sha512-QziIqtojHBoyzUOdQvQiar1DH0Xp9nF1A1y7NVy2DGEsz82SBDtOalS0ulTRGVT14xPX3WRWkCsdcJKqNflKng== + version "3.8.0" + resolved "https://registry.npmjs.org/winston/-/winston-3.8.0.tgz#4fc8656829dcfdab3c38f558eab785eea38a5328" + integrity sha512-Iix1w8rIq2kBDkGvclO0db2CVOHYVamCIkVWcUbs567G9i2pdB+gvqLgDgxx4B4HXHYD6U4Zybh6ojepUOqcFQ== dependencies: "@dabh/diagnostics" "^2.0.2" async "^3.2.3" From 0ac0eb67bc4ec7ad6cf781fa267290131a796885 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 18:16:17 +0000 Subject: [PATCH 116/231] fix(deps): update typescript-eslint monorepo to v5.30.0 Signed-off-by: Renovate Bot --- yarn.lock | 90 +++++++++++++++++++++++++++---------------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/yarn.lock b/yarn.lock index 081c7a8b9d..8e1c31260c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7245,13 +7245,13 @@ integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== "@typescript-eslint/eslint-plugin@^5.9.0": - version "5.29.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz#c67794d2b0fd0b4a47f50266088acdc52a08aab6" - integrity sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w== + version "5.30.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz#524a11e15c09701733033c96943ecf33f55d9ca1" + integrity sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow== dependencies: - "@typescript-eslint/scope-manager" "5.29.0" - "@typescript-eslint/type-utils" "5.29.0" - "@typescript-eslint/utils" "5.29.0" + "@typescript-eslint/scope-manager" "5.30.0" + "@typescript-eslint/type-utils" "5.30.0" + "@typescript-eslint/utils" "5.30.0" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -7272,13 +7272,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^5.9.0": - version "5.29.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.29.0.tgz#41314b195b34d44ff38220caa55f3f93cfca43cf" - integrity sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw== + version "5.30.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.0.tgz#a2184fb5f8ef2bf1db0ae61a43907e2e32aa1b8f" + integrity sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA== dependencies: - "@typescript-eslint/scope-manager" "5.29.0" - "@typescript-eslint/types" "5.29.0" - "@typescript-eslint/typescript-estree" "5.29.0" + "@typescript-eslint/scope-manager" "5.30.0" + "@typescript-eslint/types" "5.30.0" + "@typescript-eslint/typescript-estree" "5.30.0" debug "^4.3.4" "@typescript-eslint/scope-manager@5.20.0": @@ -7289,13 +7289,13 @@ "@typescript-eslint/types" "5.20.0" "@typescript-eslint/visitor-keys" "5.20.0" -"@typescript-eslint/scope-manager@5.29.0": - version "5.29.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz#2a6a32e3416cb133e9af8dcf54bf077a916aeed3" - integrity sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA== +"@typescript-eslint/scope-manager@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz#bf585ee801ab4ad84db2f840174e171a6bb002c7" + integrity sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ== dependencies: - "@typescript-eslint/types" "5.29.0" - "@typescript-eslint/visitor-keys" "5.29.0" + "@typescript-eslint/types" "5.30.0" + "@typescript-eslint/visitor-keys" "5.30.0" "@typescript-eslint/scope-manager@5.9.0": version "5.9.0" @@ -7305,12 +7305,12 @@ "@typescript-eslint/types" "5.9.0" "@typescript-eslint/visitor-keys" "5.9.0" -"@typescript-eslint/type-utils@5.29.0": - version "5.29.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz#241918001d164044020b37d26d5b9f4e37cc3d5d" - integrity sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg== +"@typescript-eslint/type-utils@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz#98f3af926a5099153f092d4dad87148df21fbaae" + integrity sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg== dependencies: - "@typescript-eslint/utils" "5.29.0" + "@typescript-eslint/utils" "5.30.0" debug "^4.3.4" tsutils "^3.21.0" @@ -7319,10 +7319,10 @@ resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.20.0.tgz#fa39c3c2aa786568302318f1cb51fcf64258c20c" integrity sha512-+d8wprF9GyvPwtoB4CxBAR/s0rpP25XKgnOvMf/gMXYDvlUC3rPFHupdTQ/ow9vn7UDe5rX02ovGYQbv/IUCbg== -"@typescript-eslint/types@5.29.0": - version "5.29.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz#7861d3d288c031703b2d97bc113696b4d8c19aab" - integrity sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg== +"@typescript-eslint/types@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.0.tgz#db7d81d585a3da3801432a9c1d2fafbff125e110" + integrity sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag== "@typescript-eslint/types@5.9.0": version "5.9.0" @@ -7342,13 +7342,13 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.29.0": - version "5.29.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz#e83d19aa7fd2e74616aab2f25dfbe4de4f0b5577" - integrity sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ== +"@typescript-eslint/typescript-estree@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz#4565ee8a6d2ac368996e20b2344ea0eab1a8f0bb" + integrity sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw== dependencies: - "@typescript-eslint/types" "5.29.0" - "@typescript-eslint/visitor-keys" "5.29.0" + "@typescript-eslint/types" "5.30.0" + "@typescript-eslint/visitor-keys" "5.30.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -7368,15 +7368,15 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/utils@5.29.0": - version "5.29.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz#775046effd5019667bd086bcf326acbe32cd0082" - integrity sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A== +"@typescript-eslint/utils@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.0.tgz#1dac771fead5eab40d31860716de219356f5f754" + integrity sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.29.0" - "@typescript-eslint/types" "5.29.0" - "@typescript-eslint/typescript-estree" "5.29.0" + "@typescript-eslint/scope-manager" "5.30.0" + "@typescript-eslint/types" "5.30.0" + "@typescript-eslint/typescript-estree" "5.30.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -7400,12 +7400,12 @@ "@typescript-eslint/types" "5.20.0" eslint-visitor-keys "^3.0.0" -"@typescript-eslint/visitor-keys@5.29.0": - version "5.29.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz#7a4749fa7ef5160c44a451bf060ac1dc6dfb77ee" - integrity sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ== +"@typescript-eslint/visitor-keys@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz#07721d23daca2ec4c2da7f1e660d41cd78bacac3" + integrity sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw== dependencies: - "@typescript-eslint/types" "5.29.0" + "@typescript-eslint/types" "5.30.0" eslint-visitor-keys "^3.3.0" "@typescript-eslint/visitor-keys@5.9.0": From 2bb915d8add2ed2130cbdde20242e0a575805710 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 19:11:21 +0000 Subject: [PATCH 117/231] chore(deps): update dependency @types/jest-when to v3.5.2 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d65223713f..c059756064 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6420,9 +6420,9 @@ "@types/node" "*" "@types/jest-when@^3.5.0": - version "3.5.1" - resolved "https://registry.npmjs.org/@types/jest-when/-/jest-when-3.5.1.tgz#296a0d62b576615046773daf123d518b10adee32" - integrity sha512-8pzJWwU4h7KyCgwAB2Hs9xuy+a1YgVcdh0vE4LT4DZx5Yo7rFO9FAPIsSORVBVCk8QfjuGZaaU9HTTh3mJnEAg== + version "3.5.2" + resolved "https://registry.npmjs.org/@types/jest-when/-/jest-when-3.5.2.tgz#7e6225e827267d26f115dc97da6403a3b37556c5" + integrity sha512-1WP+wJDW7h4TYAVLoIebxRIVv8GPk66Qsq2nU7PkwKZ6usurnDQZgk0DfBNKAJ9gVzapCXSV53Vn/3nBHBNzAw== dependencies: "@types/jest" "*" From 3e032a5de26eb406031804c818112f1f9bd59e8b Mon Sep 17 00:00:00 2001 From: Andrew Thauer Date: Tue, 28 Jun 2022 19:42:52 -0400 Subject: [PATCH 118/231] refactor: create cost-insights-common isomorphic package This moves most of the cost-insights API types into a separate isomorphic @backstage/plugin-cost-insights-common package. This will allow these types to be used by a a cost-insights backend or other product specific modules. Signed-off-by: Andrew Thauer --- .changeset/afraid-flies-try.md | 7 + plugins/cost-insights-common/.eslintrc.js | 1 + plugins/cost-insights-common/CHANGELOG.md | 1 + plugins/cost-insights-common/README.md | 8 + plugins/cost-insights-common/api-report.md | 185 +++++++++++++++++ plugins/cost-insights-common/package.json | 42 ++++ plugins/cost-insights-common/src/index.ts | 23 +++ .../cost-insights-common/src/setupTests.ts | 17 ++ .../src/types/ChangeStatistic.ts | 24 +++ .../src/types/ChartData.ts} | 0 .../src/types/Cost.ts | 0 .../src/types/Currency.ts | 23 +++ .../src/types/DateAggregation.ts | 0 .../src/types/Duration.ts | 28 +++ .../src/types/Entity.ts | 0 .../src/types/Filters.ts | 0 .../src/types/Group.ts | 0 .../src/types/Maybe.ts | 0 .../src/types/Metric.ts | 0 .../src/types/MetricData.ts | 0 .../src/types/Product.ts | 0 .../src/types/Project.ts | 0 .../src/types/Trendline.ts | 0 .../cost-insights-common/src/types/index.ts | 31 +++ plugins/cost-insights/api-report.md | 193 ++---------------- plugins/cost-insights/package.json | 1 + plugins/cost-insights/src/types/Alert.ts | 9 +- .../src/types/ChangeStatistic.ts | 9 - plugins/cost-insights/src/types/Currency.ts | 8 - plugins/cost-insights/src/types/Duration.ts | 13 -- plugins/cost-insights/src/types/index.ts | 19 +- 31 files changed, 416 insertions(+), 226 deletions(-) create mode 100644 .changeset/afraid-flies-try.md create mode 100644 plugins/cost-insights-common/.eslintrc.js create mode 100644 plugins/cost-insights-common/CHANGELOG.md create mode 100644 plugins/cost-insights-common/README.md create mode 100644 plugins/cost-insights-common/api-report.md create mode 100644 plugins/cost-insights-common/package.json create mode 100644 plugins/cost-insights-common/src/index.ts create mode 100644 plugins/cost-insights-common/src/setupTests.ts create mode 100644 plugins/cost-insights-common/src/types/ChangeStatistic.ts rename plugins/{cost-insights/src/types/ChartData.tsx => cost-insights-common/src/types/ChartData.ts} (100%) rename plugins/{cost-insights => cost-insights-common}/src/types/Cost.ts (100%) create mode 100644 plugins/cost-insights-common/src/types/Currency.ts rename plugins/{cost-insights => cost-insights-common}/src/types/DateAggregation.ts (100%) create mode 100644 plugins/cost-insights-common/src/types/Duration.ts rename plugins/{cost-insights => cost-insights-common}/src/types/Entity.ts (100%) rename plugins/{cost-insights => cost-insights-common}/src/types/Filters.ts (100%) rename plugins/{cost-insights => cost-insights-common}/src/types/Group.ts (100%) rename plugins/{cost-insights => cost-insights-common}/src/types/Maybe.ts (100%) rename plugins/{cost-insights => cost-insights-common}/src/types/Metric.ts (100%) rename plugins/{cost-insights => cost-insights-common}/src/types/MetricData.ts (100%) rename plugins/{cost-insights => cost-insights-common}/src/types/Product.ts (100%) rename plugins/{cost-insights => cost-insights-common}/src/types/Project.ts (100%) rename plugins/{cost-insights => cost-insights-common}/src/types/Trendline.ts (100%) create mode 100644 plugins/cost-insights-common/src/types/index.ts diff --git a/.changeset/afraid-flies-try.md b/.changeset/afraid-flies-try.md new file mode 100644 index 0000000000..15d2e3942c --- /dev/null +++ b/.changeset/afraid-flies-try.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-cost-insights': patch +--- + +Move cost-insights data specific API types (non react) into an @backstage/plugin-cost-insights-common +isomorphic package. This allows these types to be shared in any backend packages or other cost-insight +modules. diff --git a/plugins/cost-insights-common/.eslintrc.js b/plugins/cost-insights-common/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/cost-insights-common/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/cost-insights-common/CHANGELOG.md b/plugins/cost-insights-common/CHANGELOG.md new file mode 100644 index 0000000000..d958aaa41b --- /dev/null +++ b/plugins/cost-insights-common/CHANGELOG.md @@ -0,0 +1 @@ +# @backstage/plugin-cost-insights-common diff --git a/plugins/cost-insights-common/README.md b/plugins/cost-insights-common/README.md new file mode 100644 index 0000000000..5140701987 --- /dev/null +++ b/plugins/cost-insights-common/README.md @@ -0,0 +1,8 @@ +# Cost Insights Common + +Shared isomorphic code for the cost-insights plugin. + +## Links + +- [Frontend part of the plugin](https://github.com/backstage/backstage/tree/master/plugins/cost-insights) +- [The Backstage homepage](https://backstage.io) diff --git a/plugins/cost-insights-common/api-report.md b/plugins/cost-insights-common/api-report.md new file mode 100644 index 0000000000..af95e8765b --- /dev/null +++ b/plugins/cost-insights-common/api-report.md @@ -0,0 +1,185 @@ +## API Report File for "@backstage/plugin-cost-insights-common" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +// Warning: (ae-missing-release-tag) "ChangeStatistic" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ChangeStatistic { + // (undocumented) + amount: number; + // (undocumented) + ratio?: number; +} + +// Warning: (ae-missing-release-tag) "ChartData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ChartData = { + date: number; + trend: number; + dailyCost: number; + [key: string]: number; +}; + +// Warning: (ae-missing-release-tag) "Cost" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface Cost { + // (undocumented) + aggregation: DateAggregation[]; + // (undocumented) + change?: ChangeStatistic; + // (undocumented) + groupedCosts?: Record; + // (undocumented) + id: string; + // (undocumented) + trendline?: Trendline; +} + +// Warning: (ae-missing-release-tag) "Currency" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface Currency { + // (undocumented) + kind: string | null; + // (undocumented) + label: string; + // (undocumented) + prefix?: string; + // (undocumented) + rate?: number; + // (undocumented) + unit: string; +} + +// Warning: (ae-missing-release-tag) "DateAggregation" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type DateAggregation = { + date: string; + amount: number; +}; + +// Warning: (ae-missing-release-tag) "Duration" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export enum Duration { + // (undocumented) + P30D = 'P30D', + // (undocumented) + P3M = 'P3M', + // (undocumented) + P7D = 'P7D', + // (undocumented) + P90D = 'P90D', +} + +// Warning: (ae-missing-release-tag) "Entity" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface Entity { + // (undocumented) + aggregation: [number, number]; + // (undocumented) + change: ChangeStatistic; + // (undocumented) + entities: Record; + // (undocumented) + id: Maybe; +} + +// Warning: (ae-missing-release-tag) "Group" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type Group = { + id: string; +}; + +// Warning: (ae-missing-release-tag) "Maybe" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type Maybe = T | null; + +// Warning: (ae-missing-release-tag) "Metric" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type Metric = { + kind: string; + name: string; + default: boolean; +}; + +// Warning: (ae-missing-release-tag) "MetricData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface MetricData { + // (undocumented) + aggregation: DateAggregation[]; + // (undocumented) + change: ChangeStatistic; + // (undocumented) + format: 'number' | 'currency'; + // (undocumented) + id: string; +} + +// Warning: (ae-missing-release-tag) "PageFilters" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface PageFilters { + // (undocumented) + duration: Duration; + // (undocumented) + group: Maybe; + // (undocumented) + metric: string | null; + // (undocumented) + project: Maybe; +} + +// Warning: (ae-missing-release-tag) "Product" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface Product { + // (undocumented) + kind: string; + // (undocumented) + name: string; +} + +// Warning: (ae-missing-release-tag) "ProductFilters" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ProductFilters = Array; + +// Warning: (ae-missing-release-tag) "ProductPeriod" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ProductPeriod { + // (undocumented) + duration: Duration; + // (undocumented) + productType: string; +} + +// Warning: (ae-missing-release-tag) "Project" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface Project { + // (undocumented) + id: string; + // (undocumented) + name?: string; +} + +// Warning: (ae-missing-release-tag) "Trendline" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type Trendline = { + slope: number; + intercept: number; +}; +``` diff --git a/plugins/cost-insights-common/package.json b/plugins/cost-insights-common/package.json new file mode 100644 index 0000000000..e950063efb --- /dev/null +++ b/plugins/cost-insights-common/package.json @@ -0,0 +1,42 @@ +{ + "name": "@backstage/plugin-cost-insights-common", + "description": "Common functionalities for the cost-insights plugin", + "version": "0.0.1", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "private": false, + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "module": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "common-library" + }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/cost-insights-common" + }, + "keywords": [ + "backstage" + ], + "scripts": { + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack", + "clean": "backstage-cli package clean" + }, + "dependencies": {}, + "devDependencies": { + "@backstage/cli": "^0.18.0-next.1" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/cost-insights-common/src/index.ts b/plugins/cost-insights-common/src/index.ts new file mode 100644 index 0000000000..c3c76ccf17 --- /dev/null +++ b/plugins/cost-insights-common/src/index.ts @@ -0,0 +1,23 @@ +/* + * 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. + */ + +/** + * Provides shared objects useful for interacting with the cost-insights plugin. + * + * @packageDocumentation + */ + +export * from './types'; diff --git a/plugins/cost-insights-common/src/setupTests.ts b/plugins/cost-insights-common/src/setupTests.ts new file mode 100644 index 0000000000..813cdeaae3 --- /dev/null +++ b/plugins/cost-insights-common/src/setupTests.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export {}; diff --git a/plugins/cost-insights-common/src/types/ChangeStatistic.ts b/plugins/cost-insights-common/src/types/ChangeStatistic.ts new file mode 100644 index 0000000000..079d9bcb07 --- /dev/null +++ b/plugins/cost-insights-common/src/types/ChangeStatistic.ts @@ -0,0 +1,24 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface ChangeStatistic { + // The ratio of change from one duration to another, expressed as: (newSum - oldSum) / oldSum + // If a ratio cannot be calculated - such as when a new or old sum is zero, + // the ratio can be omitted and where applicable, ∞ or -∞ will display based on amount. + ratio?: number; + // The actual USD change between time periods (can be negative if costs decreased) + amount: number; +} diff --git a/plugins/cost-insights/src/types/ChartData.tsx b/plugins/cost-insights-common/src/types/ChartData.ts similarity index 100% rename from plugins/cost-insights/src/types/ChartData.tsx rename to plugins/cost-insights-common/src/types/ChartData.ts diff --git a/plugins/cost-insights/src/types/Cost.ts b/plugins/cost-insights-common/src/types/Cost.ts similarity index 100% rename from plugins/cost-insights/src/types/Cost.ts rename to plugins/cost-insights-common/src/types/Cost.ts diff --git a/plugins/cost-insights-common/src/types/Currency.ts b/plugins/cost-insights-common/src/types/Currency.ts new file mode 100644 index 0000000000..e82f0c9a52 --- /dev/null +++ b/plugins/cost-insights-common/src/types/Currency.ts @@ -0,0 +1,23 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface Currency { + kind: string | null; + label: string; + unit: string; + prefix?: string; + rate?: number; +} diff --git a/plugins/cost-insights/src/types/DateAggregation.ts b/plugins/cost-insights-common/src/types/DateAggregation.ts similarity index 100% rename from plugins/cost-insights/src/types/DateAggregation.ts rename to plugins/cost-insights-common/src/types/DateAggregation.ts diff --git a/plugins/cost-insights-common/src/types/Duration.ts b/plugins/cost-insights-common/src/types/Duration.ts new file mode 100644 index 0000000000..25806a3346 --- /dev/null +++ b/plugins/cost-insights-common/src/types/Duration.ts @@ -0,0 +1,28 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Time periods for cost comparison; slight abuse of ISO 8601 periods. We take P3M to mean + * 'last completed quarter', and P30D/P90D to be '[month|quarter] relative to today'. So if + * it's September 15, P3M represents costs for Q2 and P30D represents August 16 - + * September 15. + */ +export enum Duration { + P7D = 'P7D', + P30D = 'P30D', + P90D = 'P90D', + P3M = 'P3M', +} diff --git a/plugins/cost-insights/src/types/Entity.ts b/plugins/cost-insights-common/src/types/Entity.ts similarity index 100% rename from plugins/cost-insights/src/types/Entity.ts rename to plugins/cost-insights-common/src/types/Entity.ts diff --git a/plugins/cost-insights/src/types/Filters.ts b/plugins/cost-insights-common/src/types/Filters.ts similarity index 100% rename from plugins/cost-insights/src/types/Filters.ts rename to plugins/cost-insights-common/src/types/Filters.ts diff --git a/plugins/cost-insights/src/types/Group.ts b/plugins/cost-insights-common/src/types/Group.ts similarity index 100% rename from plugins/cost-insights/src/types/Group.ts rename to plugins/cost-insights-common/src/types/Group.ts diff --git a/plugins/cost-insights/src/types/Maybe.ts b/plugins/cost-insights-common/src/types/Maybe.ts similarity index 100% rename from plugins/cost-insights/src/types/Maybe.ts rename to plugins/cost-insights-common/src/types/Maybe.ts diff --git a/plugins/cost-insights/src/types/Metric.ts b/plugins/cost-insights-common/src/types/Metric.ts similarity index 100% rename from plugins/cost-insights/src/types/Metric.ts rename to plugins/cost-insights-common/src/types/Metric.ts diff --git a/plugins/cost-insights/src/types/MetricData.ts b/plugins/cost-insights-common/src/types/MetricData.ts similarity index 100% rename from plugins/cost-insights/src/types/MetricData.ts rename to plugins/cost-insights-common/src/types/MetricData.ts diff --git a/plugins/cost-insights/src/types/Product.ts b/plugins/cost-insights-common/src/types/Product.ts similarity index 100% rename from plugins/cost-insights/src/types/Product.ts rename to plugins/cost-insights-common/src/types/Product.ts diff --git a/plugins/cost-insights/src/types/Project.ts b/plugins/cost-insights-common/src/types/Project.ts similarity index 100% rename from plugins/cost-insights/src/types/Project.ts rename to plugins/cost-insights-common/src/types/Project.ts diff --git a/plugins/cost-insights/src/types/Trendline.ts b/plugins/cost-insights-common/src/types/Trendline.ts similarity index 100% rename from plugins/cost-insights/src/types/Trendline.ts rename to plugins/cost-insights-common/src/types/Trendline.ts diff --git a/plugins/cost-insights-common/src/types/index.ts b/plugins/cost-insights-common/src/types/index.ts new file mode 100644 index 0000000000..877ace8f5f --- /dev/null +++ b/plugins/cost-insights-common/src/types/index.ts @@ -0,0 +1,31 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './ChangeStatistic'; +export * from './ChartData'; +export * from './Cost'; +export * from './DateAggregation'; +export * from './Duration'; +export * from './Currency'; +export * from './Entity'; +export * from './Filters'; +export * from './Group'; +export * from './Maybe'; +export * from './MetricData'; +export * from './Metric'; +export * from './Product'; +export * from './Project'; +export * from './Trendline'; diff --git a/plugins/cost-insights/api-report.md b/plugins/cost-insights/api-report.md index 75e1315502..8bde5729e7 100644 --- a/plugins/cost-insights/api-report.md +++ b/plugins/cost-insights/api-report.md @@ -9,10 +9,21 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePalette } from '@backstage/theme'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { BackstageTheme } from '@backstage/theme'; +import { ChangeStatistic } from '@backstage/plugin-cost-insights-common'; import { ContentRenderer } from 'recharts'; +import { Cost } from '@backstage/plugin-cost-insights-common'; +import { Currency } from '@backstage/plugin-cost-insights-common'; import { Dispatch } from 'react'; +import { Duration } from '@backstage/plugin-cost-insights-common'; +import { Entity } from '@backstage/plugin-cost-insights-common'; import { ForwardRefExoticComponent } from 'react'; +import { Group } from '@backstage/plugin-cost-insights-common'; +import { Maybe } from '@backstage/plugin-cost-insights-common'; +import { Metric } from '@backstage/plugin-cost-insights-common'; +import { MetricData } from '@backstage/plugin-cost-insights-common'; import { PaletteOptions } from '@material-ui/core/styles/createPalette'; +import { Product } from '@backstage/plugin-cost-insights-common'; +import { Project } from '@backstage/plugin-cost-insights-common'; import { PropsWithChildren } from 'react'; import { ReactNode } from 'react'; import { RechartsFunction } from 'recharts'; @@ -269,16 +280,6 @@ export type BarChartTooltipProps = { actions?: ReactNode; }; -// Warning: (ae-missing-release-tag) "ChangeStatistic" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface ChangeStatistic { - // (undocumented) - amount: number; - // (undocumented) - ratio?: number; -} - // Warning: (ae-missing-release-tag) "ChangeThreshold" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -289,32 +290,6 @@ export enum ChangeThreshold { upper = 0.05, } -// Warning: (ae-missing-release-tag) "ChartData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type ChartData = { - date: number; - trend: number; - dailyCost: number; - [key: string]: number; -}; - -// Warning: (ae-missing-release-tag) "Cost" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface Cost { - // (undocumented) - aggregation: DateAggregation[]; - // (undocumented) - change?: ChangeStatistic; - // (undocumented) - groupedCosts?: Record; - // (undocumented) - id: string; - // (undocumented) - trendline?: Trendline; -} - // Warning: (ae-missing-release-tag) "CostGrowth" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -423,22 +398,6 @@ export interface CostInsightsThemeOptions extends PaletteOptions { palette: CostInsightsPaletteOptions; } -// Warning: (ae-missing-release-tag) "Currency" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface Currency { - // (undocumented) - kind: string | null; - // (undocumented) - label: string; - // (undocumented) - prefix?: string; - // (undocumented) - rate?: number; - // (undocumented) - unit: string; -} - // Warning: (ae-missing-release-tag) "CurrencyType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -465,52 +424,16 @@ export enum DataKey { Previous = 'previous', } -// Warning: (ae-missing-release-tag) "DateAggregation" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type DateAggregation = { - date: string; - amount: number; -}; - // Warning: (ae-missing-release-tag) "DEFAULT_DATE_FORMAT" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) export const DEFAULT_DATE_FORMAT = 'yyyy-LL-dd'; -// Warning: (ae-missing-release-tag) "Duration" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public -export enum Duration { - // (undocumented) - P30D = 'P30D', - // (undocumented) - P3M = 'P3M', - // (undocumented) - P7D = 'P7D', - // (undocumented) - P90D = 'P90D', -} - // Warning: (ae-missing-release-tag) "EngineerThreshold" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) export const EngineerThreshold = 0.5; -// Warning: (ae-missing-release-tag) "Entity" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface Entity { - // (undocumented) - aggregation: [number, number]; - // (undocumented) - change: ChangeStatistic; - // (undocumented) - entities: Record; - // (undocumented) - id: Maybe; -} - // Warning: (ae-missing-release-tag) "ExampleCostInsightsClient" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -533,13 +456,6 @@ export class ExampleCostInsightsClient implements CostInsightsApi { getUserGroups(userId: string): Promise; } -// Warning: (ae-missing-release-tag) "Group" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type Group = { - id: string; -}; - // Warning: (ae-missing-release-tag) "GrowthType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -602,34 +518,6 @@ export type LegendItemProps = { // @public (undocumented) export type Loading = Record; -// Warning: (ae-missing-release-tag) "Maybe" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type Maybe = T | null; - -// Warning: (ae-missing-release-tag) "Metric" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type Metric = { - kind: string; - name: string; - default: boolean; -}; - -// Warning: (ae-missing-release-tag) "MetricData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface MetricData { - // (undocumented) - aggregation: DateAggregation[]; - // (undocumented) - change: ChangeStatistic; - // (undocumented) - format: 'number' | 'currency'; - // (undocumented) - id: string; -} - // Warning: (ae-forgotten-export) The symbol "MockConfigProviderProps" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "MockConfigProvider" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -648,35 +536,6 @@ export const MockCurrencyProvider: ({ ...context }: MockCurrencyProviderProps) => JSX.Element; -// Warning: (ae-missing-release-tag) "PageFilters" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface PageFilters { - // (undocumented) - duration: Duration; - // (undocumented) - group: Maybe; - // (undocumented) - metric: string | null; - // (undocumented) - project: Maybe; -} - -// Warning: (ae-missing-release-tag) "Product" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface Product { - // (undocumented) - kind: string; - // (undocumented) - name: string; -} - -// Warning: (ae-missing-release-tag) "ProductFilters" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type ProductFilters = Array; - // Warning: (ae-missing-release-tag) "ProductInsightsOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -687,26 +546,6 @@ export type ProductInsightsOptions = { project: Maybe; }; -// Warning: (ae-missing-release-tag) "ProductPeriod" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface ProductPeriod { - // (undocumented) - duration: Duration; - // (undocumented) - productType: string; -} - -// Warning: (ae-missing-release-tag) "Project" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface Project { - // (undocumented) - id: string; - // (undocumented) - name?: string; -} - // Warning: (ae-missing-release-tag) "ProjectGrowthAlert" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @@ -763,14 +602,6 @@ export type TooltipItem = { value: string; }; -// Warning: (ae-missing-release-tag) "Trendline" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export type Trendline = { - slope: number; - intercept: number; -}; - // Warning: (ae-missing-release-tag) "UnlabeledDataflowAlert" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @@ -817,4 +648,6 @@ export interface UnlabeledDataflowData { // (undocumented) unlabeledCost: number; } + +export * from '@backstage/plugin-cost-insights-common'; ``` diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index e2555d961f..4801a2002b 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -38,6 +38,7 @@ "@backstage/config": "^1.0.1", "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", + "@backstage/plugin-cost-insights-common": "^0.0.1", "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", diff --git a/plugins/cost-insights/src/types/Alert.ts b/plugins/cost-insights/src/types/Alert.ts index 2f220be0e6..a04becada1 100644 --- a/plugins/cost-insights/src/types/Alert.ts +++ b/plugins/cost-insights/src/types/Alert.ts @@ -13,10 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { ForwardRefExoticComponent, RefAttributes } from 'react'; -import { ChangeStatistic } from './ChangeStatistic'; -import { Duration } from './Duration'; -import { Maybe } from './Maybe'; +import { + ChangeStatistic, + Duration, + Maybe, +} from '@backstage/plugin-cost-insights-common'; /** * Generic alert type with required fields for display. The `element` field will be rendered in diff --git a/plugins/cost-insights/src/types/ChangeStatistic.ts b/plugins/cost-insights/src/types/ChangeStatistic.ts index 6e85335a67..8264b23c8d 100644 --- a/plugins/cost-insights/src/types/ChangeStatistic.ts +++ b/plugins/cost-insights/src/types/ChangeStatistic.ts @@ -14,15 +14,6 @@ * limitations under the License. */ -export interface ChangeStatistic { - // The ratio of change from one duration to another, expressed as: (newSum - oldSum) / oldSum - // If a ratio cannot be calculated - such as when a new or old sum is zero, - // the ratio can be omitted and where applicable, ∞ or -∞ will display based on amount. - ratio?: number; - // The actual USD change between time periods (can be negative if costs decreased) - amount: number; -} - export const EngineerThreshold = 0.5; export enum ChangeThreshold { diff --git a/plugins/cost-insights/src/types/Currency.ts b/plugins/cost-insights/src/types/Currency.ts index 5cc5756dfc..0316e8f90e 100644 --- a/plugins/cost-insights/src/types/Currency.ts +++ b/plugins/cost-insights/src/types/Currency.ts @@ -14,14 +14,6 @@ * limitations under the License. */ -export interface Currency { - kind: string | null; - label: string; - unit: string; - prefix?: string; - rate?: number; -} - export enum CurrencyType { USD = 'USD', CarbonOffsetTons = 'CARBON_OFFSET_TONS', diff --git a/plugins/cost-insights/src/types/Duration.ts b/plugins/cost-insights/src/types/Duration.ts index 94297ac00a..c5d9c83f6e 100644 --- a/plugins/cost-insights/src/types/Duration.ts +++ b/plugins/cost-insights/src/types/Duration.ts @@ -14,17 +14,4 @@ * limitations under the License. */ -/** - * Time periods for cost comparison; slight abuse of ISO 8601 periods. We take P3M to mean - * 'last completed quarter', and P30D/P90D to be '[month|quarter] relative to today'. So if - * it's September 15, P3M represents costs for Q2 and P30D represents August 16 - - * September 15. - */ -export enum Duration { - P7D = 'P7D', - P30D = 'P30D', - P90D = 'P90D', - P3M = 'P3M', -} - export const DEFAULT_DATE_FORMAT = 'yyyy-LL-dd'; diff --git a/plugins/cost-insights/src/types/index.ts b/plugins/cost-insights/src/types/index.ts index 5f090cc7eb..b3a06f248d 100644 --- a/plugins/cost-insights/src/types/index.ts +++ b/plugins/cost-insights/src/types/index.ts @@ -14,22 +14,15 @@ * limitations under the License. */ +// @deprecated - use types from `@backstage/plugin-cost-insights-common` instead. +export * from '@backstage/plugin-cost-insights-common'; + +// TODO: Split some of these up into `@backstage/plugin-cost-insights-react` for presentation types +// and `@backstage/plugin-cost-insights-common` for data transfer object types. export * from './Alert'; export * from './ChangeStatistic'; -export * from './ChartData'; -export * from './Cost'; -export * from './DateAggregation'; -export * from './Duration'; export * from './Currency'; -export * from './Entity'; +export * from './Duration'; export * from './Icon'; -export * from './Filters'; -export * from './Group'; export * from './Loading'; -export * from './Maybe'; -export * from './MetricData'; -export * from './Metric'; -export * from './Product'; -export * from './Project'; export * from './Theme'; -export * from './Trendline'; From e6db276347ab532249d455a7bf3d39a0d6b0f724 Mon Sep 17 00:00:00 2001 From: Andrew Thauer Date: Thu, 30 Jun 2022 09:38:41 -0400 Subject: [PATCH 119/231] update api report for cost-insight types Signed-off-by: Andrew Thauer --- plugins/cost-insights-common/api-report.md | 36 +--- .../src/types/ChangeStatistic.ts | 3 + .../src/types/ChartData.ts | 3 + .../cost-insights-common/src/types/Cost.ts | 3 + .../src/types/Currency.ts | 3 + .../src/types/DateAggregation.ts | 3 + .../src/types/Duration.ts | 1 + .../cost-insights-common/src/types/Entity.ts | 192 +++++++++--------- .../cost-insights-common/src/types/Filters.ts | 9 + .../cost-insights-common/src/types/Group.ts | 3 + .../cost-insights-common/src/types/Maybe.ts | 3 + .../cost-insights-common/src/types/Metric.ts | 3 + .../src/types/MetricData.ts | 3 + .../cost-insights-common/src/types/Product.ts | 3 + .../cost-insights-common/src/types/Project.ts | 3 + .../src/types/Trendline.ts | 4 + 16 files changed, 147 insertions(+), 128 deletions(-) diff --git a/plugins/cost-insights-common/api-report.md b/plugins/cost-insights-common/api-report.md index af95e8765b..daf8f5767d 100644 --- a/plugins/cost-insights-common/api-report.md +++ b/plugins/cost-insights-common/api-report.md @@ -3,8 +3,6 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -// Warning: (ae-missing-release-tag) "ChangeStatistic" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface ChangeStatistic { // (undocumented) @@ -13,8 +11,6 @@ export interface ChangeStatistic { ratio?: number; } -// Warning: (ae-missing-release-tag) "ChartData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type ChartData = { date: number; @@ -23,8 +19,6 @@ export type ChartData = { [key: string]: number; }; -// Warning: (ae-missing-release-tag) "Cost" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface Cost { // (undocumented) @@ -39,8 +33,6 @@ export interface Cost { trendline?: Trendline; } -// Warning: (ae-missing-release-tag) "Currency" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface Currency { // (undocumented) @@ -55,16 +47,12 @@ export interface Currency { unit: string; } -// Warning: (ae-missing-release-tag) "DateAggregation" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type DateAggregation = { date: string; amount: number; }; -// Warning: (ae-missing-release-tag) "Duration" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public export enum Duration { // (undocumented) @@ -77,9 +65,7 @@ export enum Duration { P90D = 'P90D', } -// Warning: (ae-missing-release-tag) "Entity" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) +// @public export interface Entity { // (undocumented) aggregation: [number, number]; @@ -91,20 +77,14 @@ export interface Entity { id: Maybe; } -// Warning: (ae-missing-release-tag) "Group" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type Group = { id: string; }; -// Warning: (ae-missing-release-tag) "Maybe" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type Maybe = T | null; -// Warning: (ae-missing-release-tag) "Metric" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type Metric = { kind: string; @@ -112,8 +92,6 @@ export type Metric = { default: boolean; }; -// Warning: (ae-missing-release-tag) "MetricData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface MetricData { // (undocumented) @@ -126,8 +104,6 @@ export interface MetricData { id: string; } -// Warning: (ae-missing-release-tag) "PageFilters" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface PageFilters { // (undocumented) @@ -140,8 +116,6 @@ export interface PageFilters { project: Maybe; } -// Warning: (ae-missing-release-tag) "Product" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface Product { // (undocumented) @@ -150,13 +124,9 @@ export interface Product { name: string; } -// Warning: (ae-missing-release-tag) "ProductFilters" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type ProductFilters = Array; -// Warning: (ae-missing-release-tag) "ProductPeriod" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface ProductPeriod { // (undocumented) @@ -165,8 +135,6 @@ export interface ProductPeriod { productType: string; } -// Warning: (ae-missing-release-tag) "Project" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface Project { // (undocumented) @@ -175,8 +143,6 @@ export interface Project { name?: string; } -// Warning: (ae-missing-release-tag) "Trendline" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type Trendline = { slope: number; diff --git a/plugins/cost-insights-common/src/types/ChangeStatistic.ts b/plugins/cost-insights-common/src/types/ChangeStatistic.ts index 079d9bcb07..29be6e9367 100644 --- a/plugins/cost-insights-common/src/types/ChangeStatistic.ts +++ b/plugins/cost-insights-common/src/types/ChangeStatistic.ts @@ -14,6 +14,9 @@ * limitations under the License. */ +/** + * @public + */ export interface ChangeStatistic { // The ratio of change from one duration to another, expressed as: (newSum - oldSum) / oldSum // If a ratio cannot be calculated - such as when a new or old sum is zero, diff --git a/plugins/cost-insights-common/src/types/ChartData.ts b/plugins/cost-insights-common/src/types/ChartData.ts index 9de8af496d..f4ae204a22 100644 --- a/plugins/cost-insights-common/src/types/ChartData.ts +++ b/plugins/cost-insights-common/src/types/ChartData.ts @@ -14,6 +14,9 @@ * limitations under the License. */ +/** + * @public + */ export type ChartData = { date: number; trend: number; diff --git a/plugins/cost-insights-common/src/types/Cost.ts b/plugins/cost-insights-common/src/types/Cost.ts index 2ae4755bc7..90ccbe17c0 100644 --- a/plugins/cost-insights-common/src/types/Cost.ts +++ b/plugins/cost-insights-common/src/types/Cost.ts @@ -18,6 +18,9 @@ import { DateAggregation } from './DateAggregation'; import { ChangeStatistic } from './ChangeStatistic'; import { Trendline } from './Trendline'; +/** + * @public + */ export interface Cost { id: string; aggregation: DateAggregation[]; diff --git a/plugins/cost-insights-common/src/types/Currency.ts b/plugins/cost-insights-common/src/types/Currency.ts index e82f0c9a52..4bd1490a69 100644 --- a/plugins/cost-insights-common/src/types/Currency.ts +++ b/plugins/cost-insights-common/src/types/Currency.ts @@ -14,6 +14,9 @@ * limitations under the License. */ +/** + * @public + */ export interface Currency { kind: string | null; label: string; diff --git a/plugins/cost-insights-common/src/types/DateAggregation.ts b/plugins/cost-insights-common/src/types/DateAggregation.ts index 72a2514006..4faed85241 100644 --- a/plugins/cost-insights-common/src/types/DateAggregation.ts +++ b/plugins/cost-insights-common/src/types/DateAggregation.ts @@ -14,6 +14,9 @@ * limitations under the License. */ +/** + * @public + */ export type DateAggregation = { date: string; // YYYY-MM-DD amount: number; diff --git a/plugins/cost-insights-common/src/types/Duration.ts b/plugins/cost-insights-common/src/types/Duration.ts index 25806a3346..3a4c7a3a9f 100644 --- a/plugins/cost-insights-common/src/types/Duration.ts +++ b/plugins/cost-insights-common/src/types/Duration.ts @@ -19,6 +19,7 @@ * 'last completed quarter', and P30D/P90D to be '[month|quarter] relative to today'. So if * it's September 15, P3M represents costs for Q2 and P30D represents August 16 - * September 15. + * @public */ export enum Duration { P7D = 'P7D', diff --git a/plugins/cost-insights-common/src/types/Entity.ts b/plugins/cost-insights-common/src/types/Entity.ts index ccfea6667e..9a6d6746aa 100644 --- a/plugins/cost-insights-common/src/types/Entity.ts +++ b/plugins/cost-insights-common/src/types/Entity.ts @@ -17,102 +17,108 @@ import { ChangeStatistic } from './ChangeStatistic'; import { Maybe } from './Maybe'; +/** + * + * An entity is a tree-like structure that represents any unique + * product or service that generates cost over a fixed period of time. + * An entity could be atomic or composite. An atomic entity is indivisible + * and cannot be broken into sub-entities. + * + * A composite entity is divided into sub-entities that account for portions + * of the total cost **over the same time period**. The root entity is + * expected to only have _one_ Record consisting of the sub-entities to display + * in the product panel (keyed by the entity type, such as "service" for + * compute entities). + * + * The root sub-entities may have multiple breakdowns - for example, a + * breakdown of an entity cost by SKU vs deployment environment. The sum + * aggregated cost of each keyed breakdown should equal the sub-entity's cost. + * + * Entities with null ids are considered "unlabeled" - costs without attribution. + * If an entity is a composite, it may only have one (1) null child but may have any number of + * null grandchildren. + * + * @public + * + * @example + * Here's an example composite entity: + * ``` + * const compositeEntity = { + * id: 'product', + * aggregation: [0, 200], + * change: { + * ratio: 2000, + * amount: 200 + * }, + * entities: { + * service: [ + * { + * id: 'service-a', + * aggregation: [0, 100], + * change: { + * ratio: 100, + * amount: 100 + * }, + * entities: {} + * }, + * { + * id: 'service-b', + * aggregation: [0, 100], + * change: { + * ratio: 100, + * amount: 100 + * }, + * entities: { + * SKU: [ + * { + * id: 'service-b-sku-a', + * aggregation: [0, 25], + * change: { + * ratio: 25, + * amount: 25 + * }, + * entities: {} + * }, + * { + * id: null, // Unlabeled cost for service-b + * aggregation: [0, 75], + * change: { + * ratio: 75, + * amount: 75 + * }, + * entities: {} + * }, + * ], + * deployment: [ + * { + * id: 'service-b-env-a', + * aggregation: [0, 50], + * change: { + * ratio: 50, + * amount: 50 + * }, + * entities: {} + * }, + * { + * id: 'service-b-env-b', + * aggregation: [0, 50], + * change: { + * ratio: 50, + * amount: 50 + * }, + * entities: {} + * }, + * ] + * } + * }, + * ] + * } + * } + * ``` + */ export interface Entity { id: Maybe; aggregation: [number, number]; entities: Record; change: ChangeStatistic; } - -/* - An entity is a tree-like structure that represents any unique - product or service that generates cost over a fixed period of time. - An entity could be atomic or composite. An atomic entity is indivisible - and cannot be broken into sub-entities. - - A composite entity is divided into sub-entities that account for portions - of the total cost **over the same time period**. The root entity is - expected to only have _one_ Record consisting of the sub-entities to display - in the product panel (keyed by the entity type, such as "service" for - compute entities). - - The root sub-entities may have multiple breakdowns - for example, a - breakdown of an entity cost by SKU vs deployment environment. The sum - aggregated cost of each keyed breakdown should equal the sub-entity's cost. - - Entities with null ids are considered "unlabeled" - costs without attribution. - If an entity is a composite, it may only have one (1) null child but may have any number of - null grandchildren. - - { - id: 'product', - aggregation: [0, 200], - change: { - ratio: 2000, - amount: 200 - }, - entities: { - service: [ - { - id: 'service-a', - aggregation: [0, 100], - change: { - ratio: 100, - amount: 100 - }, - entities: {} - }, - { - id: 'service-b', - aggregation: [0, 100], - change: { - ratio: 100, - amount: 100 - }, - entities: { - SKU: [ - { - id: 'service-b-sku-a', - aggregation: [0, 25], - change: { - ratio: 25, - amount: 25 - }, - entities: {} - }, - { - id: null, // Unlabeled cost for service-b - aggregation: [0, 75], - change: { - ratio: 75, - amount: 75 - }, - entities: {} - }, - ], - deployment: [ - { - id: 'service-b-env-a', - aggregation: [0, 50], - change: { - ratio: 50, - amount: 50 - }, - entities: {} - }, - { - id: 'service-b-env-b', - aggregation: [0, 50], - change: { - ratio: 50, - amount: 50 - }, - entities: {} - }, - ] - } - }, - ] - } - } -*/ diff --git a/plugins/cost-insights-common/src/types/Filters.ts b/plugins/cost-insights-common/src/types/Filters.ts index 6beef5cacc..67cbb6ce2f 100644 --- a/plugins/cost-insights-common/src/types/Filters.ts +++ b/plugins/cost-insights-common/src/types/Filters.ts @@ -17,6 +17,9 @@ import { Maybe } from './Maybe'; import { Duration } from './Duration'; +/** + * @public + */ export interface PageFilters { group: Maybe; project: Maybe; @@ -24,8 +27,14 @@ export interface PageFilters { metric: string | null; } +/** + * @public + */ export type ProductFilters = Array; +/** + * @public + */ export interface ProductPeriod { duration: Duration; productType: string; diff --git a/plugins/cost-insights-common/src/types/Group.ts b/plugins/cost-insights-common/src/types/Group.ts index 8e0c768924..b34cac083f 100644 --- a/plugins/cost-insights-common/src/types/Group.ts +++ b/plugins/cost-insights-common/src/types/Group.ts @@ -14,6 +14,9 @@ * limitations under the License. */ +/** + * @public + */ export type Group = { id: string; }; diff --git a/plugins/cost-insights-common/src/types/Maybe.ts b/plugins/cost-insights-common/src/types/Maybe.ts index 461c31f6a5..824c64c334 100644 --- a/plugins/cost-insights-common/src/types/Maybe.ts +++ b/plugins/cost-insights-common/src/types/Maybe.ts @@ -14,4 +14,7 @@ * limitations under the License. */ +/** + * @public + */ export type Maybe = T | null; diff --git a/plugins/cost-insights-common/src/types/Metric.ts b/plugins/cost-insights-common/src/types/Metric.ts index 107513b80d..901d40f106 100644 --- a/plugins/cost-insights-common/src/types/Metric.ts +++ b/plugins/cost-insights-common/src/types/Metric.ts @@ -14,6 +14,9 @@ * limitations under the License. */ +/** + * @public + */ export type Metric = { kind: string; name: string; diff --git a/plugins/cost-insights-common/src/types/MetricData.ts b/plugins/cost-insights-common/src/types/MetricData.ts index 225da185f8..56742e76e9 100644 --- a/plugins/cost-insights-common/src/types/MetricData.ts +++ b/plugins/cost-insights-common/src/types/MetricData.ts @@ -17,6 +17,9 @@ import { DateAggregation } from './DateAggregation'; import { ChangeStatistic } from './ChangeStatistic'; +/** + * @public + */ export interface MetricData { id: string; format: 'number' | 'currency'; diff --git a/plugins/cost-insights-common/src/types/Product.ts b/plugins/cost-insights-common/src/types/Product.ts index 9920841223..7ed49c18da 100644 --- a/plugins/cost-insights-common/src/types/Product.ts +++ b/plugins/cost-insights-common/src/types/Product.ts @@ -14,6 +14,9 @@ * limitations under the License. */ +/** + * @public + */ export interface Product { kind: string; name: string; diff --git a/plugins/cost-insights-common/src/types/Project.ts b/plugins/cost-insights-common/src/types/Project.ts index c12a3f1fa2..6cad92ed46 100644 --- a/plugins/cost-insights-common/src/types/Project.ts +++ b/plugins/cost-insights-common/src/types/Project.ts @@ -14,6 +14,9 @@ * limitations under the License. */ +/** + * @public + */ export interface Project { id: string; name?: string; diff --git a/plugins/cost-insights-common/src/types/Trendline.ts b/plugins/cost-insights-common/src/types/Trendline.ts index 64405678f1..3a7e372880 100644 --- a/plugins/cost-insights-common/src/types/Trendline.ts +++ b/plugins/cost-insights-common/src/types/Trendline.ts @@ -13,6 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +/** + * @public + */ export type Trendline = { slope: number; intercept: number; From 81dd5ea9890609131719263a907b32551d8e801d Mon Sep 17 00:00:00 2001 From: Andrew Thauer Date: Thu, 30 Jun 2022 09:44:07 -0400 Subject: [PATCH 120/231] add changeset for new cost-insights-common package Signed-off-by: Andrew Thauer --- .changeset/light-hornets-eat.md | 5 +++++ plugins/cost-insights-common/package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/light-hornets-eat.md diff --git a/.changeset/light-hornets-eat.md b/.changeset/light-hornets-eat.md new file mode 100644 index 0000000000..795e51fb67 --- /dev/null +++ b/.changeset/light-hornets-eat.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-cost-insights-common': minor +--- + +Introduces a new isomorphic @backstage/plugin-cost-insight-common package to contain shared types across all other cost insights packages and modules. diff --git a/plugins/cost-insights-common/package.json b/plugins/cost-insights-common/package.json index e950063efb..c15f063fd2 100644 --- a/plugins/cost-insights-common/package.json +++ b/plugins/cost-insights-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cost-insights-common", "description": "Common functionalities for the cost-insights plugin", - "version": "0.0.1", + "version": "0.0.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", From c380ea795eb3876a6b50ce602f33dc1065bc578f Mon Sep 17 00:00:00 2001 From: Andrew Thauer Date: Thu, 30 Jun 2022 10:25:59 -0400 Subject: [PATCH 121/231] update cost-insights api docs Signed-off-by: Andrew Thauer --- plugins/cost-insights-common/api-report.md | 2 -- .../src/types/ChangeStatistic.ts | 13 +++++++++---- .../src/types/DateAggregation.ts | 7 ++++++- plugins/cost-insights-common/src/types/Duration.ts | 1 + 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/plugins/cost-insights-common/api-report.md b/plugins/cost-insights-common/api-report.md index daf8f5767d..1f54bece3e 100644 --- a/plugins/cost-insights-common/api-report.md +++ b/plugins/cost-insights-common/api-report.md @@ -5,9 +5,7 @@ ```ts // @public (undocumented) export interface ChangeStatistic { - // (undocumented) amount: number; - // (undocumented) ratio?: number; } diff --git a/plugins/cost-insights-common/src/types/ChangeStatistic.ts b/plugins/cost-insights-common/src/types/ChangeStatistic.ts index 29be6e9367..8d64fb47f9 100644 --- a/plugins/cost-insights-common/src/types/ChangeStatistic.ts +++ b/plugins/cost-insights-common/src/types/ChangeStatistic.ts @@ -18,10 +18,15 @@ * @public */ export interface ChangeStatistic { - // The ratio of change from one duration to another, expressed as: (newSum - oldSum) / oldSum - // If a ratio cannot be calculated - such as when a new or old sum is zero, - // the ratio can be omitted and where applicable, ∞ or -∞ will display based on amount. + /** + * The ratio of change from one duration to another, expressed as: (newSum - oldSum) / oldSum + * If a ratio cannot be calculated - such as when a new or old sum is zero, + * the ratio can be omitted and where applicable, ∞ or -∞ will display based on amount. + */ ratio?: number; - // The actual USD change between time periods (can be negative if costs decreased) + + /** + * The actual USD change between time periods (can be negative if costs decreased) + */ amount: number; } diff --git a/plugins/cost-insights-common/src/types/DateAggregation.ts b/plugins/cost-insights-common/src/types/DateAggregation.ts index 4faed85241..edc867a7bf 100644 --- a/plugins/cost-insights-common/src/types/DateAggregation.ts +++ b/plugins/cost-insights-common/src/types/DateAggregation.ts @@ -18,6 +18,11 @@ * @public */ export type DateAggregation = { - date: string; // YYYY-MM-DD + /** + * The date aggregation as string. + * @example YYYY-MM-DD + */ + date: string; + amount: number; }; diff --git a/plugins/cost-insights-common/src/types/Duration.ts b/plugins/cost-insights-common/src/types/Duration.ts index 3a4c7a3a9f..dbb226df24 100644 --- a/plugins/cost-insights-common/src/types/Duration.ts +++ b/plugins/cost-insights-common/src/types/Duration.ts @@ -19,6 +19,7 @@ * 'last completed quarter', and P30D/P90D to be '[month|quarter] relative to today'. So if * it's September 15, P3M represents costs for Q2 and P30D represents August 16 - * September 15. + * * @public */ export enum Duration { From 66ef0326315b90b75a4b64a971478b1c555ec5c0 Mon Sep 17 00:00:00 2001 From: Andrew Thauer Date: Thu, 30 Jun 2022 14:21:35 -0400 Subject: [PATCH 122/231] move frontend types back into cost-insights Signed-off-by: Andrew Thauer --- .../cost-insights-common/src/types/index.ts | 4 --- plugins/cost-insights/package.json | 2 +- plugins/cost-insights/src/types/Alert.ts | 7 ++--- .../src/types/ChartData.ts | 0 plugins/cost-insights/src/types/Currency.ts | 14 +++++---- .../src/types/CurrencyType.ts} | 14 ++++----- .../src/types/DateFormat.ts} | 15 +--------- plugins/cost-insights/src/types/Duration.ts | 15 +++++++++- .../src/types/Filters.ts | 2 +- plugins/cost-insights/src/types/index.ts | 29 +++++++++++++++++-- 10 files changed, 60 insertions(+), 42 deletions(-) rename plugins/{cost-insights-common => cost-insights}/src/types/ChartData.ts (100%) rename plugins/{cost-insights-common/src/types/Currency.ts => cost-insights/src/types/CurrencyType.ts} (81%) rename plugins/{cost-insights-common/src/types/Duration.ts => cost-insights/src/types/DateFormat.ts} (60%) rename plugins/{cost-insights-common => cost-insights}/src/types/Filters.ts (93%) diff --git a/plugins/cost-insights-common/src/types/index.ts b/plugins/cost-insights-common/src/types/index.ts index 877ace8f5f..86e7af33aa 100644 --- a/plugins/cost-insights-common/src/types/index.ts +++ b/plugins/cost-insights-common/src/types/index.ts @@ -15,13 +15,9 @@ */ export * from './ChangeStatistic'; -export * from './ChartData'; export * from './Cost'; export * from './DateAggregation'; -export * from './Duration'; -export * from './Currency'; export * from './Entity'; -export * from './Filters'; export * from './Group'; export * from './Maybe'; export * from './MetricData'; diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index 4801a2002b..d7a04eddbc 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -38,7 +38,7 @@ "@backstage/config": "^1.0.1", "@backstage/core-components": "^0.9.6-next.1", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-cost-insights-common": "^0.0.1", + "@backstage/plugin-cost-insights-common": "^0.0.0", "@backstage/theme": "^0.2.16-next.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", diff --git a/plugins/cost-insights/src/types/Alert.ts b/plugins/cost-insights/src/types/Alert.ts index a04becada1..483b9a654d 100644 --- a/plugins/cost-insights/src/types/Alert.ts +++ b/plugins/cost-insights/src/types/Alert.ts @@ -15,11 +15,8 @@ */ import { ForwardRefExoticComponent, RefAttributes } from 'react'; -import { - ChangeStatistic, - Duration, - Maybe, -} from '@backstage/plugin-cost-insights-common'; +import { ChangeStatistic, Maybe } from '@backstage/plugin-cost-insights-common'; +import { Duration } from './Duration'; /** * Generic alert type with required fields for display. The `element` field will be rendered in diff --git a/plugins/cost-insights-common/src/types/ChartData.ts b/plugins/cost-insights/src/types/ChartData.ts similarity index 100% rename from plugins/cost-insights-common/src/types/ChartData.ts rename to plugins/cost-insights/src/types/ChartData.ts diff --git a/plugins/cost-insights/src/types/Currency.ts b/plugins/cost-insights/src/types/Currency.ts index 0316e8f90e..4bd1490a69 100644 --- a/plugins/cost-insights/src/types/Currency.ts +++ b/plugins/cost-insights/src/types/Currency.ts @@ -14,9 +14,13 @@ * limitations under the License. */ -export enum CurrencyType { - USD = 'USD', - CarbonOffsetTons = 'CARBON_OFFSET_TONS', - Beers = 'BEERS', - IceCream = 'PINTS_OF_ICE_CREAM', +/** + * @public + */ +export interface Currency { + kind: string | null; + label: string; + unit: string; + prefix?: string; + rate?: number; } diff --git a/plugins/cost-insights-common/src/types/Currency.ts b/plugins/cost-insights/src/types/CurrencyType.ts similarity index 81% rename from plugins/cost-insights-common/src/types/Currency.ts rename to plugins/cost-insights/src/types/CurrencyType.ts index 4bd1490a69..0316e8f90e 100644 --- a/plugins/cost-insights-common/src/types/Currency.ts +++ b/plugins/cost-insights/src/types/CurrencyType.ts @@ -14,13 +14,9 @@ * limitations under the License. */ -/** - * @public - */ -export interface Currency { - kind: string | null; - label: string; - unit: string; - prefix?: string; - rate?: number; +export enum CurrencyType { + USD = 'USD', + CarbonOffsetTons = 'CARBON_OFFSET_TONS', + Beers = 'BEERS', + IceCream = 'PINTS_OF_ICE_CREAM', } diff --git a/plugins/cost-insights-common/src/types/Duration.ts b/plugins/cost-insights/src/types/DateFormat.ts similarity index 60% rename from plugins/cost-insights-common/src/types/Duration.ts rename to plugins/cost-insights/src/types/DateFormat.ts index dbb226df24..c5d9c83f6e 100644 --- a/plugins/cost-insights-common/src/types/Duration.ts +++ b/plugins/cost-insights/src/types/DateFormat.ts @@ -14,17 +14,4 @@ * limitations under the License. */ -/** - * Time periods for cost comparison; slight abuse of ISO 8601 periods. We take P3M to mean - * 'last completed quarter', and P30D/P90D to be '[month|quarter] relative to today'. So if - * it's September 15, P3M represents costs for Q2 and P30D represents August 16 - - * September 15. - * - * @public - */ -export enum Duration { - P7D = 'P7D', - P30D = 'P30D', - P90D = 'P90D', - P3M = 'P3M', -} +export const DEFAULT_DATE_FORMAT = 'yyyy-LL-dd'; diff --git a/plugins/cost-insights/src/types/Duration.ts b/plugins/cost-insights/src/types/Duration.ts index c5d9c83f6e..dbb226df24 100644 --- a/plugins/cost-insights/src/types/Duration.ts +++ b/plugins/cost-insights/src/types/Duration.ts @@ -14,4 +14,17 @@ * limitations under the License. */ -export const DEFAULT_DATE_FORMAT = 'yyyy-LL-dd'; +/** + * Time periods for cost comparison; slight abuse of ISO 8601 periods. We take P3M to mean + * 'last completed quarter', and P30D/P90D to be '[month|quarter] relative to today'. So if + * it's September 15, P3M represents costs for Q2 and P30D represents August 16 - + * September 15. + * + * @public + */ +export enum Duration { + P7D = 'P7D', + P30D = 'P30D', + P90D = 'P90D', + P3M = 'P3M', +} diff --git a/plugins/cost-insights-common/src/types/Filters.ts b/plugins/cost-insights/src/types/Filters.ts similarity index 93% rename from plugins/cost-insights-common/src/types/Filters.ts rename to plugins/cost-insights/src/types/Filters.ts index 67cbb6ce2f..d307243ad0 100644 --- a/plugins/cost-insights-common/src/types/Filters.ts +++ b/plugins/cost-insights/src/types/Filters.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Maybe } from './Maybe'; +import { Maybe } from '@backstage/plugin-cost-insights-common'; import { Duration } from './Duration'; /** diff --git a/plugins/cost-insights/src/types/index.ts b/plugins/cost-insights/src/types/index.ts index b3a06f248d..57711b4eee 100644 --- a/plugins/cost-insights/src/types/index.ts +++ b/plugins/cost-insights/src/types/index.ts @@ -14,15 +14,40 @@ * limitations under the License. */ -// @deprecated - use types from `@backstage/plugin-cost-insights-common` instead. -export * from '@backstage/plugin-cost-insights-common'; +import * as common from '@backstage/plugin-cost-insights-common'; +/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ +export type ChangeStatistic = common.ChangeStatistic; +/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ +export type Cost = common.Cost; +/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ +export type DateAggregation = common.DateAggregation; +/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ +export type Entity = common.Entity; +/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ +export type Group = common.Group; +/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ +export type Maybe = common.Maybe; +/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ +export type Metric = common.Metric; +/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ +export type MetricData = common.MetricData; +/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ +export type Product = common.Product; +/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ +export type Project = common.Project; +/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ +export type Trendline = common.Trendline; // TODO: Split some of these up into `@backstage/plugin-cost-insights-react` for presentation types // and `@backstage/plugin-cost-insights-common` for data transfer object types. export * from './Alert'; export * from './ChangeStatistic'; +export * from './ChartData'; export * from './Currency'; +export * from './CurrencyType'; +export * from './DateFormat'; export * from './Duration'; +export * from './Filters'; export * from './Icon'; export * from './Loading'; export * from './Theme'; From 6f7ef41351a701aa2619dd64fe5390dd2bb54f42 Mon Sep 17 00:00:00 2001 From: Andrew Thauer Date: Thu, 30 Jun 2022 15:38:03 -0400 Subject: [PATCH 123/231] update cost-insights api docs Signed-off-by: Andrew Thauer --- plugins/cost-insights-common/api-report.md | 57 -------- plugins/cost-insights/api-report.md | 153 ++++++++++++++++++--- 2 files changed, 133 insertions(+), 77 deletions(-) diff --git a/plugins/cost-insights-common/api-report.md b/plugins/cost-insights-common/api-report.md index 1f54bece3e..a5f7045854 100644 --- a/plugins/cost-insights-common/api-report.md +++ b/plugins/cost-insights-common/api-report.md @@ -9,14 +9,6 @@ export interface ChangeStatistic { ratio?: number; } -// @public (undocumented) -export type ChartData = { - date: number; - trend: number; - dailyCost: number; - [key: string]: number; -}; - // @public (undocumented) export interface Cost { // (undocumented) @@ -31,38 +23,12 @@ export interface Cost { trendline?: Trendline; } -// @public (undocumented) -export interface Currency { - // (undocumented) - kind: string | null; - // (undocumented) - label: string; - // (undocumented) - prefix?: string; - // (undocumented) - rate?: number; - // (undocumented) - unit: string; -} - // @public (undocumented) export type DateAggregation = { date: string; amount: number; }; -// @public -export enum Duration { - // (undocumented) - P30D = 'P30D', - // (undocumented) - P3M = 'P3M', - // (undocumented) - P7D = 'P7D', - // (undocumented) - P90D = 'P90D', -} - // @public export interface Entity { // (undocumented) @@ -102,18 +68,6 @@ export interface MetricData { id: string; } -// @public (undocumented) -export interface PageFilters { - // (undocumented) - duration: Duration; - // (undocumented) - group: Maybe; - // (undocumented) - metric: string | null; - // (undocumented) - project: Maybe; -} - // @public (undocumented) export interface Product { // (undocumented) @@ -122,17 +76,6 @@ export interface Product { name: string; } -// @public (undocumented) -export type ProductFilters = Array; - -// @public (undocumented) -export interface ProductPeriod { - // (undocumented) - duration: Duration; - // (undocumented) - productType: string; -} - // @public (undocumented) export interface Project { // (undocumented) diff --git a/plugins/cost-insights/api-report.md b/plugins/cost-insights/api-report.md index 8bde5729e7..a646cddeab 100644 --- a/plugins/cost-insights/api-report.md +++ b/plugins/cost-insights/api-report.md @@ -9,21 +9,13 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePalette } from '@backstage/theme'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { BackstageTheme } from '@backstage/theme'; -import { ChangeStatistic } from '@backstage/plugin-cost-insights-common'; +import { ChangeStatistic as ChangeStatistic_2 } from '@backstage/plugin-cost-insights-common'; +import * as common from '@backstage/plugin-cost-insights-common'; import { ContentRenderer } from 'recharts'; -import { Cost } from '@backstage/plugin-cost-insights-common'; -import { Currency } from '@backstage/plugin-cost-insights-common'; import { Dispatch } from 'react'; -import { Duration } from '@backstage/plugin-cost-insights-common'; -import { Entity } from '@backstage/plugin-cost-insights-common'; import { ForwardRefExoticComponent } from 'react'; -import { Group } from '@backstage/plugin-cost-insights-common'; -import { Maybe } from '@backstage/plugin-cost-insights-common'; -import { Metric } from '@backstage/plugin-cost-insights-common'; -import { MetricData } from '@backstage/plugin-cost-insights-common'; +import { Maybe as Maybe_2 } from '@backstage/plugin-cost-insights-common'; import { PaletteOptions } from '@material-ui/core/styles/createPalette'; -import { Product } from '@backstage/plugin-cost-insights-common'; -import { Project } from '@backstage/plugin-cost-insights-common'; import { PropsWithChildren } from 'react'; import { ReactNode } from 'react'; import { RechartsFunction } from 'recharts'; @@ -43,9 +35,9 @@ export type Alert = { status?: AlertStatus; url?: string; buttonText?: string; - SnoozeForm?: Maybe; - AcceptForm?: Maybe; - DismissForm?: Maybe; + SnoozeForm?: Maybe_2; + AcceptForm?: Maybe_2; + DismissForm?: Maybe_2; onSnoozed?(options: AlertOptions): Promise; onAccepted?(options: AlertOptions): Promise; onDismissed?(options: AlertOptions): Promise; @@ -66,9 +58,9 @@ export interface AlertCost { // @public (undocumented) export interface AlertDismissFormData { // (undocumented) - feedback: Maybe; + feedback: Maybe_2; // (undocumented) - other: Maybe; + other: Maybe_2; // (undocumented) reason: AlertDismissReason; } @@ -280,6 +272,12 @@ export type BarChartTooltipProps = { actions?: ReactNode; }; +// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" +// Warning: (ae-missing-release-tag) "ChangeStatistic" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public @deprecated (undocumented) +export type ChangeStatistic = common.ChangeStatistic; + // Warning: (ae-missing-release-tag) "ChangeThreshold" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -290,6 +288,20 @@ export enum ChangeThreshold { upper = 0.05, } +// @public (undocumented) +export type ChartData = { + date: number; + trend: number; + dailyCost: number; + [key: string]: number; +}; + +// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" +// Warning: (ae-missing-release-tag) "Cost" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public @deprecated (undocumented) +export type Cost = common.Cost; + // Warning: (ae-missing-release-tag) "CostGrowth" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -398,6 +410,20 @@ export interface CostInsightsThemeOptions extends PaletteOptions { palette: CostInsightsPaletteOptions; } +// @public (undocumented) +export interface Currency { + // (undocumented) + kind: string | null; + // (undocumented) + label: string; + // (undocumented) + prefix?: string; + // (undocumented) + rate?: number; + // (undocumented) + unit: string; +} + // Warning: (ae-missing-release-tag) "CurrencyType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -424,16 +450,40 @@ export enum DataKey { Previous = 'previous', } +// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" +// Warning: (ae-missing-release-tag) "DateAggregation" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public @deprecated (undocumented) +export type DateAggregation = common.DateAggregation; + // Warning: (ae-missing-release-tag) "DEFAULT_DATE_FORMAT" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) export const DEFAULT_DATE_FORMAT = 'yyyy-LL-dd'; +// @public +export enum Duration { + // (undocumented) + P30D = 'P30D', + // (undocumented) + P3M = 'P3M', + // (undocumented) + P7D = 'P7D', + // (undocumented) + P90D = 'P90D', +} + // Warning: (ae-missing-release-tag) "EngineerThreshold" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) export const EngineerThreshold = 0.5; +// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" +// Warning: (ae-missing-release-tag) "Entity" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public @deprecated (undocumented) +export type Entity = common.Entity; + // Warning: (ae-missing-release-tag) "ExampleCostInsightsClient" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -456,6 +506,12 @@ export class ExampleCostInsightsClient implements CostInsightsApi { getUserGroups(userId: string): Promise; } +// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" +// Warning: (ae-missing-release-tag) "Group" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public @deprecated (undocumented) +export type Group = common.Group; + // Warning: (ae-missing-release-tag) "GrowthType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -518,6 +574,24 @@ export type LegendItemProps = { // @public (undocumented) export type Loading = Record; +// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" +// Warning: (ae-missing-release-tag) "Maybe" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public @deprecated (undocumented) +export type Maybe = common.Maybe; + +// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" +// Warning: (ae-missing-release-tag) "Metric" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public @deprecated (undocumented) +export type Metric = common.Metric; + +// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" +// Warning: (ae-missing-release-tag) "MetricData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public @deprecated (undocumented) +export type MetricData = common.MetricData; + // Warning: (ae-forgotten-export) The symbol "MockConfigProviderProps" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "MockConfigProvider" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -536,6 +610,27 @@ export const MockCurrencyProvider: ({ ...context }: MockCurrencyProviderProps) => JSX.Element; +// @public (undocumented) +export interface PageFilters { + // (undocumented) + duration: Duration; + // (undocumented) + group: Maybe_2; + // (undocumented) + metric: string | null; + // (undocumented) + project: Maybe_2; +} + +// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" +// Warning: (ae-missing-release-tag) "Product" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public @deprecated (undocumented) +export type Product = common.Product; + +// @public (undocumented) +export type ProductFilters = Array; + // Warning: (ae-missing-release-tag) "ProductInsightsOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -546,6 +641,20 @@ export type ProductInsightsOptions = { project: Maybe; }; +// @public (undocumented) +export interface ProductPeriod { + // (undocumented) + duration: Duration; + // (undocumented) + productType: string; +} + +// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" +// Warning: (ae-missing-release-tag) "Project" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public @deprecated (undocumented) +export type Project = common.Project; + // Warning: (ae-missing-release-tag) "ProjectGrowthAlert" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @@ -570,7 +679,7 @@ export interface ProjectGrowthData { // (undocumented) aggregation: [number, number]; // (undocumented) - change: ChangeStatistic; + change: ChangeStatistic_2; // (undocumented) periodEnd: string; // (undocumented) @@ -588,7 +697,7 @@ export interface ResourceData { // (undocumented) current: number; // (undocumented) - name: Maybe; + name: Maybe_2; // (undocumented) previous: number; } @@ -602,6 +711,12 @@ export type TooltipItem = { value: string; }; +// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" +// Warning: (ae-missing-release-tag) "Trendline" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public @deprecated (undocumented) +export type Trendline = common.Trendline; + // Warning: (ae-missing-release-tag) "UnlabeledDataflowAlert" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @@ -648,6 +763,4 @@ export interface UnlabeledDataflowData { // (undocumented) unlabeledCost: number; } - -export * from '@backstage/plugin-cost-insights-common'; ``` From 7d2f89a1bd431a66b1a507c5808e3a7b982a6bcd Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Thu, 30 Jun 2022 21:22:21 +0200 Subject: [PATCH 124/231] fix(search): when reset page cursor Signed-off-by: Camila Belo --- .../src/context/SearchContext.test.tsx | 74 ++++++++++++------- .../src/context/SearchContext.tsx | 5 +- 2 files changed, 49 insertions(+), 30 deletions(-) diff --git a/plugins/search-react/src/context/SearchContext.test.tsx b/plugins/search-react/src/context/SearchContext.test.tsx index 0272176150..68c79d3a5e 100644 --- a/plugins/search-react/src/context/SearchContext.test.tsx +++ b/plugins/search-react/src/context/SearchContext.test.tsx @@ -108,40 +108,58 @@ describe('SearchContext', () => { expect(result.current).toEqual(expect.objectContaining(initialState)); }); - it('Resets cursor when term is set (and different from previous)', async () => { - const { result, waitForNextUpdate } = renderHook(() => useSearch(), { - wrapper, - initialProps: { - initialState: { - ...initialState, - pageCursor: 'SOMEPAGE', + describe('Resets cursor', () => { + it('When term is cleared', async () => { + const { result, waitForNextUpdate } = renderHook(() => useSearch(), { + wrapper, + initialProps: { + initialState: { + ...initialState, + term: 'first term', + pageCursor: 'SOMEPAGE', + }, }, - }, + }); + + await waitForNextUpdate(); + + expect(result.current.term).toEqual('first term'); + expect(result.current.pageCursor).toEqual('SOMEPAGE'); + + act(() => { + result.current.setTerm(''); + }); + + await waitForNextUpdate(); + + expect(result.current.pageCursor).toBeUndefined(); }); - await waitForNextUpdate(); + it('When term is set (and different from previous)', async () => { + const { result, waitForNextUpdate } = renderHook(() => useSearch(), { + wrapper, + initialProps: { + initialState: { + ...initialState, + term: 'first term', + pageCursor: 'SOMEPAGE', + }, + }, + }); - expect(result.current.pageCursor).toEqual('SOMEPAGE'); + await waitForNextUpdate(); - act(() => { - result.current.setTerm('first term'); + expect(result.current.term).toEqual('first term'); + expect(result.current.pageCursor).toEqual('SOMEPAGE'); + + act(() => { + result.current.setTerm('second term'); + }); + + await waitForNextUpdate(); + + expect(result.current.pageCursor).toBeUndefined(); }); - - act(() => { - result.current.setPageCursor('OTHERPAGE'); - }); - - await waitForNextUpdate(); - - expect(result.current.pageCursor).toEqual('OTHERPAGE'); - - act(() => { - result.current.setTerm('second term'); - }); - - await waitForNextUpdate(); - - expect(result.current.pageCursor).toEqual(undefined); }); describe('Performs search (and sets results)', () => { diff --git a/plugins/search-react/src/context/SearchContext.tsx b/plugins/search-react/src/context/SearchContext.tsx index 8a0f962121..faad50f37a 100644 --- a/plugins/search-react/src/context/SearchContext.tsx +++ b/plugins/search-react/src/context/SearchContext.tsx @@ -150,10 +150,11 @@ export const SearchContextProvider = (props: SearchContextProviderProps) => { useEffect(() => { // Any time a term is reset, we want to start from page 0. - if (term && prevTerm && term !== prevTerm) { + // Only reset the term if it has been modified by the user at least once, the initial state must not reset the term. + if (prevTerm !== undefined && term !== prevTerm) { setPageCursor(undefined); } - }, [term, prevTerm, initialState.pageCursor]); + }, [term, prevTerm, setPageCursor]); const value: SearchContextValue = { result, From 60408ca9d4fc9311747b96e6a77dc065210c5cf0 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Thu, 30 Jun 2022 21:29:53 +0200 Subject: [PATCH 125/231] chore: add changeset file Signed-off-by: Camila Belo --- .changeset/search-boats-double.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/search-boats-double.md diff --git a/.changeset/search-boats-double.md b/.changeset/search-boats-double.md new file mode 100644 index 0000000000..92fd372cb8 --- /dev/null +++ b/.changeset/search-boats-double.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-react': patch +--- + +Fix search pagination to reset page cursor also when a term is cleared. From 227688347385202304aa004165404fee21770053 Mon Sep 17 00:00:00 2001 From: Andrew Thauer Date: Thu, 30 Jun 2022 16:43:29 -0400 Subject: [PATCH 126/231] fix cost-insight contrib doc refs Signed-off-by: Andrew Thauer --- plugins/cost-insights/contrib/aws-cost-explorer-api.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/cost-insights/contrib/aws-cost-explorer-api.md b/plugins/cost-insights/contrib/aws-cost-explorer-api.md index caa7b72e10..1e3f4e9de6 100644 --- a/plugins/cost-insights/contrib/aws-cost-explorer-api.md +++ b/plugins/cost-insights/contrib/aws-cost-explorer-api.md @@ -77,7 +77,7 @@ We can use the data provided by the Cost Explorer API to implement CostInsightsA ### 1. [getGroupDailyCost](https://github.com/backstage/backstage/blob/master/plugins/cost-insights/src/api/CostInsightsApi.ts#L93) -The `getGroupDailyCost` method is expected to return daily cost aggregations for a given group and interval time frame as a [`Cost`](https://github.com/backstage/backstage/blob/master/plugins/cost-insights/src/types/Cost.ts). +The `getGroupDailyCost` method is expected to return daily cost aggregations for a given group and interval time frame as a [`Cost`](https://github.com/backstage/backstage/blob/master/plugins/cost-insights-common/src/types/Cost.ts). #### Total Daily cost @@ -208,13 +208,13 @@ Sample `groupedCosts` based on the response: ### 2. [getProjectDailyCost](https://github.com/backstage/backstage/blob/master/plugins/cost-insights/src/api/CostInsightsApi.ts#L111) -The `getProjectDailyCost` method is expected to return daily cost aggregations for a given billing entity and interval time frame as a [`Cost`](https://github.com/backstage/backstage/blob/master/plugins/cost-insights/src/types/Cost.ts). +The `getProjectDailyCost` method is expected to return daily cost aggregations for a given billing entity and interval time frame as a [`Cost`](https://github.com/backstage/backstage/blob/master/plugins/cost-insights-common/src/types/Cost.ts). This should be similar to the `getGroupDailyCost` method implementation, but with an updated `LINKED_ACCOUNT` filter to get narrower cost data for a lower-level linked account. ### 3. [getProductInsights](https://github.com/backstage/backstage/blob/master/plugins/cost-insights/src/api/CostInsightsApi.ts#L111) -The `getProductInsights` method is expected to return cost aggregations for a particular cloud product and interval time frame as an [`Entity`](https://github.com/backstage/backstage/blob/master/plugins/cost-insights/src/types/Entity.ts). +The `getProductInsights` method is expected to return cost aggregations for a particular cloud product and interval time frame as an [`Entity`](https://github.com/backstage/backstage/blob/master/plugins/cost-insights-common/src/types/Entity.ts). #### Cloud product cost by resource From ed475c57adac06194d1ca37216981070289ca6b3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 21:36:40 +0000 Subject: [PATCH 127/231] fix(deps): update dependency winston to v3.8.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 d65223713f..b9a0f740dc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26165,9 +26165,9 @@ winston-transport@^4.5.0: triple-beam "^1.3.0" winston@^3.2.1, winston@^3.7.2: - version "3.8.0" - resolved "https://registry.npmjs.org/winston/-/winston-3.8.0.tgz#4fc8656829dcfdab3c38f558eab785eea38a5328" - integrity sha512-Iix1w8rIq2kBDkGvclO0db2CVOHYVamCIkVWcUbs567G9i2pdB+gvqLgDgxx4B4HXHYD6U4Zybh6ojepUOqcFQ== + version "3.8.1" + resolved "https://registry.npmjs.org/winston/-/winston-3.8.1.tgz#76f15b3478cde170b780234e0c4cf805c5a7fb57" + integrity sha512-r+6YAiCR4uI3N8eQNOg8k3P3PqwAm20cLKlzVD9E66Ch39+LZC+VH1UKf9JemQj2B3QoUHfKD7Poewn0Pr3Y1w== dependencies: "@dabh/diagnostics" "^2.0.2" async "^3.2.3" From b32758297e0a73b4070451c39db07977e9a9fb24 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 21:38:15 +0000 Subject: [PATCH 128/231] fix(deps): update dependency @react-hookz/web to v14.7.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 d65223713f..7346c00a19 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5263,9 +5263,9 @@ "@react-hookz/deep-equal" "^1.0.1" "@react-hookz/web@^14.0.0": - version "14.6.0" - resolved "https://registry.npmjs.org/@react-hookz/web/-/web-14.6.0.tgz#8b3824841ee679b23516aa9b316e819e55590a1c" - integrity sha512-4ZQU4wsNd4QsMe4LkF9t1y4NS2cCp1N/JfG9TYw1dsWLOJhZ0w+4ebp7cydN5BLeceIaILcfQ7fBYUvrBJN6EA== + version "14.7.0" + resolved "https://registry.npmjs.org/@react-hookz/web/-/web-14.7.0.tgz#3154b7cf38bf464e7b60417eae7f3348ce19e6f6" + integrity sha512-9AN0W3QH3Aj5/LXHKy2XiysjgvaNRLQwEVyCaU3AOMW9c1XlL5hSYc67ExubmzQRw2kAYx2Jpgl8wKCIINxsxQ== dependencies: "@react-hookz/deep-equal" "^1.0.2" From 322d1ceebab5a96a9c0a8ace16f565f84f489070 Mon Sep 17 00:00:00 2001 From: Linda Navarette Date: Thu, 30 Jun 2022 19:38:56 -0400 Subject: [PATCH 129/231] Allow configuration of base URL for Fossa links Signed-off-by: Linda Navarette --- .changeset/cuddly-flowers-provide.md | 5 +++ plugins/fossa/README.md | 5 ++- plugins/fossa/config.d.ts | 8 +++- plugins/fossa/src/api/FossaClient.test.ts | 52 +++++++++++++++++++++++ plugins/fossa/src/api/FossaClient.ts | 10 +++-- plugins/fossa/src/plugin.ts | 3 ++ 6 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 .changeset/cuddly-flowers-provide.md diff --git a/.changeset/cuddly-flowers-provide.md b/.changeset/cuddly-flowers-provide.md new file mode 100644 index 0000000000..729ac96cda --- /dev/null +++ b/.changeset/cuddly-flowers-provide.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-fossa': patch +--- + +Allow configuration of base URL for Fossa links diff --git a/plugins/fossa/README.md b/plugins/fossa/README.md index 898c9d0475..10ccba5ba7 100644 --- a/plugins/fossa/README.md +++ b/plugins/fossa/README.md @@ -43,9 +43,12 @@ proxy: headers: Authorization: token ${FOSSA_API_TOKEN} -# if you have a fossa organization, configure your id here fossa: + # if you have a fossa organization, configure your id here organizationId: + # if you have a self-managed fossa instance, + # configure the baseUrl to use for links to the fossa page here + externalLinkBaseUrl: ``` 4. Get an api-token and provide `FOSSA_AUTH_HEADER` as env variable (https://app.fossa.com/account/settings/integrations/api_tokens) diff --git a/plugins/fossa/config.d.ts b/plugins/fossa/config.d.ts index 72d844c4e9..26a2823097 100644 --- a/plugins/fossa/config.d.ts +++ b/plugins/fossa/config.d.ts @@ -20,6 +20,12 @@ export interface Config { * The organization id in fossa. * @visibility frontend */ - organizationId: string; + organizationId?: string; + + /** + * The base url to use for external links (from Backstage to Fossa). + * @visibility frontend + */ + externalLinkBaseUrl?: string; }; } diff --git a/plugins/fossa/src/api/FossaClient.test.ts b/plugins/fossa/src/api/FossaClient.test.ts index 65b0fc1d53..0e2dc81e1f 100644 --- a/plugins/fossa/src/api/FossaClient.test.ts +++ b/plugins/fossa/src/api/FossaClient.test.ts @@ -175,6 +175,58 @@ describe('FossaClient', () => { expect(summary).toBeUndefined(); }); + it('should allow custom external link base url', async () => { + client = new FossaClient({ + discoveryApi, + identityApi, + organizationId: '8736', + externalLinkBaseUrl: 'https://custom.fossa.com', // overrides the default app.fossa.com + }); + server.use( + rest.get(`${mockBaseUrl}/fossa/projects`, (req, res, ctx) => { + const expectedQuery = + 'count=1000&page=0&sort=title%2B&organizationId=8736&title=our-service'; + if (req.url.searchParams.toString() !== expectedQuery) { + return res( + ctx.status(500), + ctx.body( + `${req.url.searchParams.toString()} !== ${expectedQuery}`, + ), + ); + } + + return res( + ctx.json([ + { + locator: 'custom+8736/our-service', + title: 'our-service', + default_branch: 'develop', + revisions: [ + { + updatedAt: '2020-01-01T00:00:00Z', + dependency_count: 160, + unresolved_licensing_issue_count: 5, + unresolved_issue_count: 100, + }, + ], + }, + ]), + ); + }), + ); + + const summary = await client.getFindingSummary('our-service'); + + expect(summary).toEqual({ + timestamp: '2020-01-01T00:00:00Z', + issueCount: 5, + dependencyCount: 160, + projectDefaultBranch: 'develop', + projectUrl: + 'https://custom.fossa.com/projects/custom%2B8736%2Four-service', + } as FindingSummary); + }); + it('should handle 404 status', async () => { server.use( rest.get(`${mockBaseUrl}/fossa/projects`, (_req, res, ctx) => { diff --git a/plugins/fossa/src/api/FossaClient.ts b/plugins/fossa/src/api/FossaClient.ts index 66b44de21e..8b4b4b02e5 100644 --- a/plugins/fossa/src/api/FossaClient.ts +++ b/plugins/fossa/src/api/FossaClient.ts @@ -36,20 +36,24 @@ export class FossaClient implements FossaApi { discoveryApi: DiscoveryApi; identityApi: IdentityApi; organizationId?: string; + externalLinkBaseUrl: string; private readonly limit = pLimit(5); constructor({ discoveryApi, identityApi, organizationId, + externalLinkBaseUrl = 'https://app.fossa.com', }: { discoveryApi: DiscoveryApi; identityApi: IdentityApi; organizationId?: string; + externalLinkBaseUrl?: string; }) { this.discoveryApi = discoveryApi; this.identityApi = identityApi; this.organizationId = organizationId; + this.externalLinkBaseUrl = externalLinkBaseUrl; } private async callApi( @@ -104,9 +108,9 @@ export class FossaClient implements FossaApi { revision.unresolved_issue_count, dependencyCount: revision.dependency_count, projectDefaultBranch: project.default_branch, - projectUrl: `https://app.fossa.com/projects/${encodeURIComponent( - project.locator, - )}`, + projectUrl: `${ + this.externalLinkBaseUrl + }/projects/${encodeURIComponent(project.locator)}`, }, }; } diff --git a/plugins/fossa/src/plugin.ts b/plugins/fossa/src/plugin.ts index a586d6d8a6..954ecedc81 100644 --- a/plugins/fossa/src/plugin.ts +++ b/plugins/fossa/src/plugin.ts @@ -39,6 +39,9 @@ export const fossaPlugin = createPlugin({ discoveryApi, identityApi, organizationId: configApi.getOptionalString('fossa.organizationId'), + externalLinkBaseUrl: configApi.getOptionalString( + 'fossa.externalLinkBaseUrl', + ), }), }), ], From a21cd4346735a2e1de1a6f104135528733af323a Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Thu, 30 Jun 2022 15:25:28 +0200 Subject: [PATCH 130/231] changesets Signed-off-by: Emma Indal --- .changeset/small-shoes-hide.md | 5 +++++ .changeset/tender-chicken-learn.md | 5 +++++ .changeset/two-owls-cry.md | 6 ++++++ 3 files changed, 16 insertions(+) create mode 100644 .changeset/small-shoes-hide.md create mode 100644 .changeset/tender-chicken-learn.md create mode 100644 .changeset/two-owls-cry.md diff --git a/.changeset/small-shoes-hide.md b/.changeset/small-shoes-hide.md new file mode 100644 index 0000000000..b1f95e9f2d --- /dev/null +++ b/.changeset/small-shoes-hide.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend-node': patch +--- + +Exports `MissingIndexError` that can be used by the search engines for better error handling when missing index. diff --git a/.changeset/tender-chicken-learn.md b/.changeset/tender-chicken-learn.md new file mode 100644 index 0000000000..bd95c5545f --- /dev/null +++ b/.changeset/tender-chicken-learn.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend': patch +--- + +If error is `MissingIndexError` we return a 400 response with a more clear error message. diff --git a/.changeset/two-owls-cry.md b/.changeset/two-owls-cry.md new file mode 100644 index 0000000000..b469561ad7 --- /dev/null +++ b/.changeset/two-owls-cry.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-search-backend-module-elasticsearch': patch +'@backstage/plugin-search-backend-module-pg': patch +--- + +Throws `MissingIndexError` when no index of type exist. From faa5dde25e1dc1b24d85c5a28fadd09a6c1e1614 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Fri, 1 Jul 2022 09:30:47 +0200 Subject: [PATCH 131/231] feedback fixups Signed-off-by: Emma Indal --- .../src/engines/ElasticSearchSearchEngine.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts index eacee57e3f..42c99dfe61 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.ts @@ -331,7 +331,7 @@ export class ElasticSearchSearchEngine implements SearchEngine { previousPageCursor, }; } catch (error) { - if (error.meta.body.error.type === 'index_not_found_exception') { + if (error.meta?.body?.error?.type === 'index_not_found_exception') { throw new MissingIndexError( `Missing index for ${queryIndices}. This means there are no documents to search through.`, error, From 4881dc4c84bd5dde5adb9fd1b7ab5b6034c4a440 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 1 Jul 2022 07:47:07 +0000 Subject: [PATCH 132/231] chore(deps): update dependency openapi-types to v12 Signed-off-by: Renovate Bot --- .changeset/renovate-2ae4dda.md | 5 +++++ plugins/catalog-backend-module-openapi/package.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 .changeset/renovate-2ae4dda.md diff --git a/.changeset/renovate-2ae4dda.md b/.changeset/renovate-2ae4dda.md new file mode 100644 index 0000000000..2cedbcb9d7 --- /dev/null +++ b/.changeset/renovate-2ae4dda.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-openapi': patch +--- + +Updated dependency `openapi-types` to `^12.0.0`. diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index e2b3407bc0..306117075c 100644 --- a/plugins/catalog-backend-module-openapi/package.json +++ b/plugins/catalog-backend-module-openapi/package.json @@ -45,7 +45,7 @@ "devDependencies": { "@backstage/backend-test-utils": "^0.1.26-next.1", "@backstage/cli": "^0.18.0-next.1", - "openapi-types": "^11.0.1" + "openapi-types": "^12.0.0" }, "files": [ "dist" diff --git a/yarn.lock b/yarn.lock index 987cbcd644..78d9130d99 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19742,10 +19742,10 @@ openapi-sampler@^1.2.1: "@types/json-schema" "^7.0.7" json-pointer "0.6.2" -openapi-types@^11.0.1: - version "11.1.0" - resolved "https://registry.npmjs.org/openapi-types/-/openapi-types-11.1.0.tgz#037969f3dfa5999423ee33bf889fb0d12984277e" - integrity sha512-ZW+Jf12flFF6DXSij8DGL3svDA4RtSyHXjC/xB/JAh18gg3uVfVIFLvCfScUMowrpvlkxsMMbErakbth2g3/iQ== +openapi-types@^12.0.0: + version "12.0.0" + resolved "https://registry.npmjs.org/openapi-types/-/openapi-types-12.0.0.tgz#458a99d048f9eae1c067e15d56a8bfb3726041f1" + integrity sha512-6Wd9k8nmGQHgCbehZCP6wwWcfXcvinhybUTBatuhjRsCxUIujuYFZc9QnGeae75CyHASewBtxs0HX/qwREReUw== openid-client@^4.1.1: version "4.9.0" From 8e03db907a077cfc74d833248e75aebb24df3fdf Mon Sep 17 00:00:00 2001 From: Simone Corsi Date: Thu, 30 Jun 2022 12:55:20 +0200 Subject: [PATCH 133/231] fix(auth-backend): adds missing createAuthProviderExport Signed-off-by: Simone Corsi --- .changeset/polite-lions-sell.md | 5 +++++ plugins/auth-backend/api-report.md | 16 ++++++++++++++++ plugins/auth-backend/src/providers/index.ts | 2 ++ 3 files changed, 23 insertions(+) create mode 100644 .changeset/polite-lions-sell.md diff --git a/.changeset/polite-lions-sell.md b/.changeset/polite-lions-sell.md new file mode 100644 index 0000000000..07b5fcbd77 --- /dev/null +++ b/.changeset/polite-lions-sell.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': patch +--- + +Auth provider now also export createAuthProviderIntegration diff --git a/plugins/auth-backend/api-report.md b/plugins/auth-backend/api-report.md index d216545bd4..8c9ec14c9e 100644 --- a/plugins/auth-backend/api-report.md +++ b/plugins/auth-backend/api-report.md @@ -181,6 +181,22 @@ export type CookieConfigurer = (ctx: { secure: boolean; }; +// Warning: (ae-missing-release-tag) "createAuthProviderIntegration" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export function createAuthProviderIntegration< + TCreateOptions extends unknown[], + TResolvers extends { + [name in string]: (...args: any[]) => SignInResolver; + }, +>(config: { + create: (...args: TCreateOptions) => AuthProviderFactory; + resolvers?: TResolvers; +}): Readonly<{ + create: (...args: TCreateOptions) => AuthProviderFactory; + resolvers: Readonly; +}>; + // Warning: (ae-missing-release-tag) "createOriginFilter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) diff --git a/plugins/auth-backend/src/providers/index.ts b/plugins/auth-backend/src/providers/index.ts index de410a9407..41ee44beae 100644 --- a/plugins/auth-backend/src/providers/index.ts +++ b/plugins/auth-backend/src/providers/index.ts @@ -28,6 +28,8 @@ export type { GcpIapResult, GcpIapTokenInfo } from './gcp-iap'; export { providers, defaultAuthProviderFactories } from './providers'; +export { createAuthProviderIntegration } from './createAuthProviderIntegration'; + export type { AuthProviderConfig, AuthProviderRouteHandlers, From b84d745e1699ad22cdbda1b5528cf53665ce074e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Fri, 1 Jul 2022 10:23:02 +0200 Subject: [PATCH 134/231] impure lockfile MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- yarn.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4082736f9c..26f0069db3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6787,7 +6787,7 @@ resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== -"@types/react-dom@*", "@types/react-dom@<18.0.0": +"@types/react-dom@*", "@types/react-dom@<18.0.0", "@types/react-dom@^17": version "17.0.17" resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.17.tgz#2e3743277a793a96a99f1bf87614598289da68a1" integrity sha512-VjnqEmqGnasQKV0CWLevqMTXBYG9GbwuE6x3VetERLh0cq2LTptFE73MrQi2S7GkKXCf2GgwItB/melLnxfnsg== @@ -26313,7 +26313,7 @@ ws@^7.3.1, ws@^7.4.6: resolved "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== -ws@^8.3.0: +ws@^8.0.0, ws@^8.3.0: version "8.8.0" resolved "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz#8e71c75e2f6348dbf8d78005107297056cb77769" integrity sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ== From 1807f6a50344632a0e39b4963a282827fe658849 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Fri, 1 Jul 2022 10:52:54 +0200 Subject: [PATCH 135/231] Permission framework docs: fix condition exports Signed-off-by: Vincenzo Scamporlino --- .../plugin-authors/03-adding-a-resource-permission-check.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md index e818557402..79fd3d9c69 100644 --- a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md +++ b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md @@ -163,8 +163,8 @@ import { createConditionExports } from '@backstage/plugin-permission-node'; import { permissionRules } from './service/rules'; const { conditions, createConditionalDecision } = createConditionExports({ - pluginId: 'catalog', - resourceType: RESOURCE_TYPE_CATALOG_ENTITY, + pluginId: 'todolist', + resourceType: TODO_LIST_RESOURCE_TYPE, rules: permissionRules, }); From 03de4ce96198ecca6fcfd17f948493bd158e7b51 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 1 Jul 2022 09:12:50 +0000 Subject: [PATCH 136/231] fix(deps): update dependency @graphql-tools/schema to v8.5.0 Signed-off-by: Renovate Bot --- yarn.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yarn.lock b/yarn.lock index 75721232fb..7e4eda9c3d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6787,7 +6787,7 @@ resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== -"@types/react-dom@*", "@types/react-dom@<18.0.0": +"@types/react-dom@*", "@types/react-dom@<18.0.0", "@types/react-dom@^17": version "17.0.17" resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.17.tgz#2e3743277a793a96a99f1bf87614598289da68a1" integrity sha512-VjnqEmqGnasQKV0CWLevqMTXBYG9GbwuE6x3VetERLh0cq2LTptFE73MrQi2S7GkKXCf2GgwItB/melLnxfnsg== @@ -26313,7 +26313,7 @@ ws@^7.3.1, ws@^7.4.6: resolved "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== -ws@^8.3.0: +ws@^8.0.0, ws@^8.3.0: version "8.8.0" resolved "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz#8e71c75e2f6348dbf8d78005107297056cb77769" integrity sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ== From 4b91e15fca3d5550ecb9e3ea097d1823ee7f02bc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 1 Jul 2022 10:01:20 +0000 Subject: [PATCH 137/231] chore(deps): update dependency puppeteer to v15 Signed-off-by: Renovate Bot --- packages/e2e-test/package.json | 2 +- yarn.lock | 33 ++++++++++++++------------------- 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json index 09ed0c3a48..333ac09b23 100644 --- a/packages/e2e-test/package.json +++ b/packages/e2e-test/package.json @@ -40,7 +40,7 @@ "fs-extra": "10.1.0", "handlebars": "^4.7.3", "pgtools": "^0.3.0", - "puppeteer": "^14.0.0", + "puppeteer": "^15.0.0", "tree-kill": "^1.2.2", "ts-node": "^10.0.0" }, diff --git a/yarn.lock b/yarn.lock index 7e4eda9c3d..59b39fca31 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11461,10 +11461,10 @@ detect-port-alt@^1.1.6: address "^1.0.1" debug "^2.6.0" -devtools-protocol@0.0.1001819: - version "0.0.1001819" - resolved "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1001819.tgz#0a98f44cefdb02cc684f3d5e6bd898a1690231d9" - integrity sha512-G6OsIFnv/rDyxSqBa2lDLR6thp9oJioLsb2Gl+LbQlyoA9/OBAkrTU9jiCcQ8Pnh7z4d6slDiLaogR5hzgJLmQ== +devtools-protocol@0.0.1011705: + version "0.0.1011705" + resolved "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1011705.tgz#2582ed29f84848df83fba488122015540a744539" + integrity sha512-OKvTvu9n3swmgYshvsyVHYX0+aPzCoYUnyXUacfQMmFtBtBKewV/gT4I9jkAbpTqtTi2E4S9MXLlvzBDUlqg0Q== dezalgo@1.0.3, dezalgo@^1.0.0: version "1.0.3" @@ -21440,14 +21440,14 @@ pupa@^2.1.1: dependencies: escape-goat "^2.0.0" -puppeteer@^14.0.0: - version "14.4.1" - resolved "https://registry.npmjs.org/puppeteer/-/puppeteer-14.4.1.tgz#6c7437a65f7ba98ef8ad7c2b0f1cf808e91617bb" - integrity sha512-+H0Gm84aXUvSLdSiDROtLlOofftClgw2TdceMvvCU9UvMryappoeS3+eOLfKvoy4sm8B8MWnYmPhWxVFudAOFQ== +puppeteer@^15.0.0: + version "15.2.0" + resolved "https://registry.npmjs.org/puppeteer/-/puppeteer-15.2.0.tgz#9cd81334f9c6a2e1c972b5a7ecf3f18ab3bfb978" + integrity sha512-6Mzj5pbq4J4DxJE5o6V+arrOB9Gma0CxOLP1zKYMrMR7AYuNaPzsK7pBrpDwI64W6Mxk5G7NqiLSFTrgSzR1zg== dependencies: cross-fetch "3.1.5" debug "4.3.4" - devtools-protocol "0.0.1001819" + devtools-protocol "0.0.1011705" extract-zip "2.0.1" https-proxy-agent "5.0.1" pkg-dir "4.2.0" @@ -21456,7 +21456,7 @@ puppeteer@^14.0.0: rimraf "3.0.2" tar-fs "2.1.1" unbzip2-stream "1.4.3" - ws "8.7.0" + ws "8.8.0" q@^1.5.1: version "1.5.1" @@ -26303,21 +26303,16 @@ write-pkg@^4.0.0: type-fest "^0.4.1" write-json-file "^3.2.0" -ws@8.7.0: - version "8.7.0" - resolved "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz#eaf9d874b433aa00c0e0d8752532444875db3957" - integrity sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg== +ws@8.8.0, ws@^8.0.0, ws@^8.3.0: + version "8.8.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz#8e71c75e2f6348dbf8d78005107297056cb77769" + integrity sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ== ws@^7.3.1, ws@^7.4.6: version "7.5.7" resolved "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== -ws@^8.0.0, ws@^8.3.0: - version "8.8.0" - resolved "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz#8e71c75e2f6348dbf8d78005107297056cb77769" - integrity sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ== - ws@^8.4.2: version "8.5.0" resolved "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" From 477b6440b24efe1660dc8c5db6fa6f19f221d225 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Fri, 1 Jul 2022 23:26:38 +0200 Subject: [PATCH 138/231] Fix export conditional utilities Signed-off-by: Vincenzo Scamporlino --- .../03-adding-a-resource-permission-check.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md index 79fd3d9c69..a76518b202 100644 --- a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md +++ b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md @@ -160,12 +160,12 @@ Create a new `plugins/todo-list-backend/src/conditionExports.ts` file and add th ```typescript import { TODO_LIST_RESOURCE_TYPE } from '@internal/plugin-todo-list-common'; import { createConditionExports } from '@backstage/plugin-permission-node'; -import { permissionRules } from './service/rules'; +import { rules } from './service/rules'; const { conditions, createConditionalDecision } = createConditionExports({ pluginId: 'todolist', resourceType: TODO_LIST_RESOURCE_TYPE, - rules: permissionRules, + rules, }); export const todoListConditions = conditions; @@ -173,7 +173,12 @@ export const todoListConditions = conditions; export const createTodoListConditionalDecision = createConditionalDecision; ``` -Make sure `todoListConditions` and `createTodoListConditionalDecision` are exported from the `todo-list-backend` package. +Make sure `todoListConditions` and `createTodoListConditionalDecision` are exported from the `todo-list-backend` package by editing `plugins/todo-list-backend/src/index.ts`: + +```diff + export * from './service/router'; ++ export * from './conditionExports'; +``` ## Test the authorized update endpoint From 716491c672a05b22bf6cd4c2fde196744e5c723e Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Fri, 1 Jul 2022 10:22:19 +0200 Subject: [PATCH 139/231] fix(catalog): searh result base url Signed-off-by: Camila Belo --- .../CatalogSearchResultListItem.tsx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx b/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx index a7307055c2..fbb8f7b132 100644 --- a/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx +++ b/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx @@ -25,7 +25,7 @@ import { makeStyles, } from '@material-ui/core'; import { Link } from '@backstage/core-components'; -import { useAnalytics } from '@backstage/core-plugin-api'; +import { configApiRef, useAnalytics, useApi } from '@backstage/core-plugin-api'; import { IndexableDocument, ResultHighlight, @@ -63,15 +63,19 @@ export function CatalogSearchResultListItem( const classes = useStyles(); const analytics = useAnalytics(); + + const configApi = useApi(configApiRef); + const to = configApi.getString('app.baseUrl').concat(result.location); + const handleClick = () => { analytics.captureEvent('discover', result.title, { - attributes: { to: result.location }, + attributes: { to }, value: props.rank, }); }; return ( - + {props.icon && {props.icon}}
From e4236a46524ff1c50e95c69eb9572386547957f9 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Fri, 1 Jul 2022 10:23:34 +0200 Subject: [PATCH 140/231] fix(search-react): result base url Signed-off-by: Camila Belo --- .../DefaultResultListItem.tsx | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx b/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx index f4260525d6..f410bb24f4 100644 --- a/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx +++ b/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx @@ -15,7 +15,12 @@ */ import React, { ReactNode } from 'react'; -import { AnalyticsContext, useAnalytics } from '@backstage/core-plugin-api'; +import { + AnalyticsContext, + configApiRef, + useAnalytics, + useApi, +} from '@backstage/core-plugin-api'; import { ResultHighlight, SearchDocument, @@ -58,15 +63,19 @@ export const DefaultResultListItemComponent = ({ lineClamp = 5, }: DefaultResultListItemProps) => { const analytics = useAnalytics(); + const configApi = useApi(configApiRef); + + const to = configApi.getString('app.baseUrl').concat(result.location); + const handleClick = () => { analytics.captureEvent('discover', result.title, { - attributes: { to: result.location }, + attributes: { to }, value: rank, }); }; return ( - + {icon && {icon}} Date: Fri, 1 Jul 2022 10:27:13 +0200 Subject: [PATCH 141/231] fix(techdocs): searh result base url Signed-off-by: Camila Belo --- .../components/TechDocsSearchResultListItem.tsx | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx b/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx index 430165bf8b..55731e6f2a 100644 --- a/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx +++ b/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx @@ -23,7 +23,7 @@ import { makeStyles, } from '@material-ui/core'; import { Link } from '@backstage/core-components'; -import { useAnalytics } from '@backstage/core-plugin-api'; +import { configApiRef, useAnalytics, useApi } from '@backstage/core-plugin-api'; import { ResultHighlight } from '@backstage/plugin-search-common'; import { HighlightedSearchResultText } from '@backstage/plugin-search-react'; @@ -74,9 +74,12 @@ export const TechDocsSearchResultListItem = ( const classes = useStyles(); const analytics = useAnalytics(); + const configApi = useApi(configApiRef); + const handleClick = () => { + const to = configApi.getString('app.baseUrl').concat(result.location); analytics.captureEvent('discover', result.title, { - attributes: { to: result.location }, + attributes: { to }, value: rank, }); }; @@ -149,14 +152,16 @@ export const TechDocsSearchResultListItem = ( ); }; - const LinkWrapper = ({ children }: PropsWithChildren<{}>) => - asLink ? ( - + const LinkWrapper = ({ children }: PropsWithChildren<{}>) => { + const to = configApi.getString('app.baseUrl').concat(result.location); + return asLink ? ( + {children} ) : ( <>{children} ); + }; const ListItemWrapper = ({ children }: PropsWithChildren<{}>) => asListItem ? ( From aa9cddeaa7a429c5af1ca7e6389b23c8dddb2fe5 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Fri, 1 Jul 2022 10:37:42 +0200 Subject: [PATCH 142/231] refactor: checks if search results are relatives Signed-off-by: Camila Belo --- .../CatalogSearchResultListItem.tsx | 6 +++++- .../DefaultResultListItem/DefaultResultListItem.tsx | 6 +++++- .../components/TechDocsSearchResultListItem.tsx | 12 ++++++++++-- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx b/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx index fbb8f7b132..807ba611d9 100644 --- a/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx +++ b/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx @@ -65,7 +65,11 @@ export function CatalogSearchResultListItem( const analytics = useAnalytics(); const configApi = useApi(configApiRef); - const to = configApi.getString('app.baseUrl').concat(result.location); + let to = result.location; + // Is relative url + if (!to.match(/^([a-z]*:)?\/\//i)) { + to = configApi.getString('app.baseUrl').concat(to); + } const handleClick = () => { analytics.captureEvent('discover', result.title, { diff --git a/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx b/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx index f410bb24f4..fabf61c813 100644 --- a/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx +++ b/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx @@ -65,7 +65,11 @@ export const DefaultResultListItemComponent = ({ const analytics = useAnalytics(); const configApi = useApi(configApiRef); - const to = configApi.getString('app.baseUrl').concat(result.location); + let to = result.location; + // Is relative url + if (!to.match(/^([a-z]*:)?\/\//i)) { + to = configApi.getString('app.baseUrl').concat(to); + } const handleClick = () => { analytics.captureEvent('discover', result.title, { diff --git a/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx b/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx index 55731e6f2a..d0969ee075 100644 --- a/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx +++ b/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx @@ -77,7 +77,11 @@ export const TechDocsSearchResultListItem = ( const configApi = useApi(configApiRef); const handleClick = () => { - const to = configApi.getString('app.baseUrl').concat(result.location); + let to = result.location; + // Is relative url + if (!to.match(/^([a-z]*:)?\/\//i)) { + to = configApi.getString('app.baseUrl').concat(to); + } analytics.captureEvent('discover', result.title, { attributes: { to }, value: rank, @@ -153,7 +157,11 @@ export const TechDocsSearchResultListItem = ( }; const LinkWrapper = ({ children }: PropsWithChildren<{}>) => { - const to = configApi.getString('app.baseUrl').concat(result.location); + let to = result.location; + // Is relative url + if (!to.match(/^([a-z]*:)?\/\//i)) { + to = configApi.getString('app.baseUrl').concat(to); + } return asLink ? ( {children} From ae53c3a11cdfe8a6909b7b5792ec4b200c059ce7 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Fri, 1 Jul 2022 11:12:34 +0200 Subject: [PATCH 143/231] refactor: extract use search result location hook Signed-off-by: Camila Belo --- .../CatalogSearchResultListItem.tsx | 14 ++++---- .../DefaultResultListItem.tsx | 15 ++------ .../components/DefaultResultListItem/index.ts | 1 + .../useSearchResultLocation.tsx | 36 +++++++++++++++++++ .../TechDocsSearchResultListItem.tsx | 25 +++++-------- 5 files changed, 55 insertions(+), 36 deletions(-) create mode 100644 plugins/search-react/src/components/DefaultResultListItem/useSearchResultLocation.tsx diff --git a/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx b/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx index 807ba611d9..cc9dc0f441 100644 --- a/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx +++ b/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx @@ -25,12 +25,15 @@ import { makeStyles, } from '@material-ui/core'; import { Link } from '@backstage/core-components'; -import { configApiRef, useAnalytics, useApi } from '@backstage/core-plugin-api'; +import { useAnalytics } from '@backstage/core-plugin-api'; import { IndexableDocument, ResultHighlight, } from '@backstage/plugin-search-common'; -import { HighlightedSearchResultText } from '@backstage/plugin-search-react'; +import { + HighlightedSearchResultText, + useSearchResultLocation, +} from '@backstage/plugin-search-react'; const useStyles = makeStyles({ flexContainer: { @@ -64,12 +67,7 @@ export function CatalogSearchResultListItem( const classes = useStyles(); const analytics = useAnalytics(); - const configApi = useApi(configApiRef); - let to = result.location; - // Is relative url - if (!to.match(/^([a-z]*:)?\/\//i)) { - to = configApi.getString('app.baseUrl').concat(to); - } + const to = useSearchResultLocation(result); const handleClick = () => { analytics.captureEvent('discover', result.title, { diff --git a/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx b/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx index fabf61c813..2e81f50d2e 100644 --- a/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx +++ b/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx @@ -15,12 +15,7 @@ */ import React, { ReactNode } from 'react'; -import { - AnalyticsContext, - configApiRef, - useAnalytics, - useApi, -} from '@backstage/core-plugin-api'; +import { AnalyticsContext, useAnalytics } from '@backstage/core-plugin-api'; import { ResultHighlight, SearchDocument, @@ -34,6 +29,7 @@ import { Divider, } from '@material-ui/core'; import { Link } from '@backstage/core-components'; +import { useSearchResultLocation } from './useSearchResultLocation'; /** * Props for {@link DefaultResultListItem} @@ -63,13 +59,8 @@ export const DefaultResultListItemComponent = ({ lineClamp = 5, }: DefaultResultListItemProps) => { const analytics = useAnalytics(); - const configApi = useApi(configApiRef); - let to = result.location; - // Is relative url - if (!to.match(/^([a-z]*:)?\/\//i)) { - to = configApi.getString('app.baseUrl').concat(to); - } + const to = useSearchResultLocation(result); const handleClick = () => { analytics.captureEvent('discover', result.title, { diff --git a/plugins/search-react/src/components/DefaultResultListItem/index.ts b/plugins/search-react/src/components/DefaultResultListItem/index.ts index a555f25c02..0e50f25cec 100644 --- a/plugins/search-react/src/components/DefaultResultListItem/index.ts +++ b/plugins/search-react/src/components/DefaultResultListItem/index.ts @@ -16,3 +16,4 @@ export { DefaultResultListItem } from './DefaultResultListItem'; export type { DefaultResultListItemProps } from './DefaultResultListItem'; +export { useSearchResultLocation } from './useSearchResultLocation'; diff --git a/plugins/search-react/src/components/DefaultResultListItem/useSearchResultLocation.tsx b/plugins/search-react/src/components/DefaultResultListItem/useSearchResultLocation.tsx new file mode 100644 index 0000000000..c80d335354 --- /dev/null +++ b/plugins/search-react/src/components/DefaultResultListItem/useSearchResultLocation.tsx @@ -0,0 +1,36 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { configApiRef, useApi } from '@backstage/core-plugin-api'; +import { SearchDocument } from '@backstage/plugin-search-common'; + +/** + * Builds a search result url. + * @param document - A search result item. + * @returns Add app base url as location prefix when location is relative. + */ +export const useSearchResultLocation = (document: SearchDocument) => { + const configApi = useApi(configApiRef); + + let location = document.location; + + const isRelative = !location.match(/^([a-z]*:)?\/\//i); + if (isRelative) { + location = configApi.getString('app.baseUrl').concat(location); + } + + return location; +}; diff --git a/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx b/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx index d0969ee075..bd92bde88c 100644 --- a/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx +++ b/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx @@ -23,9 +23,12 @@ import { makeStyles, } from '@material-ui/core'; import { Link } from '@backstage/core-components'; -import { configApiRef, useAnalytics, useApi } from '@backstage/core-plugin-api'; +import { useAnalytics } from '@backstage/core-plugin-api'; import { ResultHighlight } from '@backstage/plugin-search-common'; -import { HighlightedSearchResultText } from '@backstage/plugin-search-react'; +import { + HighlightedSearchResultText, + useSearchResultLocation, +} from '@backstage/plugin-search-react'; const useStyles = makeStyles({ flexContainer: { @@ -74,14 +77,10 @@ export const TechDocsSearchResultListItem = ( const classes = useStyles(); const analytics = useAnalytics(); - const configApi = useApi(configApiRef); + + const to = useSearchResultLocation(result); const handleClick = () => { - let to = result.location; - // Is relative url - if (!to.match(/^([a-z]*:)?\/\//i)) { - to = configApi.getString('app.baseUrl').concat(to); - } analytics.captureEvent('discover', result.title, { attributes: { to }, value: rank, @@ -156,20 +155,14 @@ export const TechDocsSearchResultListItem = ( ); }; - const LinkWrapper = ({ children }: PropsWithChildren<{}>) => { - let to = result.location; - // Is relative url - if (!to.match(/^([a-z]*:)?\/\//i)) { - to = configApi.getString('app.baseUrl').concat(to); - } - return asLink ? ( + const LinkWrapper = ({ children }: PropsWithChildren<{}>) => + asLink ? ( {children} ) : ( <>{children} ); - }; const ListItemWrapper = ({ children }: PropsWithChildren<{}>) => asListItem ? ( From a6ba513f4c4d8e0eab931076141f1cccb1378fd5 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Fri, 1 Jul 2022 13:26:17 +0200 Subject: [PATCH 144/231] test(search-react): cover useSearchResultLocation Signed-off-by: Camila Belo --- .../useSearchResultLocation.test.tsx | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 plugins/search-react/src/components/DefaultResultListItem/useSearchResultLocation.test.tsx diff --git a/plugins/search-react/src/components/DefaultResultListItem/useSearchResultLocation.test.tsx b/plugins/search-react/src/components/DefaultResultListItem/useSearchResultLocation.test.tsx new file mode 100644 index 0000000000..012f648dac --- /dev/null +++ b/plugins/search-react/src/components/DefaultResultListItem/useSearchResultLocation.test.tsx @@ -0,0 +1,60 @@ +/* + * 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 React from 'react'; +import { ConfigReader } from '@backstage/core-app-api'; +import { configApiRef } from '@backstage/core-plugin-api'; +import { TestApiProvider } from '@backstage/test-utils'; +import { renderHook, WrapperComponent } from '@testing-library/react-hooks'; +import { useSearchResultLocation } from './useSearchResultLocation'; + +describe('useSearchResultLocation', () => { + const baseUrl = 'http://localhost:3000/example'; + const configApiMock = new ConfigReader({ app: { baseUrl } }); + const wrapper: WrapperComponent<{}> = ({ children }) => ( + + {children} + + ); + + it('should concatenate base url into relative urls', () => { + const document = { + title: 'artist-lookup', + text: 'Artist Lookup', + location: '/catalog/default/component/artist-lookup', + }; + + const { result } = renderHook(() => useSearchResultLocation(document), { + wrapper, + }); + + expect(result.current).toBe(baseUrl.concat(document.location)); + }); + + it('should not concatenate base url into absolute urls', () => { + const document = { + title: 'What is Backstage?', + text: 'An open platform for building developer portals ', + location: 'https://stackoverflow.com/questions/1/what-is-backstage', + }; + + const { result } = renderHook(() => useSearchResultLocation(document), { + wrapper, + }); + + expect(result.current).toBe(document.location); + }); +}); From d1b99b5042040e7b8638f39563b316882772f94a Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Fri, 1 Jul 2022 13:41:03 +0200 Subject: [PATCH 145/231] chore: add changeset file Signed-off-by: Camila Belo --- .changeset/wicked-feet-poke.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/wicked-feet-poke.md diff --git a/.changeset/wicked-feet-poke.md b/.changeset/wicked-feet-poke.md new file mode 100644 index 0000000000..533b415cd3 --- /dev/null +++ b/.changeset/wicked-feet-poke.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-catalog': patch +'@backstage/plugin-search-react': patch +'@backstage/plugin-techdocs': patch +--- + +Fix the relative search result locations by concatenating the app's base URL into it. From 7f5e79961d316ceeef139e055c70b16fc0270430 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Fri, 1 Jul 2022 16:20:39 +0200 Subject: [PATCH 146/231] refactor: move fix to the Link component Signed-off-by: Camila Belo --- .changeset/ninety-coats-learn.md | 5 + .changeset/wicked-feet-poke.md | 7 -- packages/core-app-api/api-report.md | 3 + packages/core-app-api/src/app/AppManager.tsx | 3 +- packages/core-app-api/src/app/index.ts | 1 + packages/core-components/package.json | 1 + .../src/components/Link/Link.test.tsx | 99 ++++++++++++++++++- .../src/components/Link/Link.tsx | 26 ++++- .../CatalogSearchResultListItem.tsx | 12 +-- .../DefaultResultListItem.tsx | 8 +- .../components/DefaultResultListItem/index.ts | 1 - .../useSearchResultLocation.test.tsx | 60 ----------- .../useSearchResultLocation.tsx | 36 ------- .../TechDocsSearchResultListItem.tsx | 12 +-- 14 files changed, 138 insertions(+), 136 deletions(-) create mode 100644 .changeset/ninety-coats-learn.md delete mode 100644 .changeset/wicked-feet-poke.md delete mode 100644 plugins/search-react/src/components/DefaultResultListItem/useSearchResultLocation.test.tsx delete mode 100644 plugins/search-react/src/components/DefaultResultListItem/useSearchResultLocation.tsx diff --git a/.changeset/ninety-coats-learn.md b/.changeset/ninety-coats-learn.md new file mode 100644 index 0000000000..19d56aa128 --- /dev/null +++ b/.changeset/ninety-coats-learn.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Fix the relative `sub-paths` by concatenating the app's base URL with them. diff --git a/.changeset/wicked-feet-poke.md b/.changeset/wicked-feet-poke.md deleted file mode 100644 index 533b415cd3..0000000000 --- a/.changeset/wicked-feet-poke.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-catalog': patch -'@backstage/plugin-search-react': patch -'@backstage/plugin-techdocs': patch ---- - -Fix the relative search result locations by concatenating the app's base URL into it. diff --git a/packages/core-app-api/api-report.md b/packages/core-app-api/api-report.md index 116b33c598..6cbff05709 100644 --- a/packages/core-app-api/api-report.md +++ b/packages/core-app-api/api-report.md @@ -372,6 +372,9 @@ export type FlatRoutesProps = { children: ReactNode; }; +// @public +export function getBasePath(configApi: Config): string; + // @public export class GithubAuth { // (undocumented) diff --git a/packages/core-app-api/src/app/AppManager.tsx b/packages/core-app-api/src/app/AppManager.tsx index f47ddf676a..25aa606e4e 100644 --- a/packages/core-app-api/src/app/AppManager.tsx +++ b/packages/core-app-api/src/app/AppManager.tsx @@ -95,8 +95,9 @@ const InternalAppContext = createContext<{ * Get the app base path from the configured app baseUrl. * * The returned path does not have a trailing slash. + * @public */ -function getBasePath(configApi: Config) { +export function getBasePath(configApi: Config) { let { pathname } = new URL( configApi.getOptionalString('app.baseUrl') ?? '/', 'http://dummy.dev', // baseUrl can be specified as just a path diff --git a/packages/core-app-api/src/app/index.ts b/packages/core-app-api/src/app/index.ts index 7843b36339..4d4ddf7e8b 100644 --- a/packages/core-app-api/src/app/index.ts +++ b/packages/core-app-api/src/app/index.ts @@ -16,4 +16,5 @@ export { createSpecializedApp } from './createSpecializedApp'; export { defaultConfigLoader } from './defaultConfigLoader'; +export { getBasePath } from './AppManager'; export * from './types'; diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 51cbc37a1b..0202904448 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -34,6 +34,7 @@ }, "dependencies": { "@backstage/config": "^1.0.1", + "@backstage/core-app-api": "^1.0.4-next.0", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", "@backstage/theme": "^0.2.16-next.0", diff --git a/packages/core-components/src/components/Link/Link.test.tsx b/packages/core-components/src/components/Link/Link.test.tsx index 8c6ed54d76..5cfeaa4869 100644 --- a/packages/core-components/src/components/Link/Link.test.tsx +++ b/packages/core-components/src/components/Link/Link.test.tsx @@ -21,9 +21,11 @@ import { TestApiProvider, wrapInTestApp, } from '@backstage/test-utils'; -import { analyticsApiRef } from '@backstage/core-plugin-api'; -import { isExternalUri, Link } from './Link'; +import { analyticsApiRef, configApiRef } from '@backstage/core-plugin-api'; +import { isExternalUri, Link, useResolvedPath } from './Link'; import { Route, Routes } from 'react-router'; +import { renderHook, WrapperComponent } from '@testing-library/react-hooks'; +import { ConfigReader } from '@backstage/config'; describe('', () => { it('navigates using react-router', async () => { @@ -103,6 +105,58 @@ describe('', () => { }); }); + describe('resolves a sub-path correctly', () => { + it('when it starts with base path', async () => { + const testString = 'This is test string'; + const linkText = 'Navigate!'; + const configApi = new ConfigReader({ + app: { baseUrl: 'http://localhost:3000/example' }, + }); + + const { getByText } = render( + wrapInTestApp( + + + {linkText} + {testString}

} /> +
+
, + ), + ); + + expect(() => getByText(testString)).toThrow(); + fireEvent.click(getByText(linkText)); + await waitFor(() => { + expect(getByText(testString)).toBeInTheDocument(); + }); + }); + + it('when it does not start with base path', async () => { + const testString = 'This is test string'; + const linkText = 'Navigate!'; + const configApi = new ConfigReader({ + app: { baseUrl: 'http://localhost:3000/example' }, + }); + + const { getByText } = render( + wrapInTestApp( + + + {linkText} + {testString}

} /> +
+
, + ), + ); + + expect(() => getByText(testString)).toThrow(); + fireEvent.click(getByText(linkText)); + await waitFor(() => { + expect(getByText(testString)).toBeInTheDocument(); + }); + }); + }); + describe('isExternalUri', () => { it.each([ [true, 'http://'], @@ -128,4 +182,45 @@ describe('', () => { expect(isExternalUri(uri)).toBe(expected); }); }); + + describe('useResolvedPath', () => { + const wrapper: WrapperComponent<{}> = ({ children }) => { + const configApi = new ConfigReader({ + app: { baseUrl: 'http://localhost:3000/example' }, + }); + return ( + + {children} + + ); + }; + + describe('concatenate base path', () => { + it('when uri is internal and does not start with base path', () => { + const path = '/catalog/default/component/artist-lookup'; + const { result } = renderHook(() => useResolvedPath(path), { + wrapper, + }); + expect(result.current).toBe('/example'.concat(path)); + }); + }); + + describe('does not concatenate base path', () => { + it('when uri is external', () => { + const path = 'https://stackoverflow.com/questions/1/example'; + const { result } = renderHook(() => useResolvedPath(path), { + wrapper, + }); + expect(result.current).toBe(path); + }); + + it('when uri already starts with base path', () => { + const path = '/example/catalog/default/component/artist-lookup'; + const { result } = renderHook(() => useResolvedPath(path), { + wrapper, + }); + expect(result.current).toBe(path); + }); + }); + }); }); diff --git a/packages/core-components/src/components/Link/Link.tsx b/packages/core-components/src/components/Link/Link.tsx index 5809990b92..d404755b54 100644 --- a/packages/core-components/src/components/Link/Link.tsx +++ b/packages/core-components/src/components/Link/Link.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { useAnalytics } from '@backstage/core-plugin-api'; +import { configApiRef, useAnalytics, useApi } from '@backstage/core-plugin-api'; import classnames from 'classnames'; import MaterialLink, { LinkProps as MaterialLinkProps, @@ -25,6 +25,7 @@ import { Link as RouterLink, LinkProps as RouterLinkProps, } from 'react-router-dom'; +import { getBasePath } from '@backstage/core-app-api'; const useStyles = makeStyles( { @@ -52,6 +53,20 @@ export type LinkProps = MaterialLinkProps & noTrack?: boolean; }; +export const useResolvedPath = (uri: LinkProps['to']) => { + const configApi = useApi(configApiRef); + const basePath = getBasePath(configApi); + + let resolvedPath = String(uri); + const external = isExternalUri(resolvedPath); + + if (!external && !resolvedPath.startsWith(basePath)) { + resolvedPath = basePath.concat(resolvedPath); + } + + return resolvedPath; +}; + /** * Given a react node, try to retrieve its text content. */ @@ -84,7 +99,7 @@ export const Link = React.forwardRef( ({ onClick, noTrack, ...props }, ref) => { const classes = useStyles(); const analytics = useAnalytics(); - const to = String(props.to); + const to = useResolvedPath(props.to); const linkText = getNodeText(props.children) || to; const external = isExternalUri(to); const newWindow = external && !!/^https?:/.exec(to); @@ -99,11 +114,11 @@ export const Link = React.forwardRef( return external ? ( // External links {props.children} @@ -112,10 +127,11 @@ export const Link = React.forwardRef( ) : ( // Interact with React Router for internal links ); }, diff --git a/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx b/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx index cc9dc0f441..a7307055c2 100644 --- a/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx +++ b/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx @@ -30,10 +30,7 @@ import { IndexableDocument, ResultHighlight, } from '@backstage/plugin-search-common'; -import { - HighlightedSearchResultText, - useSearchResultLocation, -} from '@backstage/plugin-search-react'; +import { HighlightedSearchResultText } from '@backstage/plugin-search-react'; const useStyles = makeStyles({ flexContainer: { @@ -66,18 +63,15 @@ export function CatalogSearchResultListItem( const classes = useStyles(); const analytics = useAnalytics(); - - const to = useSearchResultLocation(result); - const handleClick = () => { analytics.captureEvent('discover', result.title, { - attributes: { to }, + attributes: { to: result.location }, value: props.rank, }); }; return ( - + {props.icon && {props.icon}}
diff --git a/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx b/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx index 2e81f50d2e..f4260525d6 100644 --- a/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx +++ b/plugins/search-react/src/components/DefaultResultListItem/DefaultResultListItem.tsx @@ -29,7 +29,6 @@ import { Divider, } from '@material-ui/core'; import { Link } from '@backstage/core-components'; -import { useSearchResultLocation } from './useSearchResultLocation'; /** * Props for {@link DefaultResultListItem} @@ -59,18 +58,15 @@ export const DefaultResultListItemComponent = ({ lineClamp = 5, }: DefaultResultListItemProps) => { const analytics = useAnalytics(); - - const to = useSearchResultLocation(result); - const handleClick = () => { analytics.captureEvent('discover', result.title, { - attributes: { to }, + attributes: { to: result.location }, value: rank, }); }; return ( - + {icon && {icon}} { - const baseUrl = 'http://localhost:3000/example'; - const configApiMock = new ConfigReader({ app: { baseUrl } }); - const wrapper: WrapperComponent<{}> = ({ children }) => ( - - {children} - - ); - - it('should concatenate base url into relative urls', () => { - const document = { - title: 'artist-lookup', - text: 'Artist Lookup', - location: '/catalog/default/component/artist-lookup', - }; - - const { result } = renderHook(() => useSearchResultLocation(document), { - wrapper, - }); - - expect(result.current).toBe(baseUrl.concat(document.location)); - }); - - it('should not concatenate base url into absolute urls', () => { - const document = { - title: 'What is Backstage?', - text: 'An open platform for building developer portals ', - location: 'https://stackoverflow.com/questions/1/what-is-backstage', - }; - - const { result } = renderHook(() => useSearchResultLocation(document), { - wrapper, - }); - - expect(result.current).toBe(document.location); - }); -}); diff --git a/plugins/search-react/src/components/DefaultResultListItem/useSearchResultLocation.tsx b/plugins/search-react/src/components/DefaultResultListItem/useSearchResultLocation.tsx deleted file mode 100644 index c80d335354..0000000000 --- a/plugins/search-react/src/components/DefaultResultListItem/useSearchResultLocation.tsx +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { configApiRef, useApi } from '@backstage/core-plugin-api'; -import { SearchDocument } from '@backstage/plugin-search-common'; - -/** - * Builds a search result url. - * @param document - A search result item. - * @returns Add app base url as location prefix when location is relative. - */ -export const useSearchResultLocation = (document: SearchDocument) => { - const configApi = useApi(configApiRef); - - let location = document.location; - - const isRelative = !location.match(/^([a-z]*:)?\/\//i); - if (isRelative) { - location = configApi.getString('app.baseUrl').concat(location); - } - - return location; -}; diff --git a/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx b/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx index bd92bde88c..430165bf8b 100644 --- a/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx +++ b/plugins/techdocs/src/search/components/TechDocsSearchResultListItem.tsx @@ -25,10 +25,7 @@ import { import { Link } from '@backstage/core-components'; import { useAnalytics } from '@backstage/core-plugin-api'; import { ResultHighlight } from '@backstage/plugin-search-common'; -import { - HighlightedSearchResultText, - useSearchResultLocation, -} from '@backstage/plugin-search-react'; +import { HighlightedSearchResultText } from '@backstage/plugin-search-react'; const useStyles = makeStyles({ flexContainer: { @@ -77,12 +74,9 @@ export const TechDocsSearchResultListItem = ( const classes = useStyles(); const analytics = useAnalytics(); - - const to = useSearchResultLocation(result); - const handleClick = () => { analytics.captureEvent('discover', result.title, { - attributes: { to }, + attributes: { to: result.location }, value: rank, }); }; @@ -157,7 +151,7 @@ export const TechDocsSearchResultListItem = ( const LinkWrapper = ({ children }: PropsWithChildren<{}>) => asLink ? ( - + {children} ) : ( From 50c698f345a8c1a24724119678bb94a6082d5aac Mon Sep 17 00:00:00 2001 From: Andrew Thauer Date: Sat, 2 Jul 2022 07:55:52 -0400 Subject: [PATCH 147/231] fix: cost-insights api docs warnings Signed-off-by: Andrew Thauer --- plugins/cost-insights/api-report.md | 11 ---- plugins/cost-insights/src/types/index.ts | 74 ++++++++++++++++-------- 2 files changed, 50 insertions(+), 35 deletions(-) diff --git a/plugins/cost-insights/api-report.md b/plugins/cost-insights/api-report.md index a646cddeab..5a9024de5a 100644 --- a/plugins/cost-insights/api-report.md +++ b/plugins/cost-insights/api-report.md @@ -272,7 +272,6 @@ export type BarChartTooltipProps = { actions?: ReactNode; }; -// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" // Warning: (ae-missing-release-tag) "ChangeStatistic" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @deprecated (undocumented) @@ -296,7 +295,6 @@ export type ChartData = { [key: string]: number; }; -// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" // Warning: (ae-missing-release-tag) "Cost" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @deprecated (undocumented) @@ -450,7 +448,6 @@ export enum DataKey { Previous = 'previous', } -// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" // Warning: (ae-missing-release-tag) "DateAggregation" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @deprecated (undocumented) @@ -478,7 +475,6 @@ export enum Duration { // @public (undocumented) export const EngineerThreshold = 0.5; -// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" // Warning: (ae-missing-release-tag) "Entity" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @deprecated (undocumented) @@ -506,7 +502,6 @@ export class ExampleCostInsightsClient implements CostInsightsApi { getUserGroups(userId: string): Promise; } -// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" // Warning: (ae-missing-release-tag) "Group" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @deprecated (undocumented) @@ -574,19 +569,16 @@ export type LegendItemProps = { // @public (undocumented) export type Loading = Record; -// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" // Warning: (ae-missing-release-tag) "Maybe" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @deprecated (undocumented) export type Maybe = common.Maybe; -// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" // Warning: (ae-missing-release-tag) "Metric" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @deprecated (undocumented) export type Metric = common.Metric; -// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" // Warning: (ae-missing-release-tag) "MetricData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @deprecated (undocumented) @@ -622,7 +614,6 @@ export interface PageFilters { project: Maybe_2; } -// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" // Warning: (ae-missing-release-tag) "Product" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @deprecated (undocumented) @@ -649,7 +640,6 @@ export interface ProductPeriod { productType: string; } -// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" // Warning: (ae-missing-release-tag) "Project" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @deprecated (undocumented) @@ -711,7 +701,6 @@ export type TooltipItem = { value: string; }; -// Warning: (tsdoc-characters-after-block-tag) The token "@backstage" looks like a TSDoc tag but contains an invalid character "/"; if it is not a tag, use a backslash to escape the "@" // Warning: (ae-missing-release-tag) "Trendline" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public @deprecated (undocumented) diff --git a/plugins/cost-insights/src/types/index.ts b/plugins/cost-insights/src/types/index.ts index 57711b4eee..b836914e73 100644 --- a/plugins/cost-insights/src/types/index.ts +++ b/plugins/cost-insights/src/types/index.ts @@ -14,30 +14,6 @@ * limitations under the License. */ -import * as common from '@backstage/plugin-cost-insights-common'; -/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ -export type ChangeStatistic = common.ChangeStatistic; -/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ -export type Cost = common.Cost; -/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ -export type DateAggregation = common.DateAggregation; -/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ -export type Entity = common.Entity; -/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ -export type Group = common.Group; -/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ -export type Maybe = common.Maybe; -/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ -export type Metric = common.Metric; -/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ -export type MetricData = common.MetricData; -/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ -export type Product = common.Product; -/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ -export type Project = common.Project; -/** * @deprecated use the same type from @backstage/plugin-cost-insights-common instead */ -export type Trendline = common.Trendline; - // TODO: Split some of these up into `@backstage/plugin-cost-insights-react` for presentation types // and `@backstage/plugin-cost-insights-common` for data transfer object types. export * from './Alert'; @@ -51,3 +27,53 @@ export * from './Filters'; export * from './Icon'; export * from './Loading'; export * from './Theme'; + +/** + * Deprecated types moved to `@backstage/plugin-cost-insights-common` + */ +import * as common from '@backstage/plugin-cost-insights-common'; + +/** + * @deprecated use the same type from `@backstage/plugin-cost-insights-common` instead + */ +export type ChangeStatistic = common.ChangeStatistic; +/** + * @deprecated use the same type from `@backstage/plugin-cost-insights-common` instead + */ +export type Cost = common.Cost; +/** + * @deprecated use the same type from `@backstage/plugin-cost-insights-common` instead + */ +export type DateAggregation = common.DateAggregation; +/** + * @deprecated use the same type from `@backstage/plugin-cost-insights-common` instead + */ +export type Entity = common.Entity; +/** + * @deprecated use the same type from `@backstage/plugin-cost-insights-common` instead + */ +export type Group = common.Group; +/** + * @deprecated use the same type from `@backstage/plugin-cost-insights-common` instead + */ +export type Maybe = common.Maybe; +/** + * @deprecated use the same type from `@backstage/plugin-cost-insights-common` instead + */ +export type Metric = common.Metric; +/** + * @deprecated use the same type from `@backstage/plugin-cost-insights-common` instead + */ +export type MetricData = common.MetricData; +/** + * @deprecated use the same type from `@backstage/plugin-cost-insights-common` instead + */ +export type Product = common.Product; +/** + * @deprecated use the same type from `@backstage/plugin-cost-insights-common` instead + */ +export type Project = common.Project; +/** + * @deprecated use the same type from `@backstage/plugin-cost-insights-common` instead + */ +export type Trendline = common.Trendline; From e2d7b76f43f35a449c29ec7cadc23b57538aa9e1 Mon Sep 17 00:00:00 2001 From: Crevil Date: Sun, 3 Jul 2022 08:28:42 +0200 Subject: [PATCH 148/231] Upgrade git-url-parse to 12.0.0 This change upgrades git-url-parse to 12.0.0. This is a major upgrade but it changes nothing to our usage. Motivation for upgrade is transitively upgrading parse-url which is vulnerable to several CVEs detected by Snyk. - SNYK-JS-PARSEURL-2935944 - SNYK-JS-PARSEURL-2935947 - SNYK-JS-PARSEURL-2936249 Signed-off-by: Crevil --- .changeset/short-deers-remember.md | 21 +++++++++ packages/backend-common/package.json | 2 +- packages/integration/package.json | 2 +- plugins/adr/package.json | 2 +- plugins/catalog-backend/package.json | 2 +- plugins/catalog-import/package.json | 2 +- plugins/scaffolder-backend/package.json | 2 +- plugins/scaffolder/package.json | 2 +- .../package.json | 2 +- plugins/techdocs-node/package.json | 2 +- plugins/techdocs/package.json | 2 +- yarn.lock | 46 ++++++++++++++++++- 12 files changed, 76 insertions(+), 11 deletions(-) create mode 100644 .changeset/short-deers-remember.md diff --git a/.changeset/short-deers-remember.md b/.changeset/short-deers-remember.md new file mode 100644 index 0000000000..7579e7773b --- /dev/null +++ b/.changeset/short-deers-remember.md @@ -0,0 +1,21 @@ +--- +'@backstage/backend-common': patch +'@backstage/integration': patch +'@backstage/plugin-adr': patch +'@backstage/plugin-catalog-backend': patch +'@backstage/plugin-catalog-import': patch +'@backstage/plugin-scaffolder': patch +'@backstage/plugin-scaffolder-backend': patch +'@backstage/plugin-techdocs': patch +'@backstage/plugin-techdocs-module-addons-contrib': patch +'@backstage/plugin-techdocs-node': patch +--- + +Upgrade git-url-parse to 12.0.0. + +Motivation for upgrade is transitively upgrading parse-url which is vulnerable +to several CVEs detected by Snyk. + +- SNYK-JS-PARSEURL-2935944 +- SNYK-JS-PARSEURL-2935947 +- SNYK-JS-PARSEURL-2936249 diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index 8e1df125fc..c5b0953864 100644 --- a/packages/backend-common/package.json +++ b/packages/backend-common/package.json @@ -58,7 +58,7 @@ "express": "^4.17.1", "express-promise-router": "^4.1.0", "fs-extra": "10.1.0", - "git-url-parse": "^11.6.0", + "git-url-parse": "^12.0.0", "helmet": "^5.0.2", "isomorphic-git": "^1.8.0", "jose": "^4.6.0", diff --git a/packages/integration/package.json b/packages/integration/package.json index 190031e473..3f0c5e604c 100644 --- a/packages/integration/package.json +++ b/packages/integration/package.json @@ -36,7 +36,7 @@ "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0-next.0", "cross-fetch": "^3.1.5", - "git-url-parse": "^11.6.0", + "git-url-parse": "^12.0.0", "@octokit/rest": "^18.5.3", "@octokit/auth-app": "^3.4.0", "luxon": "^2.0.2", diff --git a/plugins/adr/package.json b/plugins/adr/package.json index 60a3c594e5..10132932f8 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -33,7 +33,7 @@ "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", - "git-url-parse": "^11.6.0", + "git-url-parse": "^12.0.0", "octokit": "^1.7.1", "react-markdown": "^8.0.0", "react-router-dom": "6.0.0-beta.0", diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index fa2d84e57e..71608c4eb3 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -53,7 +53,7 @@ "express-promise-router": "^4.1.0", "fast-json-stable-stringify": "^2.1.0", "fs-extra": "10.1.0", - "git-url-parse": "^11.6.0", + "git-url-parse": "^12.0.0", "glob": "^7.1.6", "knex": "^2.0.0", "lodash": "^4.17.21", diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index d170bf54f2..0f804cddd4 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -47,7 +47,7 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", "@octokit/rest": "^18.5.3", - "git-url-parse": "^11.6.0", + "git-url-parse": "^12.0.0", "js-base64": "^3.6.0", "lodash": "^4.17.21", "react-hook-form": "^7.12.2", diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index b94caf4fe8..92adda6d37 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -54,7 +54,7 @@ "express": "^4.17.1", "express-promise-router": "^4.1.0", "fs-extra": "10.1.0", - "git-url-parse": "^11.6.0", + "git-url-parse": "^12.0.0", "globby": "^11.0.0", "isbinaryfile": "^5.0.0", "isomorphic-git": "^1.8.0", diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 09c02ec969..6087a730f4 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -61,7 +61,7 @@ "@types/json-schema": "^7.0.9", "@uiw/react-codemirror": "^4.9.3", "classnames": "^2.2.6", - "git-url-parse": "^11.6.0", + "git-url-parse": "^12.0.0", "humanize-duration": "^3.25.1", "immer": "^9.0.1", "json-schema": "^0.4.0", diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index 5e21bff816..a18e3e4c31 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -44,7 +44,7 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", "@react-hookz/web": "^14.0.0", - "git-url-parse": "^11.6.0", + "git-url-parse": "^12.0.0", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index 89e8d3c56c..bcce7ce449 100644 --- a/plugins/techdocs-node/package.json +++ b/plugins/techdocs-node/package.json @@ -54,7 +54,7 @@ "aws-sdk": "^2.840.0", "express": "^4.17.1", "fs-extra": "10.1.0", - "git-url-parse": "^11.6.0", + "git-url-parse": "^12.0.0", "js-yaml": "^4.0.0", "json5": "^2.1.3", "mime-types": "^2.1.27", diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 612b6a4b9e..880d29bac3 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -53,7 +53,7 @@ "@material-ui/styles": "^4.10.0", "dompurify": "^2.2.9", "event-source-polyfill": "1.0.25", - "git-url-parse": "^11.6.0", + "git-url-parse": "^12.0.0", "jss": "~10.8.2", "lodash": "^4.17.21", "react-helmet": "6.1.0", diff --git a/yarn.lock b/yarn.lock index 7e4eda9c3d..a74a137312 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13821,6 +13821,14 @@ git-up@^4.0.0: is-ssh "^1.3.0" parse-url "^5.0.0" +git-up@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/git-up/-/git-up-6.0.0.tgz#dbd6e4eee270338be847a0601e6d0763c90b74db" + integrity sha512-6RUFSNd1c/D0xtGnyWN2sxza2bZtZ/EmI9448n6rCZruFwV/ezeEn2fJP7XnUQGwf0RAtd/mmUCbtH6JPYA2SA== + dependencies: + is-ssh "^1.4.0" + parse-url "^7.0.2" + git-url-parse@^11.4.4, git-url-parse@^11.6.0: version "11.6.0" resolved "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.6.0.tgz#c634b8de7faa66498a2b88932df31702c67df605" @@ -13828,6 +13836,13 @@ git-url-parse@^11.4.4, git-url-parse@^11.6.0: dependencies: git-up "^4.0.0" +git-url-parse@^12.0.0: + version "12.0.0" + resolved "https://registry.npmjs.org/git-url-parse/-/git-url-parse-12.0.0.tgz#4ba70bc1e99138321c57e3765aaf7428e5abb793" + integrity sha512-I6LMWsxV87vysX1WfsoglXsXg6GjQRKq7+Dgiseo+h0skmp5Hp2rzmcEIRQot9CPA+uzU7x1x7jZdqvTFGnB+Q== + dependencies: + git-up "^6.0.0" + gitconfiglocal@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" @@ -15647,6 +15662,13 @@ is-ssh@^1.3.0: dependencies: protocols "^1.1.0" +is-ssh@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" + integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== + dependencies: + protocols "^2.0.1" + is-stream-ended@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz#f50224e95e06bce0e356d440a4827cd35b267eda" @@ -19297,7 +19319,7 @@ normalize-url@^4.1.0: resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== -normalize-url@^6.0.1: +normalize-url@^6.0.1, normalize-url@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== @@ -20221,6 +20243,13 @@ parse-path@^4.0.0: is-ssh "^1.3.0" protocols "^1.4.0" +parse-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/parse-path/-/parse-path-5.0.0.tgz#f933152f3c6d34f4cf36cfc3d07b138ac113649d" + integrity sha512-qOpH55/+ZJ4jUu/oLO+ifUKjFPNZGfnPJtzvGzKN/4oLMil5m9OH4VpOj6++9/ytJcfks4kzH2hhi87GL/OU9A== + dependencies: + protocols "^2.0.0" + parse-url@^5.0.0: version "5.0.1" resolved "https://registry.npmjs.org/parse-url/-/parse-url-5.0.1.tgz#99c4084fc11be14141efa41b3d117a96fcb9527f" @@ -20231,6 +20260,16 @@ parse-url@^5.0.0: parse-path "^4.0.0" protocols "^1.4.0" +parse-url@^7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/parse-url/-/parse-url-7.0.2.tgz#d21232417199b8d371c6aec0cedf1406fd6393f0" + integrity sha512-PqO4Z0eCiQ08Wj6QQmrmp5YTTxpYfONdOEamrtvK63AmzXpcavIVQubGHxOEwiIoDZFb8uDOoQFS0NCcjqIYQg== + dependencies: + is-ssh "^1.4.0" + normalize-url "^6.1.0" + parse-path "^5.0.0" + protocols "^2.0.1" + parse5@6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" @@ -21349,6 +21388,11 @@ protocols@^1.1.0, protocols@^1.4.0: resolved "https://registry.npmjs.org/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg== +protocols@^2.0.0, protocols@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" + integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== + proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" From 40bcfb422f60db5c8928bce563750e734981563c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jens=20M=C3=B8ller?= Date: Mon, 4 Jul 2022 09:48:00 +0200 Subject: [PATCH 149/231] Change email to GH handle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I prefer not to have my work email exposed publicly, so changed to GH handle which I see most others have. Signed-off-by: Jens Møller --- ADOPTERS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ADOPTERS.md b/ADOPTERS.md index 2f47f22f90..1cb0577c44 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -178,7 +178,7 @@ _You can do this by using the [Adopter form](https://form.typeform.com/to/zcOaKi | [idwall](https://idwall.co) | [Rodrigo Catão Araujo](mailto:rodrigo@idwall.co) | Developer Portal for internal engineers to access service catalog, documentation, observability, infrastructure and internal tooling. | | [Jaguar Land Rover](https://www.jaguarlandrover.com) | [Josh Walker](mailto:jwalke18@jaguarlandrover.com) | Users can request a Gitlab user, which creates a commit with the Terraform code. | | [Glovo](http://glovoapp.com/) | [Yaser Toutah](mailto:yaser.toutah@glovoapp.com) | Developer Portal to improve our Developer Experience, identify ownership and track metadata for our services and tools. It's our Service Catalog. In addition to that, we use it for Service Creation, and much more. | -| [Dixa](https://dixa.com) | [Jens Møller](mailto:jsc@dixa.com) | We are in early stages, but using it to get overview of our repositories and ownership of these. We want among many things to use it for compliance and easier access to key metrics for our repos. | +| [Dixa](https://dixa.com) | [Jens Møller](https://github.com/jensamoller) | We are in early stages, but using it to get overview of our repositories and ownership of these. We want among many things to use it for compliance and easier access to key metrics for our repos. | | [Notino](https://notino.com) | [Jan Remunda](mailto:jan.remunda@notino.com) | Backstage is our developer portal. We use it as service catalog and for technical documentation. | | [Polarpoint](https://polarpoint.io/) | [Surj Bains](https://github.com/polarpoint-io) | We are using Backstage as our Developer portal as well as for hosting our DevOps portal for software catalog. | | [Niche](https://niche.com) | [Zach Romitz](mailto:zach.romitz@niche.com) | We are using the Software Catalog, Software Templates, API documentation, and Techdocs to try and centralize service information. | From 6f20a7d155116364b76bb564a73a35c7e255ffb1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 08:32:38 +0000 Subject: [PATCH 150/231] chore(deps): update dependency @types/node to v16.11.43 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 59b39fca31..754abdd059 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6662,9 +6662,9 @@ integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== "@types/node@^16.0.0", "@types/node@^16.11.26", "@types/node@^16.9.2": - version "16.11.42" - resolved "https://registry.npmjs.org/@types/node/-/node-16.11.42.tgz#d2a75c58e9b0902b82dc54bd4c13f8ef12bd1020" - integrity sha512-iwLrPOopPy6V3E+1yHTpJea3bdsNso0b0utLOJJwaa/PLzqBt3GZl3stMcakc/gr89SfcNk2ki3z7Gvue9hYGQ== + version "16.11.43" + resolved "https://registry.npmjs.org/@types/node/-/node-16.11.43.tgz#555e5a743f76b6b897d47f945305b618525ddbe6" + integrity sha512-GqWykok+3uocgfAJM8imbozrqLnPyTrpFlrryURQlw1EesPUCx5XxTiucWDSFF9/NUEXDuD4bnvHm8xfVGWTpQ== "@types/normalize-package-data@^2.4.0": version "2.4.1" From 00b404a34c16188bc8c67119ce54855091976adf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 08:35:00 +0000 Subject: [PATCH 151/231] fix(deps): update dependency aws-sdk to v2.1167.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 59b39fca31..b4fb3600fa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8344,9 +8344,9 @@ aws-sdk-mock@^5.2.1: traverse "^0.6.6" aws-sdk@^2.1122.0, aws-sdk@^2.840.0, aws-sdk@^2.948.0: - version "2.1165.0" - resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1165.0.tgz#4da669d1e9020344cef75d961882f52a7931a379" - integrity sha512-2oVkSuXsLeErt+H4M2OGIz4p1LPS+QRfY2WnW4QKMndASOcvHKZTfzuY8jmc9ZnDGyguiGdT3idYU8KpNg0sGw== + version "2.1167.0" + resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1167.0.tgz#e8614bce1a7355782734b6928792f14d11b39231" + integrity sha512-hUJzAqWVfNYpct1S+GjyPIc2s+GZcAhbWVqIG4qbLYZ3+sBTcjv3lLH5zx7K+qcTGINDU0g4EsMi6hIrAU+blg== dependencies: buffer "4.9.2" events "1.1.1" From b0f4323e4912d70463ebd09703057a05e73dc252 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 4 Jul 2022 10:36:25 +0200 Subject: [PATCH 152/231] api-extractor: give cli commands even more time Signed-off-by: Patrik Oldsberg --- scripts/api-extractor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/api-extractor.ts b/scripts/api-extractor.ts index cfa2fe270e..0d40ebb60a 100644 --- a/scripts/api-extractor.ts +++ b/scripts/api-extractor.ts @@ -1096,7 +1096,7 @@ function createBinRunner(cwd: string, path: string) { { cwd, shell: true, - timeout: 30000, + timeout: 60000, maxBuffer: 1024 * 1024, }, (err, stdout, stderr) => { From c73668fbe8004025f08b8200c8f4679a25dfdf03 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 08:38:12 +0000 Subject: [PATCH 153/231] fix(deps): update dependency sucrase to v3.23.0 Signed-off-by: Renovate Bot --- storybook/yarn.lock | 6 +++--- yarn.lock | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/storybook/yarn.lock b/storybook/yarn.lock index 6bf41324eb..cf6ecae523 100644 --- a/storybook/yarn.lock +++ b/storybook/yarn.lock @@ -8387,9 +8387,9 @@ style-to-object@0.3.0, style-to-object@^0.3.0: inline-style-parser "0.1.1" sucrase@^3.21.0: - version "3.21.1" - resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.21.1.tgz#7e29ddaca012764cf843280b00e74a843bdf790f" - integrity sha512-kxXnC9yZEav5USAu8gooZID9Ph3xqwdJxZoh+WbOWQZHTB7CHj3ANwENVMZ6mAZ9k7UtJtFxvQD9R03q3yU2YQ== + version "3.23.0" + resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.23.0.tgz#2a7fa80a04f055fb2e95d2aead03fec1dba52838" + integrity sha512-xgC1xboStzGhCnRywlBf/DLmkC+SkdAKqrNCDsxGrzM0phR5oUxoFKiQNrsc2D8wDdAm03iLbSZqjHDddo3IzQ== dependencies: commander "^4.0.0" glob "7.1.6" diff --git a/yarn.lock b/yarn.lock index 59b39fca31..961daed9cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24287,9 +24287,9 @@ stylis@^4.0.6: integrity sha512-OFFeUXFgwnGOKvEXaSv0D0KQ5ADP0n6g3SVONx6I/85JzNZ3u50FRwB3lVIk1QO2HNdI75tbVzc4Z66Gdp9voA== sucrase@^3.18.0, sucrase@^3.20.2: - version "3.21.1" - resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.21.1.tgz#7e29ddaca012764cf843280b00e74a843bdf790f" - integrity sha512-kxXnC9yZEav5USAu8gooZID9Ph3xqwdJxZoh+WbOWQZHTB7CHj3ANwENVMZ6mAZ9k7UtJtFxvQD9R03q3yU2YQ== + version "3.23.0" + resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.23.0.tgz#2a7fa80a04f055fb2e95d2aead03fec1dba52838" + integrity sha512-xgC1xboStzGhCnRywlBf/DLmkC+SkdAKqrNCDsxGrzM0phR5oUxoFKiQNrsc2D8wDdAm03iLbSZqjHDddo3IzQ== dependencies: commander "^4.0.0" glob "7.1.6" From 3f909a8b299a055e0cbb73a5ca7036489dee9945 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 09:38:11 +0000 Subject: [PATCH 154/231] chore(deps): update dependency supertest to v6.2.4 Signed-off-by: Renovate Bot --- yarn.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7dce0374e8..8b74786a62 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18610,7 +18610,7 @@ mime@1.6.0, mime@^1.3.4: resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.2.0, mime@^2.5.0, mime@^2.5.2: +mime@2.6.0, mime@^2.2.0, mime@^2.5.2: version "2.6.0" resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== @@ -24298,10 +24298,10 @@ sucrase@^3.18.0, sucrase@^3.20.2: pirates "^4.0.1" ts-interface-checker "^0.1.9" -superagent@^7.1.3: - version "7.1.3" - resolved "https://registry.npmjs.org/superagent/-/superagent-7.1.3.tgz#783ff8330e7c2dad6ad8f0095edc772999273b6b" - integrity sha512-WA6et4nAvgBCS73lJvv1D0ssI5uk5Gh+TGN/kNe+B608EtcVs/yzfl+OLXTzDs7tOBDIpvgh/WUs1K2OK1zTeQ== +superagent@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/superagent/-/superagent-8.0.0.tgz#2ea4587df4b81ef023ec01ebc6e1bcb9e2344cb6" + integrity sha512-iudipXEel+SzlP9y29UBWGDjB+Zzag+eeA1iLosaR2YHBRr1Q1kC29iBrF2zIVD9fqVbpZnXkN/VJmwFMVyNWg== dependencies: component-emitter "^1.3.0" cookiejar "^2.1.3" @@ -24310,18 +24310,18 @@ superagent@^7.1.3: form-data "^4.0.0" formidable "^2.0.1" methods "^1.1.2" - mime "^2.5.0" + mime "2.6.0" qs "^6.10.3" readable-stream "^3.6.0" semver "^7.3.7" supertest@^6.1.3, supertest@^6.1.6: - version "6.2.3" - resolved "https://registry.npmjs.org/supertest/-/supertest-6.2.3.tgz#291b220126e5faa654d12abe1ada3658757c8c67" - integrity sha512-3GSdMYTMItzsSYjnIcljxMVZKPW1J9kYHZY+7yLfD0wpPwww97GeImZC1oOk0S5+wYl2niJwuFusBJqwLqYM3g== + version "6.2.4" + resolved "https://registry.npmjs.org/supertest/-/supertest-6.2.4.tgz#3dcebe42f7fd6f28dd7ac74c6cba881f7101b2f0" + integrity sha512-M8xVnCNv+q2T2WXVzxDECvL2695Uv2uUj2O0utxsld/HRyJvOU8W9f1gvsYxSNU4wmIe0/L/ItnpU4iKq0emDA== dependencies: methods "^1.1.2" - superagent "^7.1.3" + superagent "^8.0.0" supports-color@^2.0.0: version "2.0.0" From 146e6fa86a16efa44ac200d44faa35e6504064b7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 09:39:10 +0000 Subject: [PATCH 155/231] chore(deps): update dependency ts-node to v10.8.2 Signed-off-by: Renovate Bot --- yarn.lock | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7dce0374e8..ce9e1cf9f8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3399,14 +3399,14 @@ integrity sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg== "@jridgewell/resolve-uri@^3.0.3": - version "3.0.7" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" - integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA== + version "3.0.8" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz#687cc2bbf243f4e9a868ecf2262318e2658873a1" + integrity sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w== "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.13" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c" - integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w== + version "1.4.14" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" @@ -5818,24 +5818,24 @@ path-browserify "^1.0.1" "@tsconfig/node10@^1.0.7": - version "1.0.8" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" - integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== + version "1.0.9" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== "@tsconfig/node12@^1.0.7": - version "1.0.9" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" - integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": - version "1.0.1" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" - integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" - integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== "@types/accepts@^1.3.5": version "1.3.5" @@ -24998,9 +24998,9 @@ ts-morph@^15.0.0: code-block-writer "^11.0.0" ts-node@^10.0.0, ts-node@^10.2.1, ts-node@^10.4.0: - version "10.8.1" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz#ea2bd3459011b52699d7e88daa55a45a1af4f066" - integrity sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g== + version "10.8.2" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.8.2.tgz#3185b75228cef116bf82ffe8762594f54b2a23f2" + integrity sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA== dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" From 17fdd1bb4d101470e2c4ea0474b1bd85abb07433 Mon Sep 17 00:00:00 2001 From: Joost Hofman Date: Mon, 4 Jul 2022 12:18:10 +0200 Subject: [PATCH 156/231] Update tech radar docs on using an external datasource Signed-off-by: Joost Hofman --- plugins/tech-radar/README.md | 37 +++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/plugins/tech-radar/README.md b/plugins/tech-radar/README.md index 10c7a104c1..fb860ac4d8 100644 --- a/plugins/tech-radar/README.md +++ b/plugins/tech-radar/README.md @@ -77,12 +77,43 @@ When defining the radar entries you can see the available properties on the file The `TechRadar` plugin uses the `techRadarApiRef` to get a client which implements the `TechRadarApi` interface. The default sample one is located [here](https://github.com/backstage/backstage/blob/master/plugins/tech-radar/src/sample.ts). To load your own data, you'll need to provide a class that implements the `TechRadarApi` and override the `techRadarApiRef` in the `app/src/apis.ts`. +```ts +// app/src/lib/DataConverter.ts +import { TechRadarLoaderResponse } from '@backstage/plugin-tech-radar'; + +export function convertTechRadarData(json: any): TechRadarLoaderResponse { + const { entries, rings, quadrants } = json; + + const normalizedEntries = entries.map(entry => { + // convert date of timeline + const timelineEntries = entry.timeline.map(timeline => { + return { + ...timeline, + date: new Date(timeline.date), + }; + }); + + return { + ...entry, + timeline: timelineEntries, + }; + }); + + return { + entries: normalizedEntries, + rings, + quadrants, + }; +} +``` + ```ts // app/src/lib/MyClient.ts import { TechRadarApi, TechRadarLoaderResponse, } from '@backstage/plugin-tech-radar'; +import { convertTechRadarData } from './DataConverter'; export class MyOwnClient implements TechRadarApi { async load(id: string | undefined): Promise { @@ -91,8 +122,8 @@ export class MyOwnClient implements TechRadarApi { const data = await fetch('https://mydata.json').then(res => res.json()); // maybe you'll need to do some data transformation here to make it look like TechRadarLoaderResponse - - return data; + // Need a converter for the Date object + return convertTechRadarData(data); } } @@ -128,4 +159,4 @@ You can use the `svgProps` option to pass custom React props to the `` elem ### How do I support multiple radars -The `TechRadarPage` and `TechRadarComponent` components both take an optional `id` prop which is subsequently passed to the `load` method of the API to distinguish which radar's data to load. +The `TechRadarPage` and `TechRadarComponent` components both take an optional `id` prop which is subsequently passed to the `load` method of the API to distinguish which radar's data to load. \ No newline at end of file From 86a1973610907c815a1b08fa0b09d9f61710cc91 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 10:32:02 +0000 Subject: [PATCH 157/231] fix(deps): update dependency @keyv/redis to v2.3.7 Signed-off-by: Renovate Bot --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 966d22bc37..0a7c903275 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3443,11 +3443,11 @@ integrity sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw== "@keyv/redis@^2.2.3": - version "2.3.6" - resolved "https://registry.npmjs.org/@keyv/redis/-/redis-2.3.6.tgz#462991af60b5b35af4e9ac8d05ad99a08ae2cfc2" - integrity sha512-MKRAeWaKI7zpGb+lSgAAlznQi725NEN18I/Uj2CJysk1o6hBqyXyxCvyI+b9qKwoFAkzxoogdvONIpstzI7t/Q== + version "2.3.7" + resolved "https://registry.npmjs.org/@keyv/redis/-/redis-2.3.7.tgz#4f6f6d85be07668a976bb3c9d910c57d1ab12c70" + integrity sha512-aBxnl2Bt1D7JUXQwdO9dDOBJi3VmKO5yfIiwxvEr/hVSryho0Zn1EuWr3fi6UE8WYw5X8FPUyD6h5wuVQreQsA== dependencies: - ioredis "^5.0.4" + ioredis "^5.1.0" "@kubernetes/client-node@^0.16.0": version "0.16.3" @@ -15131,10 +15131,10 @@ invert-kv@^1.0.0: resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= -ioredis@^5.0.4: - version "5.0.4" - resolved "https://registry.npmjs.org/ioredis/-/ioredis-5.0.4.tgz#0d4abfd818adfc5ef5029fddac4b8f503a1433b7" - integrity sha512-qFJw3MnPNsJF1lcIOP3vztbsasOXK3nDdNAgjQj7t7/Bn/w10PGchTOpqylQNxjzPbLoYDu34LjeJtSWiKBntQ== +ioredis@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/ioredis/-/ioredis-5.1.0.tgz#17bc0bc40f164ef26910ca6e56981c2a9bfdf57e" + integrity sha512-HYHnvwxFwefeUBj0hZFejLvd8Q/YNAfnZlZG/hSRxkRhXMs1H8soMEVccHd1WlLrKkynorXBsAtqDGskOdAfVQ== dependencies: "@ioredis/commands" "^1.1.1" cluster-key-slot "^1.1.0" From 7af6075db5081d4ca8c88bf9a58abd5038fa1ffd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 10:32:54 +0000 Subject: [PATCH 158/231] fix(deps): update dependency @react-hookz/web to v14.7.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 966d22bc37..e7bafeaa8a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5263,9 +5263,9 @@ "@react-hookz/deep-equal" "^1.0.1" "@react-hookz/web@^14.0.0": - version "14.7.0" - resolved "https://registry.npmjs.org/@react-hookz/web/-/web-14.7.0.tgz#3154b7cf38bf464e7b60417eae7f3348ce19e6f6" - integrity sha512-9AN0W3QH3Aj5/LXHKy2XiysjgvaNRLQwEVyCaU3AOMW9c1XlL5hSYc67ExubmzQRw2kAYx2Jpgl8wKCIINxsxQ== + version "14.7.1" + resolved "https://registry.npmjs.org/@react-hookz/web/-/web-14.7.1.tgz#5e39e6fc21331cc4ae95f36e8135ad763e6c29fb" + integrity sha512-kU1CccZDXvQ9G4vcCCpX3mDQqYKkuLXGFOtPMgmbZ9KrvkEduMRH4JqSVXp1nI/bGI1GJ0KAWm4UEb1x5eDGAg== dependencies: "@react-hookz/deep-equal" "^1.0.2" From b8f608f1ecde01bb7ed3fb5eda5275d553e3e09a Mon Sep 17 00:00:00 2001 From: Joost Hofman Date: Mon, 4 Jul 2022 12:39:43 +0200 Subject: [PATCH 159/231] Add changeset for documentation update tech-radar Signed-off-by: Joost Hofman --- .changeset/fifty-vans-drum.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/fifty-vans-drum.md diff --git a/.changeset/fifty-vans-drum.md b/.changeset/fifty-vans-drum.md new file mode 100644 index 0000000000..76ad2fa8df --- /dev/null +++ b/.changeset/fifty-vans-drum.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-tech-radar': patch +--- + +Update tech-radar documentation on how to use an external json datasource with dates. From 7b304929ec7160e9619851ddc20cd96780b8e956 Mon Sep 17 00:00:00 2001 From: Joost Hofman Date: Mon, 4 Jul 2022 13:05:27 +0200 Subject: [PATCH 160/231] Fix prettier warning on tech-radar readme Signed-off-by: Joost Hofman --- plugins/tech-radar/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/tech-radar/README.md b/plugins/tech-radar/README.md index fb860ac4d8..824f098104 100644 --- a/plugins/tech-radar/README.md +++ b/plugins/tech-radar/README.md @@ -159,4 +159,4 @@ You can use the `svgProps` option to pass custom React props to the `` elem ### How do I support multiple radars -The `TechRadarPage` and `TechRadarComponent` components both take an optional `id` prop which is subsequently passed to the `load` method of the API to distinguish which radar's data to load. \ No newline at end of file +The `TechRadarPage` and `TechRadarComponent` components both take an optional `id` prop which is subsequently passed to the `load` method of the API to distinguish which radar's data to load. From ea9351a1045c383394fc9c00293b3c0774a4c4e1 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 3 Jul 2022 20:55:35 +0200 Subject: [PATCH 161/231] workflows/ci: split tests into separate job Signed-off-by: Patrik Oldsberg --- .github/workflows/ci.yml | 146 ++++++++++++++++++++++++++++----------- 1 file changed, 107 insertions(+), 39 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 95ec35c795..a51daa2136 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,9 +9,116 @@ concurrency: cancel-in-progress: true jobs: + # This step only runs yarn install to make sure that an exact match is available + # in the cache. The two following verify and tests jobs then always install from cache. + install: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [14.x, 16.x] + + env: + CI: true + NODE_OPTIONS: --max-old-space-size=4096 + + steps: + - uses: actions/checkout@v3 + + - name: use node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + registry-url: https://registry.npmjs.org/ # Needed for auth + + - name: yarn install + uses: backstage/actions/yarn-install@v0.2.2 + with: + cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} + + # The verify jobs runs all the verification that doesn't require a + # diff towards master, since it takes some time to fetch that. verify: runs-on: ubuntu-latest + needs: install + + strategy: + matrix: + node-version: [14.x, 16.x] + + env: + CI: true + NODE_OPTIONS: --max-old-space-size=4096 + + steps: + - uses: actions/checkout@v3 + + - name: use node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + registry-url: https://registry.npmjs.org/ # Needed for auth + + - name: yarn install + uses: backstage/actions/yarn-install@v0.2.2 + with: + cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} + + - name: verify changesets + run: node scripts/verify-changesets.js + + - name: verify local dependency ranges + run: node scripts/verify-local-dependencies.js + + - name: validate config + run: yarn backstage-cli config:check --lax + + - name: type checking and declarations + run: yarn tsc:full + + - name: prettier + run: yarn prettier:check + + # We need to generate the API references as well, so that we can verify the doc links + - name: check api reports and generate API reference + run: yarn build:api-reports:only --ci --docs + + - name: verify api reference + run: node scripts/verify-api-reference.js + + - name: verify doc links + run: node scripts/verify-links.js + + - name: build all packages + run: yarn backstage-cli repo build --all + + - name: verify type dependencies + run: yarn lint:type-deps + + - name: verify plugin template + run: yarn lerna -- run diff -- --check + + - name: ensure clean working directory + run: | + if files=$(git ls-files --exclude-standard --others --modified) && [[ -z "$files" ]]; then + exit 0 + else + echo "" + echo "Working directory has been modified:" + echo "" + git status --short + echo "" + exit 1 + fi + + # The test job runs all tests as well as any verification step that + # requires a diff towards master. + test: + runs-on: ubuntu-latest + + needs: install + strategy: matrix: node-version: [14.x, 16.x] @@ -80,48 +187,12 @@ jobs: run: git diff --quiet origin/master HEAD -- yarn.lock continue-on-error: true - - name: prettier - run: yarn prettier:check - - name: lock run: yarn lock:check - - name: validate config - run: yarn backstage-cli config:check --lax - - name: lint run: yarn backstage-cli repo lint --since origin/master - - name: type checking and declarations - run: yarn tsc:full - - # We need to generate the API references as well, so that we can verify the doc links - - name: check api reports and generate API reference - run: yarn build:api-reports:only --ci --docs - - - name: verify api reference - run: node scripts/verify-api-reference.js - - - name: verify changesets - run: node scripts/verify-changesets.js - - - name: verify doc links - run: node scripts/verify-links.js - - - name: verify local dependency ranges - run: node scripts/verify-local-dependencies.js - - - name: build changed packages - if: ${{ steps.yarn-lock.outcome == 'success' }} - run: yarn backstage-cli repo build --all --since origin/master - - - name: build all packages - if: ${{ steps.yarn-lock.outcome == 'failure' }} - run: yarn backstage-cli repo build --all - - - name: verify type dependencies - run: yarn lint:type-deps - - name: test changed packages if: ${{ steps.yarn-lock.outcome == 'success' }} run: yarn lerna -- run test --since origin/master -- --coverage --runInBand @@ -144,9 +215,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: verify plugin template - run: yarn lerna -- run diff -- --check - - name: ensure clean working directory run: | if files=$(git ls-files --exclude-standard --others --modified) && [[ -z "$files" ]]; then From 1d86540ef6de9a4f9b185669715b6a557f692520 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 11:38:46 +0000 Subject: [PATCH 162/231] fix(deps): update dependency @yarnpkg/parsers to v3.0.0-rc.11 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0a7c903275..3985ec3435 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7572,9 +7572,9 @@ integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== "@yarnpkg/parsers@^3.0.0-rc.4": - version "3.0.0-rc.10" - resolved "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.10.tgz#cbbb9970d396fd274911ef0f8204d52132394271" - integrity sha512-TZxyre59hLjWQ0FcakvEl2a+PTArDJ2VYC3e3xjec+OpTuQSK7333VscpiT2UJKJPDUGrYq1Z1LDpnIYv4nHLw== + version "3.0.0-rc.11" + resolved "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.11.tgz#4c2e69f3c904693eea58a8999ca9a189b0d78b41" + integrity sha512-qQ2EBj1lRA2iB1SwcyvGI53w5TlEBMgJ/hAR42ts+6bKK/am/xQoozQxtBiqodAyphIGVSm3sfQmQXN2pjMlNA== dependencies: js-yaml "^3.10.0" tslib "^1.13.0" From d6829c6efce59a1181721d7dd41bd7bedf524bb5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 11:54:04 +0000 Subject: [PATCH 163/231] fix(deps): update dependency graphql-ws to v5.9.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 1cfe16c636..c8552e0fa8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14214,9 +14214,9 @@ graphql-type-json@^0.3.2: integrity sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg== graphql-ws@^5.4.1: - version "5.9.0" - resolved "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.9.0.tgz#1fea3cca4582bbda15bc3a50bf30b539869b826f" - integrity sha512-CXv0l0nI1bgChwl4Rm+BqNOAKwL/C9T2N8RfmTkhQ38YLFdUXCi2WNW4oFp8BJP+t75nCLzjHHgR04sP1oF02w== + version "5.9.1" + resolved "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.9.1.tgz#9c0fa48ceb695d61d574ed3ab21b426729e87f2d" + integrity sha512-mL/SWGBwIT9Meq0NlfS55yXXTOeWPMbK7bZBEZhFu46bcGk1coTx2Sdtzxdk+9yHWngD+Fk1PZDWaAutQa9tpw== graphql@^16.0.0, graphql@^16.3.0: version "16.5.0" From 50c4540ccab6d48d84141c88e1003820ba7511bf Mon Sep 17 00:00:00 2001 From: Joost Hofman Date: Mon, 4 Jul 2022 15:11:25 +0200 Subject: [PATCH 164/231] Fix reviewdog spelling in changeset Signed-off-by: Joost Hofman --- .changeset/fifty-vans-drum.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/fifty-vans-drum.md b/.changeset/fifty-vans-drum.md index 76ad2fa8df..6b1b920bb9 100644 --- a/.changeset/fifty-vans-drum.md +++ b/.changeset/fifty-vans-drum.md @@ -2,4 +2,4 @@ '@backstage/plugin-tech-radar': patch --- -Update tech-radar documentation on how to use an external json datasource with dates. +Update tech-radar documentation on how to use an external json data source with dates. From 8d19967c32bd2450d108a82f715f00b7cf20dfe0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 13:48:47 +0000 Subject: [PATCH 165/231] fix(deps): update dependency openid-client to v5.1.8 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1f4fb380ca..0954730fe0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19783,9 +19783,9 @@ openid-client@^4.1.1: oidc-token-hash "^5.0.1" openid-client@^5.1.3: - version "5.1.7" - resolved "https://registry.npmjs.org/openid-client/-/openid-client-5.1.7.tgz#deb16847c610075716be1ec679068b04db16f065" - integrity sha512-VNtf/q+fv2Jiqi0ViLVmN3gGMSHF+YUGW6baKA/naoPKkKw4JdvghaP/kXQ/bzRRDWk6VmpCYDcR934UdDs8ug== + version "5.1.8" + resolved "https://registry.npmjs.org/openid-client/-/openid-client-5.1.8.tgz#3a24910288b32c32f548fb6e391f44178ce6370f" + integrity sha512-EPxJY6bT7YIYQEXSGxRC5flQ3GUhLy98ufdto6+BVBrFGPmwjUpy4xBcYuU/Wt9nPkO/3EgljBrr6Ezx4lp1RQ== dependencies: jose "^4.1.4" lru-cache "^6.0.0" From 201c0bf5195fc62f56b934672517219d9ab05542 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 13:49:38 +0000 Subject: [PATCH 166/231] fix(deps): update typescript-eslint monorepo to v5.30.4 Signed-off-by: Renovate Bot --- yarn.lock | 90 +++++++++++++++++++++++++++---------------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1f4fb380ca..e9f33e6382 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7245,13 +7245,13 @@ integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== "@typescript-eslint/eslint-plugin@^5.9.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.0.tgz#524a11e15c09701733033c96943ecf33f55d9ca1" - integrity sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow== + version "5.30.4" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.4.tgz#a46c8c0ab755a936cb63786a6222876ce51675e4" + integrity sha512-xjujQISAIa4HAaos8fcMZXmqkuZqMx6icdxkI88jMM/eNe4J8AuTLYnLK+zdm0mBYLyctdFf//UE4/xFCcQzYQ== dependencies: - "@typescript-eslint/scope-manager" "5.30.0" - "@typescript-eslint/type-utils" "5.30.0" - "@typescript-eslint/utils" "5.30.0" + "@typescript-eslint/scope-manager" "5.30.4" + "@typescript-eslint/type-utils" "5.30.4" + "@typescript-eslint/utils" "5.30.4" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -7272,13 +7272,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^5.9.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.0.tgz#a2184fb5f8ef2bf1db0ae61a43907e2e32aa1b8f" - integrity sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA== + version "5.30.4" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.4.tgz#659411e8700b22c8d5400798ef24838425bf4567" + integrity sha512-/ge1HtU63wVoED4VnlU2o+FPFmi017bPYpeSrCmd8Ycsti4VSxXrmcpXXm7JpI4GT0Aa7qviabv1PEp6L5bboQ== dependencies: - "@typescript-eslint/scope-manager" "5.30.0" - "@typescript-eslint/types" "5.30.0" - "@typescript-eslint/typescript-estree" "5.30.0" + "@typescript-eslint/scope-manager" "5.30.4" + "@typescript-eslint/types" "5.30.4" + "@typescript-eslint/typescript-estree" "5.30.4" debug "^4.3.4" "@typescript-eslint/scope-manager@5.20.0": @@ -7289,13 +7289,13 @@ "@typescript-eslint/types" "5.20.0" "@typescript-eslint/visitor-keys" "5.20.0" -"@typescript-eslint/scope-manager@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.0.tgz#bf585ee801ab4ad84db2f840174e171a6bb002c7" - integrity sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ== +"@typescript-eslint/scope-manager@5.30.4": + version "5.30.4" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.4.tgz#8140efd2bc12d41d74e8af23872a89f3edbe552e" + integrity sha512-DNzlQwGSiGefz71JwaHrpcaAX3zYkEcy8uVuan3YMKOa6qeW/y+7SaD8KIsIAruASwq6P+U4BjWBWtM2O+mwBQ== dependencies: - "@typescript-eslint/types" "5.30.0" - "@typescript-eslint/visitor-keys" "5.30.0" + "@typescript-eslint/types" "5.30.4" + "@typescript-eslint/visitor-keys" "5.30.4" "@typescript-eslint/scope-manager@5.9.0": version "5.9.0" @@ -7305,12 +7305,12 @@ "@typescript-eslint/types" "5.9.0" "@typescript-eslint/visitor-keys" "5.9.0" -"@typescript-eslint/type-utils@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.0.tgz#98f3af926a5099153f092d4dad87148df21fbaae" - integrity sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg== +"@typescript-eslint/type-utils@5.30.4": + version "5.30.4" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.4.tgz#00ff19073cd01f7d27e9af49ce08d6a69f1e4f01" + integrity sha512-55cf1dZviwwv+unDB+mF8vZkfta5muTK6bppPvenWWCD7slZZ0DEsXUjZerqy7Rq8s3J4SXdg4rMIY8ngCtTmA== dependencies: - "@typescript-eslint/utils" "5.30.0" + "@typescript-eslint/utils" "5.30.4" debug "^4.3.4" tsutils "^3.21.0" @@ -7319,10 +7319,10 @@ resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.20.0.tgz#fa39c3c2aa786568302318f1cb51fcf64258c20c" integrity sha512-+d8wprF9GyvPwtoB4CxBAR/s0rpP25XKgnOvMf/gMXYDvlUC3rPFHupdTQ/ow9vn7UDe5rX02ovGYQbv/IUCbg== -"@typescript-eslint/types@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.0.tgz#db7d81d585a3da3801432a9c1d2fafbff125e110" - integrity sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag== +"@typescript-eslint/types@5.30.4": + version "5.30.4" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.4.tgz#3bc99eca8ba3fcfd6a21480e216b09dab81c3999" + integrity sha512-NTEvqc+Vvu8Q6JeAKryHk2eqLKqsr2St3xhIjhOjQv5wQUBhaTuix4WOSacqj0ONWfKVU12Eug3LEAB95GBkMA== "@typescript-eslint/types@5.9.0": version "5.9.0" @@ -7342,13 +7342,13 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.0.tgz#4565ee8a6d2ac368996e20b2344ea0eab1a8f0bb" - integrity sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw== +"@typescript-eslint/typescript-estree@5.30.4": + version "5.30.4" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.4.tgz#ac4be8a2f8fb1f1c3b346d5992a36163121ddb3f" + integrity sha512-V4VnEs6/J9/nNizaA12IeU4SAeEYaiKr7XndLNfV5+3zZSB4hIu6EhHJixTKhvIqA+EEHgBl6re8pivBMLLO1w== dependencies: - "@typescript-eslint/types" "5.30.0" - "@typescript-eslint/visitor-keys" "5.30.0" + "@typescript-eslint/types" "5.30.4" + "@typescript-eslint/visitor-keys" "5.30.4" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -7368,15 +7368,15 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/utils@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.0.tgz#1dac771fead5eab40d31860716de219356f5f754" - integrity sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw== +"@typescript-eslint/utils@5.30.4": + version "5.30.4" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.4.tgz#07a2b7ce80b2527ea506829f190591b76c70ba9f" + integrity sha512-a+GQrJzOUhn4WT1mUumXDyam+22Oo4c5K/jnZ+6r/4WTQF3q8e4CsC9PLHb4SnOClzOqo/5GLZWvkE1aa5UGKQ== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.30.0" - "@typescript-eslint/types" "5.30.0" - "@typescript-eslint/typescript-estree" "5.30.0" + "@typescript-eslint/scope-manager" "5.30.4" + "@typescript-eslint/types" "5.30.4" + "@typescript-eslint/typescript-estree" "5.30.4" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -7400,12 +7400,12 @@ "@typescript-eslint/types" "5.20.0" eslint-visitor-keys "^3.0.0" -"@typescript-eslint/visitor-keys@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.0.tgz#07721d23daca2ec4c2da7f1e660d41cd78bacac3" - integrity sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw== +"@typescript-eslint/visitor-keys@5.30.4": + version "5.30.4" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.4.tgz#b4969df1a440cc999d4bb7f7b7932dce05537089" + integrity sha512-ulKGse3mruSc8x6l8ORSc6+1ORyJzKmZeIaRTu/WpaF/jx3vHvEn5XZUKF9XaVg2710mFmTAUlLcLYLPp/Zf/Q== dependencies: - "@typescript-eslint/types" "5.30.0" + "@typescript-eslint/types" "5.30.4" eslint-visitor-keys "^3.3.0" "@typescript-eslint/visitor-keys@5.9.0": From e8d661d94c1fdc3258f68e32514110e9f8f96586 Mon Sep 17 00:00:00 2001 From: Matteo Silvestri Date: Mon, 4 Jul 2022 15:57:58 +0200 Subject: [PATCH 167/231] update api-report.md Signed-off-by: Matteo Silvestri --- plugins/scaffolder-backend/api-report.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 8d302e69f6..2053f01e39 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -388,6 +388,7 @@ export function createPublishGitlabAction(options: { gitCommitMessage?: string | undefined; gitAuthorName?: string | undefined; gitAuthorEmail?: string | undefined; + setUserAsOwner?: boolean | undefined; }>; // @public From cc7b4fa137b3075f288064984d70a33faa868e50 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 4 Jul 2022 16:34:10 +0200 Subject: [PATCH 168/231] workflows: bump pr-sync to the latest and greatest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Co-authored-by: blam Co-authored-by: Johan Haals Signed-off-by: Patrik Oldsberg --- .github/workflows/pr.yaml | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 92bd759e36..746b6c80de 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -1,14 +1,31 @@ name: PR on: pull_request_target: + types: + - opened + - synchronize + - reopened + - closed + issue_comment: + types: + - created + pull_request_review_comment: + types: + - created jobs: sync: runs-on: ubuntu-latest - if: github.repository == 'backstage/backstage' + # Avoid running on issue comments + if: github.repository == 'backstage/backstage' && ( github.event.pull_request || github.event.issue.pull_request ) steps: - name: PR sync - uses: backstage/actions/pr-sync@v0.2.2 + uses: backstage/actions/pr-sync@v0.4.0 with: - github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }} + app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} + private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} + installation-id: ${{ secrets.BACKSTAGE_GOALIE_INSTALLATION_ID }} + project-id: PVT_kwDOBFKqdc02LQ + excluded-users: ${{ secrets.OOO_USERS }} + owning-teams: '@backstage/techdocs' From eadb3a8d2e2470ce4b573fd0e72df7a5e508bb1a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 14:48:11 +0000 Subject: [PATCH 169/231] fix(deps): update dependency @kubernetes/client-node to ^0.17.0 Signed-off-by: Renovate Bot --- .changeset/renovate-dd35ce8.md | 7 ++++ plugins/kubernetes-backend/package.json | 2 +- plugins/kubernetes-common/package.json | 2 +- plugins/kubernetes/package.json | 2 +- yarn.lock | 56 ++++--------------------- 5 files changed, 17 insertions(+), 52 deletions(-) create mode 100644 .changeset/renovate-dd35ce8.md diff --git a/.changeset/renovate-dd35ce8.md b/.changeset/renovate-dd35ce8.md new file mode 100644 index 0000000000..9d828bc42d --- /dev/null +++ b/.changeset/renovate-dd35ce8.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-kubernetes-backend': patch +'@backstage/plugin-kubernetes-common': patch +'@backstage/plugin-kubernetes': patch +--- + +Updated dependency `@kubernetes/client-node` to `^0.17.0`. diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 048d025bff..90989b192f 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -42,7 +42,7 @@ "@backstage/errors": "^1.1.0-next.0", "@backstage/plugin-kubernetes-common": "^0.4.0-next.0", "@google-cloud/container": "^4.0.0", - "@kubernetes/client-node": "^0.16.0", + "@kubernetes/client-node": "^0.17.0", "@types/express": "^4.17.6", "@types/luxon": "^2.0.4", "aws-sdk": "^2.840.0", diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json index e109139f74..22c8793d1b 100644 --- a/plugins/kubernetes-common/package.json +++ b/plugins/kubernetes-common/package.json @@ -39,7 +39,7 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.0-next.1", - "@kubernetes/client-node": "^0.16.0" + "@kubernetes/client-node": "^0.17.0" }, "devDependencies": { "@backstage/cli": "^0.18.0-next.1" diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index 35e685382d..ae54b265b3 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -41,7 +41,7 @@ "@backstage/plugin-catalog-react": "^1.1.2-next.1", "@backstage/plugin-kubernetes-common": "^0.4.0-next.0", "@backstage/theme": "^0.2.16-next.0", - "@kubernetes/client-node": "^0.16.0", + "@kubernetes/client-node": "^0.17.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", diff --git a/yarn.lock b/yarn.lock index 9e1d0ad16a..cd66582daa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3449,10 +3449,10 @@ dependencies: ioredis "^5.1.0" -"@kubernetes/client-node@^0.16.0": - version "0.16.3" - resolved "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-0.16.3.tgz#a26a5abbd6e45603b4f75f0baff00e19853e5be7" - integrity sha512-L7IckuyuPfhd+/Urib8MRas9D6sfKEq8IaITYcaE6LlU+Y8MeD7MTbuW6Yb2WdeRuFN8HPSS47mxPnOUNYBXEg== +"@kubernetes/client-node@^0.17.0": + version "0.17.0" + resolved "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-0.17.0.tgz#cbf69ff6c8a311c1461275169612ac46db00fe3f" + integrity sha512-oKQfRf7RPpJIF2Ft92g6jefbW3Mddf6IzcfpBNDWrAy66LmyAWds6fQTMsdutGPuXV6KD29u6RfM3rdzddGMIA== dependencies: "@types/js-yaml" "^4.0.1" "@types/node" "^10.12.0" @@ -3466,7 +3466,7 @@ isomorphic-ws "^4.0.1" js-yaml "^4.1.0" jsonpath-plus "^0.19.0" - openid-client "^4.1.1" + openid-client "^5.1.6" request "^2.88.0" rfc4648 "^1.3.0" shelljs "^0.8.5" @@ -5192,11 +5192,6 @@ resolved "https://registry.npmjs.org/@opentelemetry/api/-/api-1.0.4.tgz#a167e46c10d05a07ab299fc518793b0cff8f6924" integrity sha512-BuJuXRSJNQ3QoKA6GWWDyuLpOUck+9hAXNMCnrloc1aWVoy6Xq6t9PUV08aBZ4Lutqq2LEHM486bpZqoViScog== -"@panva/asn1.js@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz#dd55ae7b8129e02049f009408b97c61ccf9032f6" - integrity sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw== - "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" @@ -14100,23 +14095,6 @@ got@11.8.3: p-cancelable "^2.0.0" responselike "^2.0.0" -got@^11.8.0: - version "11.8.5" - resolved "https://registry.npmjs.org/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" - integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - got@^9.6.0: version "9.6.0" resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -16439,13 +16417,6 @@ joi@^17.4.0: "@sideway/formula" "^3.0.0" "@sideway/pinpoint" "^2.0.0" -jose@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/jose/-/jose-2.0.5.tgz#29746a18d9fff7dcf9d5d2a6f62cb0c7cd27abd3" - integrity sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA== - dependencies: - "@panva/asn1.js" "^1.0.0" - jose@^4.1.4: version "4.5.0" resolved "https://registry.npmjs.org/jose/-/jose-4.5.0.tgz#92829d8cf846351eb55aaaf94f252fb1d191f2d5" @@ -17848,7 +17819,7 @@ make-dir@^3.0.0, make-dir@^3.1.0: dependencies: semver "^6.0.0" -make-error@^1, make-error@^1.1.1, make-error@^1.3.6: +make-error@^1, make-error@^1.1.1: version "1.3.6" resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -19769,20 +19740,7 @@ openapi-types@^12.0.0: resolved "https://registry.npmjs.org/openapi-types/-/openapi-types-12.0.0.tgz#458a99d048f9eae1c067e15d56a8bfb3726041f1" integrity sha512-6Wd9k8nmGQHgCbehZCP6wwWcfXcvinhybUTBatuhjRsCxUIujuYFZc9QnGeae75CyHASewBtxs0HX/qwREReUw== -openid-client@^4.1.1: - version "4.9.0" - resolved "https://registry.npmjs.org/openid-client/-/openid-client-4.9.0.tgz#bdfc9194435316df419f759ce177635146b43074" - integrity sha512-ThBbvRUUZwxUKBVK2UpDNIZ3eJkvtqWI8s5Dm+naV+gJdL+yRhT+8ywqct1gy5uL+xVS5+A/nhFcpJIisH2x6Q== - dependencies: - aggregate-error "^3.1.0" - got "^11.8.0" - jose "^2.0.5" - lru-cache "^6.0.0" - make-error "^1.3.6" - object-hash "^2.0.1" - oidc-token-hash "^5.0.1" - -openid-client@^5.1.3: +openid-client@^5.1.3, openid-client@^5.1.6: version "5.1.8" resolved "https://registry.npmjs.org/openid-client/-/openid-client-5.1.8.tgz#3a24910288b32c32f548fb6e391f44178ce6370f" integrity sha512-EPxJY6bT7YIYQEXSGxRC5flQ3GUhLy98ufdto6+BVBrFGPmwjUpy4xBcYuU/Wt9nPkO/3EgljBrr6Ezx4lp1RQ== From 375fc854fef20e986d9300b53913b68b90835477 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 14:59:50 +0000 Subject: [PATCH 170/231] chore(deps): update backstage/actions action to v0.4.0 Signed-off-by: Renovate Bot --- .github/workflows/ci.yml | 2 +- .github/workflows/cron.yml | 2 +- .github/workflows/deploy_nightly.yml | 2 +- .github/workflows/deploy_packages.yml | 4 ++-- .github/workflows/issue.yaml | 2 +- .github/workflows/sync_code-formatting.yml | 2 +- .github/workflows/sync_snyk-github-issues.yml | 2 +- .github/workflows/verify_e2e-linux.yml | 2 +- .github/workflows/verify_storybook.yml | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 95ec35c795..7e08866f57 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,7 +71,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.2 + uses: backstage/actions/yarn-install@v0.4.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml index ca21c1c283..306f91b637 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -8,7 +8,7 @@ jobs: cron: runs-on: ubuntu-latest steps: - - uses: backstage/actions/cron@v0.2.2 + - uses: backstage/actions/cron@v0.4.0 with: app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} diff --git a/.github/workflows/deploy_nightly.yml b/.github/workflows/deploy_nightly.yml index e8b48ee2fe..15d1d48816 100644 --- a/.github/workflows/deploy_nightly.yml +++ b/.github/workflows/deploy_nightly.yml @@ -26,7 +26,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.2 + uses: backstage/actions/yarn-install@v0.4.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml index 1fb3bf5f31..78a6d3bb8a 100644 --- a/.github/workflows/deploy_packages.yml +++ b/.github/workflows/deploy_packages.yml @@ -67,7 +67,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.2 + uses: backstage/actions/yarn-install@v0.4.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -145,7 +145,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.2 + uses: backstage/actions/yarn-install@v0.4.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml index 8e7955645d..c6f62a059d 100644 --- a/.github/workflows/issue.yaml +++ b/.github/workflows/issue.yaml @@ -10,4 +10,4 @@ jobs: if: github.repository == 'backstage/backstage' steps: - name: Issue sync - uses: backstage/actions/issue-sync@v0.2.2 + uses: backstage/actions/issue-sync@v0.4.0 diff --git a/.github/workflows/sync_code-formatting.yml b/.github/workflows/sync_code-formatting.yml index 565f0e9df2..f4dbc122cc 100644 --- a/.github/workflows/sync_code-formatting.yml +++ b/.github/workflows/sync_code-formatting.yml @@ -20,7 +20,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.2 + uses: backstage/actions/yarn-install@v0.4.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml index 77c192edae..3d84c18322 100644 --- a/.github/workflows/sync_snyk-github-issues.yml +++ b/.github/workflows/sync_snyk-github-issues.yml @@ -22,7 +22,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.2 + uses: backstage/actions/yarn-install@v0.4.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml index 724e220ecb..1f7cbb5339 100644 --- a/.github/workflows/verify_e2e-linux.yml +++ b/.github/workflows/verify_e2e-linux.yml @@ -46,7 +46,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.2 + uses: backstage/actions/yarn-install@v0.4.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml index 4ade8e1924..9468c9bf68 100644 --- a/.github/workflows/verify_storybook.yml +++ b/.github/workflows/verify_storybook.yml @@ -35,7 +35,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.2 + uses: backstage/actions/yarn-install@v0.4.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} - name: storybook yarn install From 65df7804fecec1314bbdedc76d4e0a57058f9ddb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 17:12:54 +0000 Subject: [PATCH 171/231] chore(deps): update dependency puppeteer to v15.3.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 9e1d0ad16a..d11577a79c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21485,9 +21485,9 @@ pupa@^2.1.1: escape-goat "^2.0.0" puppeteer@^15.0.0: - version "15.2.0" - resolved "https://registry.npmjs.org/puppeteer/-/puppeteer-15.2.0.tgz#9cd81334f9c6a2e1c972b5a7ecf3f18ab3bfb978" - integrity sha512-6Mzj5pbq4J4DxJE5o6V+arrOB9Gma0CxOLP1zKYMrMR7AYuNaPzsK7pBrpDwI64W6Mxk5G7NqiLSFTrgSzR1zg== + version "15.3.0" + resolved "https://registry.npmjs.org/puppeteer/-/puppeteer-15.3.0.tgz#2d79200cb72d938dfc7af4fdedaa03c04e7ace14" + integrity sha512-PYZwL0DjGeUOauSie6n9Pf+vDUod+vFnC1uHa1Uj3ex1PhRI6DOheau6oJxxj9oyEPWy8SS19KfZDwln4v4LTg== dependencies: cross-fetch "3.1.5" debug "4.3.4" From be9ea3a6f5daf85bda7374ea358383d36cc85f98 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 17:13:46 +0000 Subject: [PATCH 172/231] chore(deps): update graphqlcodegenerator monorepo Signed-off-by: Renovate Bot --- yarn.lock | 205 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 161 insertions(+), 44 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9e1d0ad16a..5458c710b1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2371,21 +2371,21 @@ meros "^1.1.4" "@graphql-codegen/cli@^2.3.1": - version "2.6.4" - resolved "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-2.6.4.tgz#2fbcd3917cb96ae08c54a865fbcc0393e66abc17" - integrity sha512-VNK5l4lRXOs3uueKkN4YKhO7ZldXaPw/6dZo4BnAzH2ip9XDroNJ0n+ESkbhSBd1bH6wVk3iCIzBfJOnfcsAcg== + version "2.7.0" + resolved "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-2.7.0.tgz#610f3cb2798d581fff3af8d8ba522113a1811fc5" + integrity sha512-qlBcS6jGfZ/xWXwqiyRLHGRuLC9gUdF8AwGHN7LdAYEP5MjL7pIXb02W5JuvMn47rrvr2Q22H9ECppZX65oSAg== dependencies: "@graphql-codegen/core" "2.5.1" "@graphql-codegen/plugin-helpers" "^2.4.1" - "@graphql-tools/apollo-engine-loader" "^7.0.5" + "@graphql-tools/apollo-engine-loader" "^7.3.1" "@graphql-tools/code-file-loader" "^7.0.6" "@graphql-tools/git-loader" "^7.0.5" "@graphql-tools/github-loader" "^7.0.5" "@graphql-tools/graphql-file-loader" "^7.0.5" "@graphql-tools/json-file-loader" "^7.1.2" "@graphql-tools/load" "^7.3.0" - "@graphql-tools/prisma-loader" "^7.0.6" - "@graphql-tools/url-loader" "^7.0.11" + "@graphql-tools/prisma-loader" "^7.2.2" + "@graphql-tools/url-loader" "^7.12.1" "@graphql-tools/utils" "^8.1.1" ansi-escapes "^4.3.1" chalk "^4.1.0" @@ -2421,13 +2421,13 @@ tslib "~2.3.0" "@graphql-codegen/graphql-modules-preset@^2.3.2": - version "2.3.13" - resolved "https://registry.npmjs.org/@graphql-codegen/graphql-modules-preset/-/graphql-modules-preset-2.3.13.tgz#181ab8acacf376c38d572d6d50aad609aba3cd3d" - integrity sha512-hi/vKUrVa62d5W2euSapUqTNf2ysfq4RjRc0Pcren7zPqMzD3QgbYRLjDtPsXXQntZDmDxoJVd1BEzjpPGD2/g== + version "2.3.14" + resolved "https://registry.npmjs.org/@graphql-codegen/graphql-modules-preset/-/graphql-modules-preset-2.3.14.tgz#78afc5193707cba8a9ef6e2053e90eb9a9a3499c" + integrity sha512-6i2n3pGqvSniA8Qued0KUxMdAEWPREzD9nSMa+hC+r6u0k6V8nW+jWWeLNEi65Ctmt527KSYmGj8PH1RFRqhiw== dependencies: "@graphql-codegen/plugin-helpers" "^2.4.0" - "@graphql-codegen/visitor-plugin-common" "2.9.1" - "@graphql-tools/utils" "8.6.13" + "@graphql-codegen/visitor-plugin-common" "2.10.0" + "@graphql-tools/utils" "8.8.0" change-case-all "1.0.14" parse-filepath "^1.0.2" tslib "~2.4.0" @@ -2454,32 +2454,32 @@ tslib "~2.3.0" "@graphql-codegen/typescript-resolvers@^2.4.3": - version "2.6.6" - resolved "https://registry.npmjs.org/@graphql-codegen/typescript-resolvers/-/typescript-resolvers-2.6.6.tgz#c42cabbc05103b44a29df5ac4a015f2a8e8ab4aa" - integrity sha512-6yVU0rojI64qZbAtGy4+5kA1xJbolcWbefd4y/nwLOn2g99QBHt9nQRCVl96rppfBNinLPkiJCtQ0thOHu9glg== + version "2.6.7" + resolved "https://registry.npmjs.org/@graphql-codegen/typescript-resolvers/-/typescript-resolvers-2.6.7.tgz#a6cadbd6822680678675fffbb826c7163ac60ca0" + integrity sha512-zdB4VuXzBRl2EbxQ/SZ9DRiRMcvCY3eZ2FPM2MnEidR7ggh3GdSg3Ewo6HgwRIHBxI0+DeoK0IM/Po0Rs3q0DA== dependencies: "@graphql-codegen/plugin-helpers" "^2.4.0" - "@graphql-codegen/typescript" "^2.5.1" - "@graphql-codegen/visitor-plugin-common" "2.9.1" + "@graphql-codegen/typescript" "^2.6.0" + "@graphql-codegen/visitor-plugin-common" "2.10.0" "@graphql-tools/utils" "^8.1.1" auto-bind "~4.0.0" tslib "~2.4.0" -"@graphql-codegen/typescript@^2.4.2", "@graphql-codegen/typescript@^2.5.1": - version "2.5.1" - resolved "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-2.5.1.tgz#5131485ff3ac83d5bc0aae11a2af0c9bdc08854c" - integrity sha512-D/9V2VfVIE4Mu5UiMGQtxyFU5xe1ZkAZi8g/IsqymW8rqlhTwsGhtk4JR55qPfOYxR8G94RJSJpzgNakRneytw== +"@graphql-codegen/typescript@^2.4.2", "@graphql-codegen/typescript@^2.6.0": + version "2.6.0" + resolved "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-2.6.0.tgz#75e7a54a25b29906ca4e462d1be6bf830f21b328" + integrity sha512-f36ilg8J+wui0OhmQglIZ+2z4Ybc08Y7r7BlBDqfJ1F5X0zau0SlC7Hp2iCoCA0ucqZYtiUU/0n+/R8m1cTrQQ== dependencies: "@graphql-codegen/plugin-helpers" "^2.4.0" "@graphql-codegen/schema-ast" "^2.4.1" - "@graphql-codegen/visitor-plugin-common" "2.9.1" + "@graphql-codegen/visitor-plugin-common" "2.10.0" auto-bind "~4.0.0" tslib "~2.4.0" -"@graphql-codegen/visitor-plugin-common@2.9.1": - version "2.9.1" - resolved "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-2.9.1.tgz#17dfe33e19e846e7475ab9d4ff43de5130e18397" - integrity sha512-j9eGOSGt+sJcwv0ijhZiQ2cF/0ponscekNVoF+vHdOT4RB0qgOQxykPBk6EbKxIHECnkdV8ARdPVTA21A93/QQ== +"@graphql-codegen/visitor-plugin-common@2.10.0": + version "2.10.0" + resolved "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-2.10.0.tgz#d886d8281dfc6e4b9729a5468ffe18ebaefc883f" + integrity sha512-nWoxHKUdwOJCWV96Ks1x4EwYCWsZDJXB+2j6EQz5j27DzdxmQInZ86degaDCd3EgbwhMQEMtiZiPGFFDrgBkHA== dependencies: "@graphql-codegen/plugin-helpers" "^2.4.0" "@graphql-tools/optimize" "^1.0.1" @@ -2492,15 +2492,15 @@ parse-filepath "^1.0.2" tslib "~2.4.0" -"@graphql-tools/apollo-engine-loader@^7.0.5": - version "7.2.11" - resolved "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-7.2.11.tgz#c247eef8986ce259de6dd2da39daeaba7960ac33" - integrity sha512-0NmAlTd/lQl35OaP18dhxlcdu4w4K+auPfbkiaDfArzdhn6Duhq+ATqMvj6Fx5C23zlcvQ0AJnT5a5Yb55K/5w== +"@graphql-tools/apollo-engine-loader@^7.3.1": + version "7.3.1" + resolved "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-7.3.1.tgz#535cb259fa6e0dbf1cf960e7212d58b8294bb370" + integrity sha512-PJhX4gQeoPtR2BJFYHYVLdLYkqQHB94r9IC64GamFV+kxR+jzQYZJdDTgnFZxvpvGJ7rEgYKNjcfWS+r+CQisQ== dependencies: - "@graphql-tools/utils" "8.6.9" - cross-undici-fetch "^0.3.0" - sync-fetch "0.3.1" - tslib "~2.3.0" + "@graphql-tools/utils" "8.8.0" + cross-undici-fetch "^0.4.11" + sync-fetch "0.4.1" + tslib "^2.4.0" "@graphql-tools/batch-execute@8.4.6": version "8.4.6" @@ -2512,6 +2512,16 @@ tslib "~2.3.0" value-or-promise "1.0.11" +"@graphql-tools/batch-execute@8.5.0": + version "8.5.0" + resolved "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.5.0.tgz#2767a9abf4e2712871a69360a27ef13ada1c019e" + integrity sha512-S9/76X4uYIbVlJyRzXhCBbTJvVD0VvaWNqGiKgkITxlq4aBsTOHVuE84OSi3E1QKP3PTiJYrgMIn220iFOkyQw== + dependencies: + "@graphql-tools/utils" "8.8.0" + dataloader "2.1.0" + tslib "^2.4.0" + value-or-promise "1.0.11" + "@graphql-tools/code-file-loader@^7.0.6": version "7.2.14" resolved "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-7.2.14.tgz#b43ce0c682040b3969f1f785b18fc33c79341084" @@ -2536,6 +2546,18 @@ tslib "~2.3.0" value-or-promise "1.0.11" +"@graphql-tools/delegate@8.8.0": + version "8.8.0" + resolved "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-8.8.0.tgz#acd3e48e4ca82aace92cc3d920b5c727c35eaf7b" + integrity sha512-dbhfOI8rQXPcowXrbwHLOBY9oGi7qxtlrXF4RuRXmjqGTs2AgogdOE3Ep1+6wFD7qYTuFmHXZ8Cl0PmhoZUgrg== + dependencies: + "@graphql-tools/batch-execute" "8.5.0" + "@graphql-tools/schema" "8.5.0" + "@graphql-tools/utils" "8.8.0" + dataloader "2.1.0" + tslib "~2.4.0" + value-or-promise "1.0.11" + "@graphql-tools/git-loader@^7.0.5": version "7.1.13" resolved "https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-7.1.13.tgz#95f4715f4caf290dde975813bc87e0a96a81095d" @@ -2618,6 +2640,14 @@ "@graphql-tools/utils" "8.6.9" tslib "~2.3.0" +"@graphql-tools/merge@8.3.0": + version "8.3.0" + resolved "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.0.tgz#d3a8ba10942f8598788c3e03f97cc1d0c0b055f8" + integrity sha512-xRa7RAQok/0DD2YnjuqikMrr7dUAxTpdGtZ7BkvUUGhYs3B3p7reCAfvOVr1DJAqVToP7hdlMk+S5+Ylk+AaqA== + dependencies: + "@graphql-tools/utils" "8.8.0" + tslib "^2.4.0" + "@graphql-tools/mock@^8.1.2": version "8.6.8" resolved "https://registry.npmjs.org/@graphql-tools/mock/-/mock-8.6.8.tgz#232a23c0c14dcfca88012886230b93e6fc2303e2" @@ -2635,13 +2665,13 @@ dependencies: tslib "~2.3.0" -"@graphql-tools/prisma-loader@^7.0.6": - version "7.1.13" - resolved "https://registry.npmjs.org/@graphql-tools/prisma-loader/-/prisma-loader-7.1.13.tgz#3b46e9d9414e71cfeb1a8284c945329eca77a190" - integrity sha512-rctgCI11ZjPJd4ncNTV7mmjV2WN2LRL3aTuTJWHjudO+iJPgoWyor0idl+aP0fOX2GnDK7zASmWwVShuGBJb9g== +"@graphql-tools/prisma-loader@^7.2.2": + version "7.2.2" + resolved "https://registry.npmjs.org/@graphql-tools/prisma-loader/-/prisma-loader-7.2.2.tgz#ee56371f75a4e82330b0e4915f57976bf0f4a16a" + integrity sha512-f5txUBRwwZmPQYL5g5CNdOjOglFE/abtnEVOvUCq+nET0BRuxcuxUD5vykfZnkql9sNvnCFAfrZuBVe5S2n3bA== dependencies: - "@graphql-tools/url-loader" "7.9.14" - "@graphql-tools/utils" "8.6.9" + "@graphql-tools/url-loader" "7.12.1" + "@graphql-tools/utils" "8.8.0" "@types/js-yaml" "^4.0.0" "@types/json-stable-stringify" "^1.0.32" "@types/jsonwebtoken" "^8.5.0" @@ -2658,7 +2688,7 @@ lodash "^4.17.20" replaceall "^0.1.6" scuid "^1.1.0" - tslib "~2.3.0" + tslib "^2.4.0" yaml-ast-parser "^0.0.43" "@graphql-tools/relay-operation-optimizer@^6.4.14": @@ -2680,7 +2710,38 @@ tslib "~2.3.0" value-or-promise "1.0.11" -"@graphql-tools/url-loader@7.9.14", "@graphql-tools/url-loader@^7.0.11", "@graphql-tools/url-loader@^7.4.2": +"@graphql-tools/schema@8.5.0": + version "8.5.0" + resolved "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.5.0.tgz#0332b3a2e674d16e9bf8a58dfd47432449ce2368" + integrity sha512-VeFtKjM3SA9/hCJJfr95aEdC3G0xIKM9z0Qdz4i+eC1g2fdZYnfWFt2ucW4IME+2TDd0enHlKzaV0qk2SLVUww== + dependencies: + "@graphql-tools/merge" "8.3.0" + "@graphql-tools/utils" "8.8.0" + tslib "^2.4.0" + value-or-promise "1.0.11" + +"@graphql-tools/url-loader@7.12.1", "@graphql-tools/url-loader@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-7.12.1.tgz#931a65da4faced1a71ddc5af638b87140ff3dfb6" + integrity sha512-Fd3ZZLEEr9GGFHEbdrcaMHFQu01BLpFnNDBkISupvjokd497O5Uh0xZvsZGC6mxVt0WWQWpgaK2ef+oLuOdLqQ== + dependencies: + "@graphql-tools/delegate" "8.8.0" + "@graphql-tools/utils" "8.8.0" + "@graphql-tools/wrap" "8.5.0" + "@n1ru4l/graphql-live-query" "^0.9.0" + "@types/ws" "^8.0.0" + cross-undici-fetch "^0.4.11" + dset "^3.1.2" + extract-files "^11.0.0" + graphql-ws "^5.4.1" + isomorphic-ws "^5.0.0" + meros "^1.1.4" + sync-fetch "^0.4.0" + tslib "^2.4.0" + value-or-promise "^1.0.11" + ws "^8.3.0" + +"@graphql-tools/url-loader@^7.4.2": version "7.9.14" resolved "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-7.9.14.tgz#9f76af9a6c55a0cf2e87ccf9b3be15eeb6af188c" integrity sha512-7IXiqUYp0cHeM+qvgjM4jAq8uJhl3PDdQYkyIj5wzZ7XjrkdV3JjPt0cHj2IBIeEwQJOjEKNeFYXjOlg73guCQ== @@ -2716,6 +2777,13 @@ dependencies: tslib "~2.3.0" +"@graphql-tools/utils@8.8.0": + version "8.8.0" + resolved "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.8.0.tgz#8332ff80a1da9204ccf514750dd6f5c5cccf17dc" + integrity sha512-KJrtx05uSM/cPYFdTnGAS1doL5bftJLAiFCDMZ8Vkifztz3BFn3gpFiy/o4wDtM8s39G46mxmt2Km/RmeltfGw== + dependencies: + tslib "^2.4.0" + "@graphql-tools/wrap@8.4.16", "@graphql-tools/wrap@^8.3.1": version "8.4.16" resolved "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-8.4.16.tgz#87dce9ec623a921e5a62f44e75abc9655892724b" @@ -2727,6 +2795,17 @@ tslib "~2.3.0" value-or-promise "1.0.11" +"@graphql-tools/wrap@8.5.0": + version "8.5.0" + resolved "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-8.5.0.tgz#ce1b0d775e1fc3a17404df566f4d2196d31c6e20" + integrity sha512-I+x9dBNzC135WWPi04ejqurR/zDmhfeGbCftCaYKF4CvgWd+ZaJx4Uc74n1SBegQtrj+KDrOS4HgKwf9vAVR7A== + dependencies: + "@graphql-tools/delegate" "8.8.0" + "@graphql-tools/schema" "8.5.0" + "@graphql-tools/utils" "8.8.0" + tslib "^2.4.0" + value-or-promise "1.0.11" + "@graphql-typed-document-node/core@^3.1.0", "@graphql-typed-document-node/core@^3.1.1": version "3.1.1" resolved "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.1.tgz#076d78ce99822258cf813ecc1e7fa460fa74d052" @@ -9081,7 +9160,7 @@ buffer@4.9.2, buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.2.0, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0, buffer@^5.7.0: +buffer@^5.2.0, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0, buffer@^5.7.0, buffer@^5.7.1: version "5.7.1" resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -9124,6 +9203,13 @@ builtins@^5.0.0: dependencies: semver "^7.0.0" +busboy@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + byline@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" @@ -10558,6 +10644,19 @@ cross-undici-fetch@^0.3.0: undici "^5.0.0" web-streams-polyfill "^3.2.0" +cross-undici-fetch@^0.4.11: + version "0.4.11" + resolved "https://registry.npmjs.org/cross-undici-fetch/-/cross-undici-fetch-0.4.11.tgz#bef38dc729a01db6e07c84fee6de1089b5d3d0a4" + integrity sha512-pRp+EWewyOPYIeUvwOqCIqylCFWqlBwwr6nlZB38v3PhWxS1RYfSgHUJApYTT8jm71SbL5p4qg5kUQv6ZyS24A== + dependencies: + abort-controller "^3.0.0" + busboy "^1.6.0" + form-data-encoder "^1.7.1" + formdata-node "^4.3.1" + node-fetch "^2.6.7" + undici "5.5.1" + web-streams-polyfill "^3.2.0" + crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -11704,7 +11803,7 @@ drange@^1.0.2: resolved "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz#b2aecec2aab82fcef11dbbd7b9e32b83f8f6c0b8" integrity sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA== -dset@^3.1.0, dset@^3.1.1: +dset@^3.1.0, dset@^3.1.1, dset@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz#89c436ca6450398396dc6538ea00abc0c54cd45a" integrity sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q== @@ -15879,6 +15978,11 @@ isomorphic-ws@^4.0.1: resolved "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== +isomorphic-ws@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" + integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== + isstream@~0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -24026,6 +24130,11 @@ stream-transform@^2.1.3: dependencies: mixme "^0.5.1" +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + strict-event-emitter@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.2.0.tgz#78e2f75dc6ea502e5d8a877661065a1e2deedecd" @@ -24512,6 +24621,14 @@ sync-fetch@0.3.1, sync-fetch@^0.3.1: buffer "^5.7.0" node-fetch "^2.6.1" +sync-fetch@0.4.1, sync-fetch@^0.4.0: + version "0.4.1" + resolved "https://registry.npmjs.org/sync-fetch/-/sync-fetch-0.4.1.tgz#87b8684eef2fa25c96c4683ae308473a4e5c571f" + integrity sha512-JDtyFEvnKUzt1CxRtzzsGgkBanEv8XRmLyJo0F0nGkpCR8EjYmpOJJXz8GA/SWtlPU0nAYh0+CNMNnFworGyOA== + dependencies: + buffer "^5.7.1" + node-fetch "^2.6.1" + tapable@^1.0.0: version "1.1.3" resolved "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -25316,7 +25433,7 @@ underscore@^1.12.1, underscore@^1.9.1: resolved "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz#0c1c6bd2df54b6b69f2314066d65b6cde6fcf9d1" integrity sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g== -undici@^5.0.0: +undici@5.5.1, undici@^5.0.0: version "5.5.1" resolved "https://registry.npmjs.org/undici/-/undici-5.5.1.tgz#baaf25844a99eaa0b22e1ef8d205bffe587c8f43" integrity sha512-MEvryPLf18HvlCbLSzCW0U00IMftKGI5udnjrQbC5D4P0Hodwffhv+iGfWuJwg16Y/TK11ZFK8i+BPVW2z/eAw== From 8356f4aeeb9a7f35a2f461532a3449821697da58 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 19:16:43 +0000 Subject: [PATCH 173/231] fix(deps): update typescript-eslint monorepo to v5.30.5 Signed-off-by: Renovate Bot --- yarn.lock | 90 +++++++++++++++++++++++++++---------------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9e1d0ad16a..3b1cc42bef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7245,13 +7245,13 @@ integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== "@typescript-eslint/eslint-plugin@^5.9.0": - version "5.30.4" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.4.tgz#a46c8c0ab755a936cb63786a6222876ce51675e4" - integrity sha512-xjujQISAIa4HAaos8fcMZXmqkuZqMx6icdxkI88jMM/eNe4J8AuTLYnLK+zdm0mBYLyctdFf//UE4/xFCcQzYQ== + version "5.30.5" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.5.tgz#e9a0afd6eb3b1d663db91cf1e7bc7584d394503d" + integrity sha512-lftkqRoBvc28VFXEoRgyZuztyVUQ04JvUnATSPtIRFAccbXTWL6DEtXGYMcbg998kXw1NLUJm7rTQ9eUt+q6Ig== dependencies: - "@typescript-eslint/scope-manager" "5.30.4" - "@typescript-eslint/type-utils" "5.30.4" - "@typescript-eslint/utils" "5.30.4" + "@typescript-eslint/scope-manager" "5.30.5" + "@typescript-eslint/type-utils" "5.30.5" + "@typescript-eslint/utils" "5.30.5" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -7272,13 +7272,13 @@ eslint-utils "^3.0.0" "@typescript-eslint/parser@^5.9.0": - version "5.30.4" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.4.tgz#659411e8700b22c8d5400798ef24838425bf4567" - integrity sha512-/ge1HtU63wVoED4VnlU2o+FPFmi017bPYpeSrCmd8Ycsti4VSxXrmcpXXm7JpI4GT0Aa7qviabv1PEp6L5bboQ== + version "5.30.5" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.5.tgz#f667c34e4e4c299d98281246c9b1e68c03a92522" + integrity sha512-zj251pcPXI8GO9NDKWWmygP6+UjwWmrdf9qMW/L/uQJBM/0XbU2inxe5io/234y/RCvwpKEYjZ6c1YrXERkK4Q== dependencies: - "@typescript-eslint/scope-manager" "5.30.4" - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/typescript-estree" "5.30.4" + "@typescript-eslint/scope-manager" "5.30.5" + "@typescript-eslint/types" "5.30.5" + "@typescript-eslint/typescript-estree" "5.30.5" debug "^4.3.4" "@typescript-eslint/scope-manager@5.20.0": @@ -7289,13 +7289,13 @@ "@typescript-eslint/types" "5.20.0" "@typescript-eslint/visitor-keys" "5.20.0" -"@typescript-eslint/scope-manager@5.30.4": - version "5.30.4" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.4.tgz#8140efd2bc12d41d74e8af23872a89f3edbe552e" - integrity sha512-DNzlQwGSiGefz71JwaHrpcaAX3zYkEcy8uVuan3YMKOa6qeW/y+7SaD8KIsIAruASwq6P+U4BjWBWtM2O+mwBQ== +"@typescript-eslint/scope-manager@5.30.5": + version "5.30.5" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.5.tgz#7f90b9d6800552c856a5f3644f5e55dd1469d964" + integrity sha512-NJ6F+YHHFT/30isRe2UTmIGGAiXKckCyMnIV58cE3JkHmaD6e5zyEYm5hBDv0Wbin+IC0T1FWJpD3YqHUG/Ydg== dependencies: - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/visitor-keys" "5.30.4" + "@typescript-eslint/types" "5.30.5" + "@typescript-eslint/visitor-keys" "5.30.5" "@typescript-eslint/scope-manager@5.9.0": version "5.9.0" @@ -7305,12 +7305,12 @@ "@typescript-eslint/types" "5.9.0" "@typescript-eslint/visitor-keys" "5.9.0" -"@typescript-eslint/type-utils@5.30.4": - version "5.30.4" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.4.tgz#00ff19073cd01f7d27e9af49ce08d6a69f1e4f01" - integrity sha512-55cf1dZviwwv+unDB+mF8vZkfta5muTK6bppPvenWWCD7slZZ0DEsXUjZerqy7Rq8s3J4SXdg4rMIY8ngCtTmA== +"@typescript-eslint/type-utils@5.30.5": + version "5.30.5" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.5.tgz#7a9656f360b4b1daea635c4621dab053d08bf8a9" + integrity sha512-k9+ejlv1GgwN1nN7XjVtyCgE0BTzhzT1YsQF0rv4Vfj2U9xnslBgMYYvcEYAFVdvhuEscELJsB7lDkN7WusErw== dependencies: - "@typescript-eslint/utils" "5.30.4" + "@typescript-eslint/utils" "5.30.5" debug "^4.3.4" tsutils "^3.21.0" @@ -7319,10 +7319,10 @@ resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.20.0.tgz#fa39c3c2aa786568302318f1cb51fcf64258c20c" integrity sha512-+d8wprF9GyvPwtoB4CxBAR/s0rpP25XKgnOvMf/gMXYDvlUC3rPFHupdTQ/ow9vn7UDe5rX02ovGYQbv/IUCbg== -"@typescript-eslint/types@5.30.4": - version "5.30.4" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.4.tgz#3bc99eca8ba3fcfd6a21480e216b09dab81c3999" - integrity sha512-NTEvqc+Vvu8Q6JeAKryHk2eqLKqsr2St3xhIjhOjQv5wQUBhaTuix4WOSacqj0ONWfKVU12Eug3LEAB95GBkMA== +"@typescript-eslint/types@5.30.5": + version "5.30.5" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.5.tgz#36a0c05a72af3623cdf9ee8b81ea743b7de75a98" + integrity sha512-kZ80w/M2AvsbRvOr3PjaNh6qEW1LFqs2pLdo2s5R38B2HYXG8Z0PP48/4+j1QHJFL3ssHIbJ4odPRS8PlHrFfw== "@typescript-eslint/types@5.9.0": version "5.9.0" @@ -7342,13 +7342,13 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.30.4": - version "5.30.4" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.4.tgz#ac4be8a2f8fb1f1c3b346d5992a36163121ddb3f" - integrity sha512-V4VnEs6/J9/nNizaA12IeU4SAeEYaiKr7XndLNfV5+3zZSB4hIu6EhHJixTKhvIqA+EEHgBl6re8pivBMLLO1w== +"@typescript-eslint/typescript-estree@5.30.5": + version "5.30.5" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.5.tgz#c520e4eba20551c4ec76af8d344a42eb6c9767bb" + integrity sha512-qGTc7QZC801kbYjAr4AgdOfnokpwStqyhSbiQvqGBLixniAKyH+ib2qXIVo4P9NgGzwyfD9I0nlJN7D91E1VpQ== dependencies: - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/visitor-keys" "5.30.4" + "@typescript-eslint/types" "5.30.5" + "@typescript-eslint/visitor-keys" "5.30.5" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -7368,15 +7368,15 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/utils@5.30.4": - version "5.30.4" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.4.tgz#07a2b7ce80b2527ea506829f190591b76c70ba9f" - integrity sha512-a+GQrJzOUhn4WT1mUumXDyam+22Oo4c5K/jnZ+6r/4WTQF3q8e4CsC9PLHb4SnOClzOqo/5GLZWvkE1aa5UGKQ== +"@typescript-eslint/utils@5.30.5": + version "5.30.5" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.5.tgz#3999cbd06baad31b9e60d084f20714d1b2776765" + integrity sha512-o4SSUH9IkuA7AYIfAvatldovurqTAHrfzPApOZvdUq01hHojZojCFXx06D/aFpKCgWbMPRdJBWAC3sWp3itwTA== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.30.4" - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/typescript-estree" "5.30.4" + "@typescript-eslint/scope-manager" "5.30.5" + "@typescript-eslint/types" "5.30.5" + "@typescript-eslint/typescript-estree" "5.30.5" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -7400,12 +7400,12 @@ "@typescript-eslint/types" "5.20.0" eslint-visitor-keys "^3.0.0" -"@typescript-eslint/visitor-keys@5.30.4": - version "5.30.4" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.4.tgz#b4969df1a440cc999d4bb7f7b7932dce05537089" - integrity sha512-ulKGse3mruSc8x6l8ORSc6+1ORyJzKmZeIaRTu/WpaF/jx3vHvEn5XZUKF9XaVg2710mFmTAUlLcLYLPp/Zf/Q== +"@typescript-eslint/visitor-keys@5.30.5": + version "5.30.5" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.5.tgz#d4bb969202019d5d5d849a0aaedc7370cc044b14" + integrity sha512-D+xtGo9HUMELzWIUqcQc0p2PO4NyvTrgIOK/VnSH083+8sq0tiLozNRKuLarwHYGRuA6TVBQSuuLwJUDWd3aaA== dependencies: - "@typescript-eslint/types" "5.30.4" + "@typescript-eslint/types" "5.30.5" eslint-visitor-keys "^3.3.0" "@typescript-eslint/visitor-keys@5.9.0": From c318f93c55d4f07f8e0b0f775104bc8d19cb2a1d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 19:19:08 +0000 Subject: [PATCH 174/231] fix(deps): update dependency @uiw/react-codemirror to v4.10.4 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9e1d0ad16a..5bf7688b24 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7417,9 +7417,9 @@ eslint-visitor-keys "^3.0.0" "@uiw/react-codemirror@^4.9.3": - version "4.9.5" - resolved "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.9.5.tgz#0f66c09dfc355baef5a7020f206da8db90bae223" - integrity sha512-KHgP/PII9Gv4iEUzbdO95qpSSPy27iSHzxQ01mBPWC4UvzuA0eQY2h64gzi/ld68esbKMGYoevgOBPCRJwNN1A== + version "4.10.4" + resolved "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.10.4.tgz#f26833d5cfc4c63de1858c587218efd9f85f18e2" + integrity sha512-eMl/Xtmhhjo1Hmx0P1NgwVlviOUCdjSYPKHn0bgUG6aLgZjCo1l0MJDDuLikGp8YlDrXcDKgiuXPt4GykBaUmg== dependencies: "@babel/runtime" ">=7.11.0" "@codemirror/theme-one-dark" "^6.0.0" From a145672f0f273ffbce6db6d1afbc2cf14ca6627b Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Wed, 22 Jun 2022 00:18:59 +0200 Subject: [PATCH 175/231] feat: align msgraph provider config Align msgraph entity provider config with the config of other entity providers. Closes: #12065 Signed-off-by: Patrick Jungermann --- .changeset/long-bananas-rescue.md | 91 ++++++++++ app-config.yaml | 10 -- .../catalog-backend-module-msgraph/README.md | 144 ++++++--------- .../api-report.md | 22 ++- .../config.d.ts | 169 ++++++++++++++++++ .../src/microsoftGraph/config.test.ts | 133 +++++++++++++- .../src/microsoftGraph/config.ts | 100 ++++++++++- .../MicrosoftGraphOrgEntityProvider.test.ts | 46 +++-- .../MicrosoftGraphOrgEntityProvider.ts | 108 ++++++++++- .../MicrosoftGraphOrgReaderProcessor.test.ts | 1 + .../MicrosoftGraphOrgReaderProcessor.ts | 6 +- .../src/processors/index.ts | 5 +- 12 files changed, 710 insertions(+), 125 deletions(-) create mode 100644 .changeset/long-bananas-rescue.md diff --git a/.changeset/long-bananas-rescue.md b/.changeset/long-bananas-rescue.md new file mode 100644 index 0000000000..d990fd67c6 --- /dev/null +++ b/.changeset/long-bananas-rescue.md @@ -0,0 +1,91 @@ +--- +'@backstage/plugin-catalog-backend-module-msgraph': minor +--- + +Align `msgraph` plugin's entity provider config with other providers. **Deprecated** entity processor as well as previous config. + +You will see warning at the log output until you migrate to the new setup. +All deprecated parts will be removed eventually after giving some time to migrate. + +Please find information on how to migrate your current setup to the new one below. + +**Migration Guide:** + +There were two different way on how to use the msgraph plugin: processor or provider. + +Previous registration for the processor: + +```typescript +// packages/backend/src/plugins/catalog.ts +builder.addProcessor( + MicrosoftGraphOrgReaderProcessor.fromConfig(env.config, { + logger: env.logger, + // [...] + }), +); +``` + +Previous registration when using the provider: + +```typescript +// packages/backend/src/plugins/catalog.ts +builder.addEntityProvider( + MicrosoftGraphOrgEntityProvider.fromConfig(env.config, { + id: 'https://graph.microsoft.com/v1.0', + target: 'https://graph.microsoft.com/v1.0', + logger: env.logger, + schedule: env.scheduler.createScheduledTaskRunner({ + frequency: { minutes: 30 }, + timeout: { minutes: 3 }, + }), + // [...] + }), +); +``` + +Previous configuration as used for both: + +```yaml +# app-config.yaml +catalog: + processors: + microsoftGraphOrg: + providers: + - target: https://graph.microsoft.com/v1.0 + # [...] +``` + +**Replacement:** + +Please check https://github.com/backstage/backstage/blob/master/plugins/catalog-backend-module-msgraph/README.md for the complete documentation of all configuration options (config as well as registration of the provider). + +```yaml +# app-config.yaml +catalog: + providers: + microsoftGraphOrg: + # In case you used the deprecated configuration with the entity provider + # using the value of `target` will keep the same location key for all + providerId: # some stable ID which will be used as part of the location key for all ingested data + target: https://graph.microsoft.com/v1.0 + # [...] +``` + +```typescript +// packages/backend/src/plugins/catalog.ts +builder.addEntityProvider( + MicrosoftGraphOrgEntityProvider.fromConfig(env.config, { + logger: env.logger, + schedule: env.scheduler.createScheduledTaskRunner({ + frequency: { minutes: 30 }, + timeout: { minutes: 3 }, + }), + // [...] + }), +); +``` + +In case you've used multiple entity providers before +**and** you had different transformers for each of them +you can provide these directly at the one `fromConfig` call +by passing a Record with the provider ID as key. diff --git a/app-config.yaml b/app-config.yaml index a56a3df9d1..9a3206026e 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -234,16 +234,6 @@ catalog: # dn: ou=access,ou=groups,ou=example,dc=example,dc=net # options: # filter: (&(objectClass=some-group-class)(!(groupType=email))) - microsoftGraphOrg: - ### Example for how to add your Microsoft Graph tenant - #providers: - # - target: https://graph.microsoft.com/v1.0 - # authority: https://login.microsoftonline.com - # tenantId: ${MICROSOFT_GRAPH_TENANT_ID} - # clientId: ${MICROSOFT_GRAPH_CLIENT_ID} - # clientSecret: ${MICROSOFT_GRAPH_CLIENT_SECRET_TOKEN} - # userFilter: accountEnabled eq true and userType eq 'member' - # groupFilter: securityEnabled eq false and mailEnabled eq true and groupTypes/any(c:c+eq+'Unified') locations: # Add a location here to ingest it, for example from a URL: diff --git a/plugins/catalog-backend-module-msgraph/README.md b/plugins/catalog-backend-module-msgraph/README.md index e6429152e4..6132d5abc6 100644 --- a/plugins/catalog-backend-module-msgraph/README.md +++ b/plugins/catalog-backend-module-msgraph/README.md @@ -1,85 +1,86 @@ # Catalog Backend Module for Microsoft Graph -This is an extension module to the `plugin-catalog-backend` plugin, providing a -`MicrosoftGraphOrgReaderProcessor` and a `MicrosoftGraphOrgEntityProvider` that -can be used to ingest organization data from the Microsoft Graph API. This -processor is useful if you want to import users and groups from Azure Active -Directory or Office 365. +This is an extension module to the `plugin-catalog-backend` plugin, providing a `MicrosoftGraphOrgEntityProvider` +that can be used to ingest organization data from the Microsoft Graph API. +This provider is useful if you want to import users and groups from Azure Active Directory or Office 365. ## Getting Started -First you need to decide whether you want to use an [entity provider or a processor](https://backstage.io/docs/features/software-catalog/life-of-an-entity#stitching) to ingest the organization data. -If you want groups and users deleted from the source to be automatically deleted -from Backstage, choose the entity provider. - 1. Create or use an existing App registration in the [Microsoft Azure Portal](https://portal.azure.com/). The App registration requires at least the API permissions `Group.Read.All`, `GroupMember.Read.All`, `User.Read` and `User.Read.All` for Microsoft Graph (if you still run into errors about insufficient privileges, add `Team.ReadBasic.All` and `TeamMember.Read.All` too). -2. Configure the processor or entity provider: +2. Configure the entity provider: ```yaml # app-config.yaml catalog: - processors: + providers: microsoftGraphOrg: - providers: - - target: https://graph.microsoft.com/v1.0 - authority: https://login.microsoftonline.com - # If you don't know you tenantId, you can use Microsoft Graph Explorer - # to query it - tenantId: ${MICROSOFT_GRAPH_TENANT_ID} - # Client Id and Secret can be created under Certificates & secrets in - # the App registration in the Microsoft Azure Portal. - clientId: ${MICROSOFT_GRAPH_CLIENT_ID} - clientSecret: ${MICROSOFT_GRAPH_CLIENT_SECRET_TOKEN} - # Optional mode for querying which defaults to "basic". - # By default, the Microsoft Graph API only provides the basic feature set - # for querying. Certain features are limited to advanced querying capabilities. - # (See https://docs.microsoft.com/en-us/graph/aad-advanced-queries) - queryMode: basic # basic | advanced + providerId: + target: https://graph.microsoft.com/v1.0 + authority: https://login.microsoftonline.com + # If you don't know you tenantId, you can use Microsoft Graph Explorer + # to query it + tenantId: ${MICROSOFT_GRAPH_TENANT_ID} + # Client Id and Secret can be created under Certificates & secrets in + # the App registration in the Microsoft Azure Portal. + clientId: ${MICROSOFT_GRAPH_CLIENT_ID} + clientSecret: ${MICROSOFT_GRAPH_CLIENT_SECRET_TOKEN} + # Optional mode for querying which defaults to "basic". + # By default, the Microsoft Graph API only provides the basic feature set + # for querying. Certain features are limited to advanced querying capabilities. + # (See https://docs.microsoft.com/en-us/graph/aad-advanced-queries) + queryMode: basic # basic | advanced + # Optional configuration block + user: # Optional parameter to include the expanded resource or collection referenced # by a single relationship (navigation property) in your results. # Only one relationship can be expanded in a single request. # See https://docs.microsoft.com/en-us/graph/query-parameters#expand-parameter # Can be combined with userGroupMember[...] instead of userFilter. - userExpand: manager + expand: manager # Optional filter for user, see Microsoft Graph API for the syntax # See https://docs.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0#properties # and for the syntax https://docs.microsoft.com/en-us/graph/query-parameters#filter-parameter # This and userGroupMemberFilter are mutually exclusive, only one can be specified - userFilter: accountEnabled eq true and userType eq 'member' + filter: accountEnabled eq true and userType eq 'member' + # Optional configuration block + userGroupMember: # Optional filter for users, use group membership to get users. # (Filtered groups and fetch their members.) # This and userFilter are mutually exclusive, only one can be specified # See https://docs.microsoft.com/en-us/graph/search-query-parameter - userGroupMemberFilter: "displayName eq 'Backstage Users'" + filter: "displayName eq 'Backstage Users'" + # Optional search for users, use group membership to get users. + # (Search for groups and fetch their members.) + # This and userFilter are mutually exclusive, only one can be specified + search: '"description:One" AND ("displayName:Video" OR "displayName:Drive")' + # Optional configuration block + group: # Optional parameter to include the expanded resource or collection referenced # by a single relationship (navigation property) in your results. # Only one relationship can be expanded in a single request. # See https://docs.microsoft.com/en-us/graph/query-parameters#expand-parameter # Can be combined with userGroupMember[...] instead of userFilter. - groupExpand: member - # Optional search for users, use group membership to get users. - # (Search for groups and fetch their members.) - # This and userFilter are mutually exclusive, only one can be specified - userGroupMemberSearch: '"description:One" AND ("displayName:Video" OR "displayName:Drive")' + expand: member # Optional filter for group, see Microsoft Graph API for the syntax # See https://docs.microsoft.com/en-us/graph/api/resources/group?view=graph-rest-1.0#properties - groupFilter: securityEnabled eq false and mailEnabled eq true and groupTypes/any(c:c+eq+'Unified') + filter: securityEnabled eq false and mailEnabled eq true and groupTypes/any(c:c+eq+'Unified') # Optional search for groups, see Microsoft Graph API for the syntax # See https://docs.microsoft.com/en-us/graph/search-query-parameter - groupSearch: '"description:One" AND ("displayName:Video" OR "displayName:Drive")' - # Optional select for groups, this will allow you work with schemaExtensions in order to add extra information to your groups that can be used on you custom groupTransformers + search: '"description:One" AND ("displayName:Video" OR "displayName:Drive")' + # Optional select for groups, this will allow you work with schemaExtensions + # in order to add extra information to your groups that can be used on you custom groupTransformers # See https://docs.microsoft.com/en-us/graph/api/resources/schemaextension?view=graph-rest-1.0 - groupSelect: ['id', 'displayName', 'description'] + select: ['id', 'displayName', 'description'] ``` -`userFilter` and `userGroupMemberFilter` are mutually exclusive, only one can be provided. If both are provided, an error will be thrown. +`user.filter` and `userGroupMember.filter` are mutually exclusive, only one can be provided. If both are provided, an error will be thrown. -By default, all users are loaded. If you want to filter users based on their attributes, use `userFilter`. `userGroupMemberFilter` can be used if you want to load users based on their group membership. +By default, all users are loaded. If you want to filter users based on their attributes, use `user.filter`. `userGroupMember.filter` can be used if you want to load users based on their group membership. 3. The package is not installed by default, therefore you have to add a dependency to `@backstage/plugin-catalog-backend-module-msgraph` to your @@ -90,15 +91,12 @@ By default, all users are loaded. If you want to filter users based on their att yarn add --cwd packages/backend @backstage/plugin-catalog-backend-module-msgraph ``` -### Using the Entity Provider - 4. The `MicrosoftGraphOrgEntityProvider` is not registered by default, so you have to register it in the catalog plugin. Pass the target to reference a provider from the configuration. ```diff // packages/backend/src/plugins/catalog.ts -+import { Duration } from 'luxon'; +import { MicrosoftGraphOrgEntityProvider } from '@backstage/plugin-catalog-backend-module-msgraph'; export default async function createPlugin( @@ -106,53 +104,21 @@ yarn add --cwd packages/backend @backstage/plugin-catalog-backend-module-msgraph ): Promise { const builder = await CatalogBuilder.create(env); -+ // The target parameter below needs to match one of the providers' target -+ // value specified in your app-config (see above). + builder.addEntityProvider( + MicrosoftGraphOrgEntityProvider.fromConfig(env.config, { -+ id: 'production', -+ target: 'https://graph.microsoft.com/v1.0', + logger: env.logger, + schedule: env.scheduler.createScheduledTaskRunner({ -+ frequency: Duration.fromObject({ minutes: 5 }), -+ timeout: Duration.fromObject({ minutes: 3 }), ++ frequency: { minutes: 5 }, ++ timeout: { minutes: 3 }, + }), + }), + ); ``` -### Using the Processor - -4. The `MicrosoftGraphOrgReaderProcessor` is not registered by default, so you - have to register it in the catalog plugin: - -```typescript -// packages/backend/src/plugins/catalog.ts -builder.addProcessor( - MicrosoftGraphOrgReaderProcessor.fromConfig(env.config, { - logger: env.logger, - }), -); -``` - -5. Add a location that ingests from Microsoft Graph: - -```yaml -# app-config.yaml -catalog: - locations: - - type: microsoft-graph-org - target: https://graph.microsoft.com/v1.0 - rules: - - allow: [Group, User] - … -``` - ## Customize the Processor or Entity Provider -In case you want to customize the ingested entities, both the `MicrosoftGraphOrgReaderProcessor` -and the `MicrosoftGraphOrgEntityProvider` allows to pass transformers for users, -groups and the organization. +In case you want to customize the ingested entities, the `MicrosoftGraphOrgEntityProvider` +allows to pass transformers for users, groups and the organization. 1. Create a transformer: @@ -179,13 +145,17 @@ export async function myGroupTransformer( } ``` -2. Configure the processor with the transformer: +2. Add the transformer: -```ts -builder.addProcessor( - MicrosoftGraphOrgReaderProcessor.fromConfig(env.config, { - logger: env.logger, - groupTransformer: myGroupTransformer, - }), -); +```diff + builder.addEntityProvider( + MicrosoftGraphOrgEntityProvider.fromConfig(env.config, { + logger: env.logger, + schedule: env.scheduler.createScheduledTaskRunner({ + frequency: { minutes: 5 }, + timeout: { minutes: 3 }, + }), ++ groupTransformer: myGroupTransformer, + }), + ); ``` diff --git a/plugins/catalog-backend-module-msgraph/api-report.md b/plugins/catalog-backend-module-msgraph/api-report.md index 31a22b0bc4..a4083b1d9e 100644 --- a/plugins/catalog-backend-module-msgraph/api-report.md +++ b/plugins/catalog-backend-module-msgraph/api-report.md @@ -125,14 +125,14 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider { static fromConfig( configRoot: Config, options: MicrosoftGraphOrgEntityProviderOptions, - ): MicrosoftGraphOrgEntityProvider; + ): MicrosoftGraphOrgEntityProvider[]; // (undocumented) getProviderName(): string; read(options?: { logger?: Logger }): Promise; } -// @public -export interface MicrosoftGraphOrgEntityProviderOptions { +// @public @deprecated +export interface MicrosoftGraphOrgEntityProviderLegacyOptions { groupTransformer?: GroupTransformer; id: string; logger: Logger; @@ -143,6 +143,19 @@ export interface MicrosoftGraphOrgEntityProviderOptions { } // @public +export type MicrosoftGraphOrgEntityProviderOptions = + | MicrosoftGraphOrgEntityProviderLegacyOptions + | { + logger: Logger; + schedule: 'manual' | TaskRunner; + userTransformer?: UserTransformer | Record; + groupTransformer?: GroupTransformer | Record; + organizationTransformer?: + | OrganizationTransformer + | Record; + }; + +// @public @deprecated export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor { constructor(options: { providers: MicrosoftGraphProviderConfig[]; @@ -173,6 +186,7 @@ export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor { // @public export type MicrosoftGraphProviderConfig = { + id: string; target: string; authority?: string; tenantId: string; @@ -206,7 +220,7 @@ export type OrganizationTransformer = ( organization: MicrosoftGraph.Organization, ) => Promise; -// @public +// @public @deprecated export function readMicrosoftGraphConfig( config: Config, ): MicrosoftGraphProviderConfig[]; diff --git a/plugins/catalog-backend-module-msgraph/config.d.ts b/plugins/catalog-backend-module-msgraph/config.d.ts index cf00713e72..564ccbb10a 100644 --- a/plugins/catalog-backend-module-msgraph/config.d.ts +++ b/plugins/catalog-backend-module-msgraph/config.d.ts @@ -25,6 +25,7 @@ export interface Config { processors?: { /** * MicrosoftGraphOrgReaderProcessor configuration + * @deprecated Use `catalog.providers.microsoftGraphOrg` instead. */ microsoftGraphOrg?: { /** @@ -102,5 +103,173 @@ export interface Config { }>; }; }; + /** + * List of provider-specific options and attributes + */ + providers?: { + /** + * MicrosoftGraphOrgEntityProvider configuration. + */ + microsoftGraphOrg?: + | { + /** + * The prefix of the target that this matches on, e.g. + * "https://graph.microsoft.com/v1.0", with no trailing slash. + */ + target: string; + /** + * The auth authority used. + * + * Default value "https://login.microsoftonline.com" + */ + authority?: string; + /** + * The tenant whose org data we are interested in. + */ + tenantId: string; + /** + * The OAuth client ID to use for authenticating requests. + */ + clientId: string; + /** + * The OAuth client secret to use for authenticating requests. + * + * @visibility secret + */ + clientSecret: string; + + user?: { + /** + * The "expand" argument to apply to users. + * + * E.g. "manager". + */ + expand?: string; + /** + * The filter to apply to extract users. + * + * E.g. "accountEnabled eq true and userType eq 'member'" + */ + filter?: string; + }; + + group?: { + /** + * The "expand" argument to apply to groups. + * + * E.g. "member". + */ + expand?: string; + /** + * The filter to apply to extract groups. + * + * E.g. "securityEnabled eq false and mailEnabled eq true" + */ + filter?: string; + /** + * The search criteria to apply to extract users by groups memberships. + * + * E.g. "\"displayName:-team\"" would only match groups which contain '-team' + */ + search?: string; + /** + * The fields to be fetched on query. + * + * E.g. ["id", "displayName", "description"] + */ + select?: string[]; + }; + + userGroupMember?: { + /** + * The filter to apply to extract users by groups memberships. + * + * E.g. "displayName eq 'Backstage Users'" + */ + filter?: string; + /** + * The search criteria to apply to extract groups. + * + * E.g. "\"displayName:-team\"" would only match groups which contain '-team' + */ + search?: string; + }; + } + | Record< + string, + { + /** + * The prefix of the target that this matches on, e.g. + * "https://graph.microsoft.com/v1.0", with no trailing slash. + */ + target: string; + /** + * The auth authority used. + * + * Default value "https://login.microsoftonline.com" + */ + authority?: string; + /** + * The tenant whose org data we are interested in. + */ + tenantId: string; + /** + * The OAuth client ID to use for authenticating requests. + */ + clientId: string; + /** + * The OAuth client secret to use for authenticating requests. + * + * @visibility secret + */ + clientSecret: string; + + user?: { + /** + * The filter to apply to extract users. + * + * E.g. "accountEnabled eq true and userType eq 'member'" + */ + filter?: string; + }; + + group?: { + /** + * The filter to apply to extract groups. + * + * E.g. "securityEnabled eq false and mailEnabled eq true" + */ + filter?: string; + /** + * The search criteria to apply to extract users by groups memberships. + * + * E.g. "\"displayName:-team\"" would only match groups which contain '-team' + */ + search?: string; + /** + * The fields to be fetched on query. + * + * E.g. ["id", "displayName", "description"] + */ + select?: string[]; + }; + + userGroupMember?: { + /** + * The filter to apply to extract users by groups memberships. + * + * E.g. "displayName eq 'Backstage Users'" + */ + filter?: string; + /** + * The search criteria to apply to extract groups. + * + * E.g. "\"displayName:-team\"" would only match groups which contain '-team' + */ + search?: string; + }; + } + >; + }; }; } diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.test.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.test.ts index e310fa544f..8239090249 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.test.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.test.ts @@ -15,13 +15,14 @@ */ import { ConfigReader } from '@backstage/config'; -import { readMicrosoftGraphConfig } from './config'; +import { readMicrosoftGraphConfig, readProviderConfigs } from './config'; describe('readMicrosoftGraphConfig', () => { it('applies all of the defaults', () => { const config = { providers: [ { + id: 'target', target: 'target', tenantId: 'tenantId', clientId: 'clientId', @@ -32,6 +33,7 @@ describe('readMicrosoftGraphConfig', () => { const actual = readMicrosoftGraphConfig(new ConfigReader(config)); const expected = [ { + id: 'target', target: 'target', tenantId: 'tenantId', clientId: 'clientId', @@ -48,6 +50,7 @@ describe('readMicrosoftGraphConfig', () => { const config = { providers: [ { + id: 'target', target: 'target', tenantId: 'tenantId', clientId: 'clientId', @@ -64,6 +67,7 @@ describe('readMicrosoftGraphConfig', () => { const actual = readMicrosoftGraphConfig(new ConfigReader(config)); const expected = [ { + id: 'target', target: 'target', tenantId: 'tenantId', clientId: 'clientId', @@ -83,6 +87,7 @@ describe('readMicrosoftGraphConfig', () => { const config = { providers: [ { + id: 'target', target: 'target', tenantId: 'tenantId', clientId: 'clientId', @@ -100,6 +105,7 @@ describe('readMicrosoftGraphConfig', () => { const config = { providers: [ { + id: 'target', target: 'target', tenantId: 'tenantId', clientId: 'clientId', @@ -113,3 +119,128 @@ describe('readMicrosoftGraphConfig', () => { expect(() => readMicrosoftGraphConfig(new ConfigReader(config))).toThrow(); }); }); + +describe('readProviderConfigs', () => { + it('applies all of the defaults', () => { + const config = { + catalog: { + providers: { + microsoftGraphOrg: { + customProviderId: { + target: 'target', + tenantId: 'tenantId', + clientId: 'clientId', + clientSecret: 'clientSecret', + }, + }, + }, + }, + }; + const actual = readProviderConfigs(new ConfigReader(config)); + const expected = [ + { + id: 'customProviderId', + target: 'target', + tenantId: 'tenantId', + clientId: 'clientId', + clientSecret: 'clientSecret', + authority: 'https://login.microsoftonline.com', + }, + ]; + expect(actual).toEqual(expected); + }); + + it('reads all the values', () => { + const config = { + catalog: { + providers: { + microsoftGraphOrg: { + customProviderId: { + target: 'target', + tenantId: 'tenantId', + clientId: 'clientId', + clientSecret: 'clientSecret', + authority: 'https://login.example.com/', + user: { + expand: 'manager', + filter: 'accountEnabled eq true', + }, + group: { + expand: 'member', + filter: 'securityEnabled eq false', + select: ['id', 'displayName', 'description'], + }, + }, + }, + }, + }, + }; + const actual = readProviderConfigs(new ConfigReader(config)); + const expected = [ + { + id: 'customProviderId', + target: 'target', + tenantId: 'tenantId', + clientId: 'clientId', + clientSecret: 'clientSecret', + authority: 'https://login.example.com', + userExpand: 'manager', + userFilter: 'accountEnabled eq true', + groupExpand: 'member', + groupSelect: ['id', 'displayName', 'description'], + groupFilter: 'securityEnabled eq false', + }, + ]; + expect(actual).toEqual(expected); + }); + + it('should fail if both userFilter and userGroupMemberFilter are set', () => { + const config = { + catalog: { + providers: { + microsoftGraphOrg: { + customProviderId: { + target: 'target', + tenantId: 'tenantId', + clientId: 'clientId', + clientSecret: 'clientSecret', + authority: 'https://login.example.com/', + user: { + filter: 'accountEnabled eq true', + }, + userGroupMember: { + filter: 'any', + }, + }, + }, + }, + }, + }; + expect(() => readProviderConfigs(new ConfigReader(config))).toThrow(); + }); + + it('should fail if both userFilter and userGroupMemberSearch are set', () => { + const config = { + catalog: { + providers: { + microsoftGraphOrg: { + customProviderId: { + target: 'target', + tenantId: 'tenantId', + clientId: 'clientId', + clientSecret: 'clientSecret', + authority: 'https://login.example.com/', + user: { + filter: 'accountEnabled eq true', + }, + userGroupMember: { + search: 'any', + }, + }, + }, + }, + }, + }; + expect(() => readProviderConfigs(new ConfigReader(config))).toThrow(); + }); +}); diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts index aa2f2d6ee2..30e3a9a4d2 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts @@ -17,12 +17,21 @@ import { Config } from '@backstage/config'; import { trimEnd } from 'lodash'; +const DEFAULT_AUTHORITY = 'https://login.microsoftonline.com'; +const DEFAULT_PROVIDER_ID = 'default'; +const DEFAULT_TARGET = 'https://graph.microsoft.com/v1.0'; + /** * The configuration parameters for a single Microsoft Graph provider. * * @public */ export type MicrosoftGraphProviderConfig = { + /** + * Identifier of the provider which will be used i.e. at the location key for ingested entities. + */ + id: string; + /** * The prefix of the target that this matches on, e.g. * "https://graph.microsoft.com/v1.0", with no trailing slash. @@ -55,7 +64,7 @@ export type MicrosoftGraphProviderConfig = { /** * The "expand" argument to apply to users. * - * E.g. "manager" + * E.g. "manager". */ userExpand?: string; /** @@ -73,7 +82,7 @@ export type MicrosoftGraphProviderConfig = { /** * The "expand" argument to apply to groups. * - * E.g. "member" + * E.g. "member". */ groupExpand?: string; /** @@ -113,6 +122,7 @@ export type MicrosoftGraphProviderConfig = { * @param config - The root of the msgraph config hierarchy * * @public + * @deprecated Replaced by not exported `readProviderConfigs` and kept for backwards compatibility only. */ export function readMicrosoftGraphConfig( config: Config, @@ -125,7 +135,7 @@ export function readMicrosoftGraphConfig( const authority = providerConfig.getOptionalString('authority') ? trimEnd(providerConfig.getOptionalString('authority'), '/') - : 'https://login.microsoftonline.com'; + : DEFAULT_AUTHORITY; const tenantId = providerConfig.getString('tenantId'); const clientId = providerConfig.getString('clientId'); const clientSecret = providerConfig.getString('clientSecret'); @@ -164,6 +174,7 @@ export function readMicrosoftGraphConfig( } providers.push({ + id: target, target, authority, tenantId, @@ -183,3 +194,86 @@ export function readMicrosoftGraphConfig( return providers; } + +export function readProviderConfigs( + config: Config, +): MicrosoftGraphProviderConfig[] { + const providersConfig = config.getOptionalConfig( + 'catalog.providers.microsoftGraphOrg', + ); + if (!providersConfig) { + return []; + } + + if (providersConfig.has('clientId')) { + // simple/single config variant + return [readProviderConfig(DEFAULT_PROVIDER_ID, providersConfig)]; + } + + return providersConfig.keys().map(id => { + const providerConfig = providersConfig.getConfig(id); + + return readProviderConfig(id, providerConfig); + }); +} + +export function readProviderConfig( + id: string, + config: Config, +): MicrosoftGraphProviderConfig { + const target = trimEnd( + config.getOptionalString('target') ?? DEFAULT_TARGET, + '/', + ); + const authority = trimEnd( + config.getOptionalString('authority') ?? DEFAULT_AUTHORITY, + '/', + ); + + const clientId = config.getString('clientId'); + const clientSecret = config.getString('clientSecret'); + const tenantId = config.getString('tenantId'); + + const userExpand = config.getOptionalString('user.expand'); + const userFilter = config.getOptionalString('user.filter'); + + const groupExpand = config.getOptionalString('group.expand'); + const groupFilter = config.getOptionalString('group.filter'); + const groupSearch = config.getOptionalString('group.search'); + const groupSelect = config.getOptionalStringArray('group.select'); + + const userGroupMemberFilter = config.getOptionalString( + 'userGroupMember.filter', + ); + const userGroupMemberSearch = config.getOptionalString( + 'userGroupMember.search', + ); + + if (userFilter && userGroupMemberFilter) { + throw new Error( + `userFilter and userGroupMemberFilter are mutually exclusive, only one can be specified.`, + ); + } + if (userFilter && userGroupMemberSearch) { + throw new Error( + `userGroupMemberSearch cannot be specified when userFilter is defined.`, + ); + } + + return { + id, + target, + authority, + clientId, + clientSecret, + tenantId, + userExpand, + userFilter, + groupExpand, + groupFilter, + groupSearch, + groupSelect, + userGroupMemberFilter, + userGroupMemberSearch, + }; +} diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts index 456afda550..26b4f80765 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts @@ -14,6 +14,7 @@ * limitations under the License. */ import { getVoidLogger } from '@backstage/backend-common'; +import { ConfigReader } from '@backstage/config'; import { ANNOTATION_LOCATION, ANNOTATION_ORIGIN_LOCATION, @@ -78,19 +79,30 @@ describe('MicrosoftGraphOrgEntityProvider', () => { ], }); + const config = { + catalog: { + providers: { + microsoftGraphOrg: { + customProviderId: { + target: 'target', + tenantId: 'tenantId', + clientId: 'clientId', + clientSecret: 'clientSecret', + }, + }, + }, + }, + }; const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), }; - const provider = new MicrosoftGraphOrgEntityProvider({ - id: 'test', - logger: getVoidLogger(), - provider: { - target: 'https://example.com', - tenantId: 'tenant', - clientId: 'clientid', - clientSecret: 'clientsecret', + const provider = MicrosoftGraphOrgEntityProvider.fromConfig( + new ConfigReader(config), + { + logger: getVoidLogger(), + schedule: 'manual', }, - }); + )[0]; provider.connect(entityProviderConnection); @@ -104,8 +116,10 @@ describe('MicrosoftGraphOrgEntityProvider', () => { kind: 'User', metadata: { annotations: { - 'backstage.io/managed-by-location': 'msgraph:test/u1', - 'backstage.io/managed-by-origin-location': 'msgraph:test/u1', + 'backstage.io/managed-by-location': + 'msgraph:customProviderId/u1', + 'backstage.io/managed-by-origin-location': + 'msgraph:customProviderId/u1', }, name: 'u1', }, @@ -113,7 +127,7 @@ describe('MicrosoftGraphOrgEntityProvider', () => { memberOf: [], }, }, - locationKey: 'msgraph-org-provider:test', + locationKey: 'msgraph-org-provider:customProviderId', }, { entity: { @@ -121,8 +135,10 @@ describe('MicrosoftGraphOrgEntityProvider', () => { kind: 'Group', metadata: { annotations: { - 'backstage.io/managed-by-location': 'msgraph:test/g1', - 'backstage.io/managed-by-origin-location': 'msgraph:test/g1', + 'backstage.io/managed-by-location': + 'msgraph:customProviderId/g1', + 'backstage.io/managed-by-origin-location': + 'msgraph:customProviderId/g1', }, name: 'g1', }, @@ -131,7 +147,7 @@ describe('MicrosoftGraphOrgEntityProvider', () => { type: 'team', }, }, - locationKey: 'msgraph-org-provider:test', + locationKey: 'msgraph-org-provider:customProviderId', }, ], type: 'full', diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts index d96faf8e03..4a52ddc665 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.ts @@ -40,13 +40,64 @@ import { readMicrosoftGraphOrg, UserTransformer, } from '../microsoftGraph'; +import { readProviderConfigs } from '../microsoftGraph/config'; /** * Options for {@link MicrosoftGraphOrgEntityProvider}. * * @public */ -export interface MicrosoftGraphOrgEntityProviderOptions { +export type MicrosoftGraphOrgEntityProviderOptions = + | MicrosoftGraphOrgEntityProviderLegacyOptions + | { + /** + * The logger to use. + */ + logger: Logger; + + /** + * The refresh schedule to use. + * + * @remarks + * + * If you pass in 'manual', you are responsible for calling the `read` method + * manually at some interval. + * + * But more commonly you will pass in the result of + * {@link @backstage/backend-tasks#PluginTaskScheduler.createScheduledTaskRunner} + * to enable automatic scheduling of tasks. + */ + schedule: 'manual' | TaskRunner; + + /** + * The function that transforms a user entry in msgraph to an entity. + * Optionally, you can pass separate transformers per provider ID. + */ + userTransformer?: UserTransformer | Record; + + /** + * The function that transforms a group entry in msgraph to an entity. + * Optionally, you can pass separate transformers per provider ID. + */ + groupTransformer?: GroupTransformer | Record; + + /** + * The function that transforms an organization entry in msgraph to an entity. + * Optionally, you can pass separate transformers per provider ID. + */ + organizationTransformer?: + | OrganizationTransformer + | Record; + }; + +/** + * Legacy options for {@link MicrosoftGraphOrgEntityProvider} + * based on `catalog.processors.microsoftGraphOrg`. + * + * @public + * @deprecated This interface exists for backwards compatibility only and will be removed in the future. + */ +export interface MicrosoftGraphOrgEntityProviderLegacyOptions { /** * A unique, stable identifier for this provider. * @@ -57,7 +108,7 @@ export interface MicrosoftGraphOrgEntityProviderOptions { /** * The target that this provider should consume. * - * Should exactly match the "target" field of one of the providers + * Should exactly match the "target" field of one of the provider * configuration entries. */ target: string; @@ -110,7 +161,58 @@ export class MicrosoftGraphOrgEntityProvider implements EntityProvider { static fromConfig( configRoot: Config, options: MicrosoftGraphOrgEntityProviderOptions, - ) { + ): MicrosoftGraphOrgEntityProvider[] { + if ('id' in options) { + return [ + MicrosoftGraphOrgEntityProvider.fromLegacyConfig(configRoot, options), + ]; + } + + function getTransformer( + id: string, + transformers?: T | Record, + ): T | undefined { + if (['undefined', 'function'].includes(typeof transformers)) { + return transformers as T; + } + + return (transformers as Record)[id]; + } + + return readProviderConfigs(configRoot).map(providerConfig => { + const provider = new MicrosoftGraphOrgEntityProvider({ + id: providerConfig.id, + provider: providerConfig, + logger: options.logger, + userTransformer: getTransformer( + providerConfig.id, + options.userTransformer, + ), + groupTransformer: getTransformer( + providerConfig.id, + options.groupTransformer, + ), + organizationTransformer: getTransformer( + providerConfig.id, + options.organizationTransformer, + ), + }); + provider.schedule(options.schedule); + + return provider; + }); + } + + /** + * @deprecated Exists for backwards compatibility only and will be removed in the future. + */ + private static fromLegacyConfig( + configRoot: Config, + options: MicrosoftGraphOrgEntityProviderLegacyOptions, + ): MicrosoftGraphOrgEntityProvider { + options.logger.warn( + 'Deprecated msgraph config "catalog.processors.microsoftGraphOrg" used. Use "catalog.providers.microsoftGraphOrg" instead. More info at https://github.com/backstage/backstage/blob/master/.changeset/long-bananas-rescue.md', + ); const config = configRoot.getOptionalConfig( 'catalog.processors.microsoftGraphOrg', ); diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.test.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.test.ts index 8236dc52e1..bcf76e9482 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.test.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.test.ts @@ -38,6 +38,7 @@ describe('MicrosoftGraphOrgReaderProcessor', () => { processor = new MicrosoftGraphOrgReaderProcessor({ providers: [ { + id: 'https://example.com', target: 'https://example.com', tenantId: 'tenant', clientId: 'clientid', diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts index 5d0e6b2ec7..decd84ec1f 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts @@ -33,9 +33,10 @@ import { } from '../microsoftGraph'; /** - * Extracts teams and users out of a the Microsoft Graph API. + * Extracts teams and users out of the Microsoft Graph API. * * @public + * @deprecated Use the MicrosoftGraphOrgEntityProvider instead. */ export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor { private readonly providers: MicrosoftGraphProviderConfig[]; @@ -67,6 +68,9 @@ export class MicrosoftGraphOrgReaderProcessor implements CatalogProcessor { groupTransformer?: GroupTransformer; organizationTransformer?: OrganizationTransformer; }) { + options.logger.warn( + 'MicrosoftGraphOrgReaderProcessor is deprecated. Please use MicrosoftGraphOrgEntityProvider instead. More info at https://github.com/backstage/backstage/blob/master/.changeset/long-bananas-rescue.md', + ); this.providers = options.providers; this.logger = options.logger; this.userTransformer = options.userTransformer; diff --git a/plugins/catalog-backend-module-msgraph/src/processors/index.ts b/plugins/catalog-backend-module-msgraph/src/processors/index.ts index 7bc3559c8b..7e74ca1d8b 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/index.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/index.ts @@ -15,5 +15,8 @@ */ export { MicrosoftGraphOrgEntityProvider } from './MicrosoftGraphOrgEntityProvider'; -export type { MicrosoftGraphOrgEntityProviderOptions } from './MicrosoftGraphOrgEntityProvider'; +export type { + MicrosoftGraphOrgEntityProviderOptions, + MicrosoftGraphOrgEntityProviderLegacyOptions, +} from './MicrosoftGraphOrgEntityProvider'; export { MicrosoftGraphOrgReaderProcessor } from './MicrosoftGraphOrgReaderProcessor'; From 3a04ea9f97f8c52cab0e1ce0b7dafacbc8433313 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Tue, 5 Jul 2022 13:33:17 +0530 Subject: [PATCH 176/231] update /live page with latest community session Signed-off-by: Himanshu Mishra --- 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 062af419fc..f2ebd4bb1d 100644 --- a/microsite/pages/en/live.js +++ b/microsite/pages/en/live.js @@ -34,7 +34,7 @@ const Background = props => { From 2bf266e15a206305b8cbe6b60b911bc8e2a6eb3e Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Tue, 5 Jul 2022 10:20:02 +0200 Subject: [PATCH 177/231] workflow: delete old review workflows Signed-off-by: Johan Haals --- .../automate_review-labels-scheduled.yaml | 31 --- .github/workflows/automate_review-labels.yaml | 84 -------- scripts/goalie-labels.js | 184 ------------------ 3 files changed, 299 deletions(-) delete mode 100644 .github/workflows/automate_review-labels-scheduled.yaml delete mode 100644 .github/workflows/automate_review-labels.yaml delete mode 100644 scripts/goalie-labels.js diff --git a/.github/workflows/automate_review-labels-scheduled.yaml b/.github/workflows/automate_review-labels-scheduled.yaml deleted file mode 100644 index 3ba13cfd17..0000000000 --- a/.github/workflows/automate_review-labels-scheduled.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# on a review from someone in the reviewers group, remove the awaiting-review label and add the awaiting-author label -name: Automate review labels - scheduled -on: - schedule: - - cron: '* * * * *' - -jobs: - label: - runs-on: ubuntu-latest - steps: - - name: Get Token - id: get_workflow_token - uses: peter-murray/workflow-application-token-action@v1 - with: - application_id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} - application_private_key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} - organization: backstage - - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version: 14 - - run: npm install codeowners - - - uses: actions/github-script@v6 - id: fix-labels - with: - github-token: ${{ steps.get_workflow_token.outputs.token }} - script: | - const script = require('./scripts/goalie-labels.js') - await script({github, context, core}) diff --git a/.github/workflows/automate_review-labels.yaml b/.github/workflows/automate_review-labels.yaml deleted file mode 100644 index cae71f6aaa..0000000000 --- a/.github/workflows/automate_review-labels.yaml +++ /dev/null @@ -1,84 +0,0 @@ -# When the target of the PR changes, open, re-open or sync, then re-add the label. - -name: Automate review labels -on: - pull_request_target: - types: - - opened - - closed - - synchronize - -permissions: - issues: write - pull-requests: write - -jobs: - label: - runs-on: ubuntu-latest - steps: - # THESE SCRIPTS SHOULD BE INLINED AND NOT IN REPO - # DUE TO THE TOKEN PERMISSIONS THAT ARE GIVEN - # TO THE WORKFLOW. THIS SCRIPT WILL AND SHOULD - # RUN FROM THE BASE REPO ALL TIMES. - - uses: actions/github-script@v6 - id: fix-labels - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - if (['opened', 'synchronize'].includes('${{ github.event.action }}')) { - // if it's the author, always add awaiting-review label - const isAuthor = context.payload.pull_request.user.login === context.actor - if (isAuthor) { - await github.rest.issues.addLabels({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - labels: ['awaiting-review'] - }); - } - } - - if ('${{ github.event.action}}' === 'closed') { - await github.rest.issues.removeLabel({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - labels: 'awaiting-review' - }).catch((e) => { - console.log(e) - }); - } - - - name: Add PRs to review board - uses: actions/github-script@v6 - if: github.event.action == 'opened' || github.event.action == 'reopened' - env: - PROJECT_ID: PN_kwDOBFKqdc02LQ - with: - github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }} - script: | - const prLookup = await github.graphql(` - query($owner: String!, $repo: String!, $number: Int!){ - repository(owner: $owner, name: $repo) { - pullRequest(number: $number) { - id - } - } - } - `, context.issue); - - await github.graphql(` - mutation($projectId: ID!, $contentId: ID!) { - addProjectNextItem(input: { - projectId: $projectId, - contentId: $contentId, - }) { - projectNextItem { - id - } - } - } - `, { - projectId: process.env.PROJECT_ID, - contentId: prLookup.repository.pullRequest.id - }) diff --git a/scripts/goalie-labels.js b/scripts/goalie-labels.js deleted file mode 100644 index e0a5b966d0..0000000000 --- a/scripts/goalie-labels.js +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const Codeowners = require('codeowners'); - -const getRepoEvents = async ({ github, context, pull_number }) => { - const commits = await github.paginate(github.rest.pulls.listCommits, { - owner: context.repo.owner, - repo: context.repo.repo, - pull_number, - }); - - const reviews = await github.paginate(github.rest.pulls.listReviews, { - owner: context.repo.owner, - repo: context.repo.repo, - pull_number, - }); - - const pullComments = await github.paginate( - 'GET /repos/{owner}/{repo}/pulls/{pull_number}/comments', - { - owner: context.repo.owner, - repo: context.repo.repo, - pull_number, - }, - ); - - const comments = await github.paginate(github.rest.issues.listComments, { - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: pull_number, - }); - - const events = [ - ...reviews.map(({ user, submitted_at }) => ({ - user, - updated_at: submitted_at, - type: 'review', - })), - ...commits.map(({ commit, author, committer }) => ({ - user: author || committer, - updated_at: commit.author.date || commit.committer.date, - type: 'commit', - })), - ...pullComments.map(({ user, updated_at }) => ({ - user, - updated_at, - type: 'pr_comment', - })), - ...comments.map(({ user, updated_at }) => ({ - user, - updated_at, - type: 'pr_comment', - })), - ]; - - return events - .sort((a, b) => new Date(a.updated_at) - new Date(b.updated_at)) - .filter(({ user }) => (user ? !user.login.includes('[bot]') : false)); -}; - -module.exports = async ({ github, context, core }) => { - // first get all open pull requests - const allPullRequests = await github.paginate(github.rest.pulls.list, { - owner: context.repo.owner, - repo: context.repo.repo, - state: 'open', - }); - - const { data: teams } = await github.request('GET /orgs/{org}/teams', { - org: context.repo.owner, - }); - - const groupMembers = await Promise.all( - teams.map(async team => { - const { data } = await github.rest.teams.listMembersInOrg({ - org: context.repo.owner, - team_slug: team.slug, - }); - - return { team: `@backstage/${team.slug}`, data }; - }), - ); - - const codeowners = new Codeowners(); - - for (const pullRequest of allPullRequests) { - // Go through each file changed and get the codeowners for that file. - // Find the group in the group list that matches the codeowner. - // If it does match push the owner to a list of reviewers - // check to see the reviews and if there is at least one matching reviewer from those group - - const changedFiles = await github.paginate(github.rest.pulls.listFiles, { - owner: context.repo.owner, - repo: context.repo.repo, - pull_number: pullRequest.number, - }); - - const allReviews = await github.paginate(github.rest.pulls.listReviews, { - owner: context.repo.owner, - repo: context.repo.repo, - pull_number: pullRequest.number, - }); - - const expectedReviewers = new Set(); - - for (const file of changedFiles) { - expectedReviewers.add(...codeowners.getOwner(file.filename)); - } - - const hasReviewed = new Set(); - - // For each reviewer in the group, check to see if they have a review set - for (const reviewer of expectedReviewers) { - const members = groupMembers.find(member => member.team === reviewer); - if (members) { - // then we are dealing with a group - const hasMemberReview = allReviews.some(review => - members.data.some(member => member.login === review.user.login), - ); - if (hasMemberReview) { - hasReviewed.add(reviewer); - } - } else { - // reviewer is a person - const hasReview = allReviews.some( - review => reviewer === `@${review.user.login}`, - ); - if (hasReview) { - hasReviewed.add(reviewer); - } - } - } - - // if all required reviewers have reviewed - if (hasReviewed.size === expectedReviewers.size) { - const repoEvents = await getRepoEvents({ - github, - context, - pull_number: pullRequest.number, - }); - // if the last event for the issue is not by the author, remove the label - if ( - repoEvents[repoEvents.length - 1].user.login !== pullRequest.user.login - ) { - await github.rest.issues - .removeLabel({ - issue_number: pullRequest.number, - owner: context.repo.owner, - repo: context.repo.repo, - name: 'awaiting-review', - }) - .catch(e => { - console.error(e); - }); - } - // add the awaiting-review label to tell us that the PR is waiting on reviews - } else { - await github.rest.issues - .addLabels({ - issue_number: pullRequest.number, - owner: context.repo.owner, - repo: context.repo.repo, - labels: ['awaiting-review'], - }) - .catch(e => { - console.error(e); - }); - } - } -}; From 6b985dc1c71598add89aeb587e5d76c844c542a4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 5 Jul 2022 08:23:38 +0000 Subject: [PATCH 178/231] Version Packages (next) --- .changeset/pre.json | 36 +- docs/releases/v1.4.0-next.2-changelog.md | 1308 +++++++++++++++++ package.json | 2 +- packages/app-defaults/CHANGELOG.md | 8 + packages/app-defaults/package.json | 8 +- packages/app/CHANGELOG.md | 55 + packages/app/package.json | 100 +- packages/backend-common/CHANGELOG.md | 17 + packages/backend-common/package.json | 8 +- packages/backend-tasks/CHANGELOG.md | 8 + packages/backend-tasks/package.json | 8 +- packages/backend-test-utils/CHANGELOG.md | 9 + packages/backend-test-utils/package.json | 8 +- packages/backend/CHANGELOG.md | 23 + packages/backend/package.json | 36 +- packages/catalog-model/CHANGELOG.md | 6 + packages/catalog-model/package.json | 4 +- packages/cli/CHANGELOG.md | 6 + packages/cli/package.json | 10 +- packages/core-components/CHANGELOG.md | 14 + packages/core-components/package.json | 6 +- packages/create-app/CHANGELOG.md | 7 + packages/create-app/package.json | 2 +- packages/dev-utils/CHANGELOG.md | 12 + packages/dev-utils/package.json | 16 +- packages/integration-react/CHANGELOG.md | 9 + packages/integration-react/package.json | 12 +- packages/integration/CHANGELOG.md | 13 + packages/integration/package.json | 4 +- .../techdocs-cli-embedded-app/CHANGELOG.md | 15 + .../techdocs-cli-embedded-app/package.json | 22 +- packages/theme/CHANGELOG.md | 8 + packages/theme/package.json | 4 +- plugins/adr/CHANGELOG.md | 20 + plugins/adr/package.json | 16 +- plugins/airbrake/CHANGELOG.md | 11 + plugins/airbrake/package.json | 18 +- plugins/allure/CHANGELOG.md | 10 + plugins/allure/package.json | 14 +- plugins/analytics-module-ga/CHANGELOG.md | 8 + plugins/analytics-module-ga/package.json | 10 +- plugins/apache-airflow/CHANGELOG.md | 7 + plugins/apache-airflow/package.json | 8 +- plugins/api-docs/CHANGELOG.md | 12 + plugins/api-docs/package.json | 16 +- plugins/app-backend/CHANGELOG.md | 8 + plugins/app-backend/package.json | 8 +- plugins/auth-backend/CHANGELOG.md | 10 + plugins/auth-backend/package.json | 10 +- plugins/azure-devops/CHANGELOG.md | 10 + plugins/azure-devops/package.json | 14 +- plugins/badges-backend/CHANGELOG.md | 9 + plugins/badges-backend/package.json | 8 +- plugins/badges/CHANGELOG.md | 10 + plugins/badges/package.json | 14 +- plugins/bazaar-backend/CHANGELOG.md | 9 + plugins/bazaar-backend/package.json | 8 +- plugins/bazaar/CHANGELOG.md | 11 + plugins/bazaar/package.json | 16 +- plugins/bitrise/CHANGELOG.md | 10 + plugins/bitrise/package.json | 14 +- .../CHANGELOG.md | 99 ++ .../package.json | 14 +- .../CHANGELOG.md | 11 + .../package.json | 14 +- plugins/catalog-backend/CHANGELOG.md | 19 + plugins/catalog-backend/package.json | 12 +- plugins/catalog-graph/CHANGELOG.md | 10 + plugins/catalog-graph/package.json | 16 +- plugins/catalog-import/CHANGELOG.md | 20 + plugins/catalog-import/package.json | 16 +- plugins/catalog-react/CHANGELOG.md | 49 + plugins/catalog-react/package.json | 12 +- plugins/catalog/CHANGELOG.md | 60 + plugins/catalog/package.json | 18 +- plugins/circleci/CHANGELOG.md | 10 + plugins/circleci/package.json | 14 +- plugins/cloudbuild/CHANGELOG.md | 10 + plugins/cloudbuild/package.json | 14 +- plugins/code-climate/CHANGELOG.md | 10 + plugins/code-climate/package.json | 14 +- plugins/code-coverage-backend/CHANGELOG.md | 10 + plugins/code-coverage-backend/package.json | 10 +- plugins/code-coverage/CHANGELOG.md | 10 + plugins/code-coverage/package.json | 14 +- plugins/codescene/CHANGELOG.md | 9 + plugins/codescene/package.json | 10 +- plugins/config-schema/CHANGELOG.md | 8 + plugins/config-schema/package.json | 10 +- plugins/cost-insights-common/CHANGELOG.md | 6 + plugins/cost-insights-common/package.json | 4 +- plugins/cost-insights/CHANGELOG.md | 13 + plugins/cost-insights/package.json | 14 +- plugins/dynatrace/CHANGELOG.md | 9 + plugins/dynatrace/package.json | 12 +- plugins/example-todo-list/CHANGELOG.md | 8 + plugins/example-todo-list/package.json | 10 +- plugins/explore/CHANGELOG.md | 10 + plugins/explore/package.json | 14 +- plugins/firehydrant/CHANGELOG.md | 9 + plugins/firehydrant/package.json | 12 +- plugins/fossa/CHANGELOG.md | 10 + plugins/fossa/package.json | 14 +- plugins/gcalendar/CHANGELOG.md | 8 + plugins/gcalendar/package.json | 10 +- plugins/gcp-projects/CHANGELOG.md | 8 + plugins/gcp-projects/package.json | 10 +- plugins/git-release-manager/CHANGELOG.md | 9 + plugins/git-release-manager/package.json | 12 +- plugins/github-actions/CHANGELOG.md | 11 + plugins/github-actions/package.json | 16 +- plugins/github-deployments/CHANGELOG.md | 12 + plugins/github-deployments/package.json | 18 +- .../github-pull-requests-board/CHANGELOG.md | 11 + .../github-pull-requests-board/package.json | 16 +- plugins/gitops-profiles/CHANGELOG.md | 8 + plugins/gitops-profiles/package.json | 10 +- plugins/gocd/CHANGELOG.md | 10 + plugins/gocd/package.json | 14 +- plugins/graphiql/CHANGELOG.md | 8 + plugins/graphiql/package.json | 10 +- plugins/home/CHANGELOG.md | 11 + plugins/home/package.json | 16 +- plugins/ilert/CHANGELOG.md | 10 + plugins/ilert/package.json | 14 +- plugins/jenkins-backend/CHANGELOG.md | 9 + plugins/jenkins-backend/package.json | 8 +- plugins/jenkins/CHANGELOG.md | 11 + plugins/jenkins/package.json | 14 +- plugins/kafka-backend/CHANGELOG.md | 9 + plugins/kafka-backend/package.json | 8 +- plugins/kafka/CHANGELOG.md | 10 + plugins/kafka/package.json | 14 +- plugins/kubernetes-backend/CHANGELOG.md | 10 + plugins/kubernetes-backend/package.json | 10 +- plugins/kubernetes-common/CHANGELOG.md | 8 + plugins/kubernetes-common/package.json | 6 +- plugins/kubernetes/CHANGELOG.md | 11 + plugins/kubernetes/package.json | 16 +- plugins/lighthouse/CHANGELOG.md | 10 + plugins/lighthouse/package.json | 14 +- plugins/newrelic-dashboard/CHANGELOG.md | 9 + plugins/newrelic-dashboard/package.json | 12 +- plugins/newrelic/CHANGELOG.md | 8 + plugins/newrelic/package.json | 10 +- plugins/org/CHANGELOG.md | 10 + plugins/org/package.json | 14 +- plugins/pagerduty/CHANGELOG.md | 10 + plugins/pagerduty/package.json | 14 +- plugins/periskop/CHANGELOG.md | 10 + plugins/periskop/package.json | 14 +- plugins/rollbar/CHANGELOG.md | 10 + plugins/rollbar/package.json | 14 +- plugins/scaffolder-backend/CHANGELOG.md | 25 + plugins/scaffolder-backend/package.json | 14 +- plugins/scaffolder/CHANGELOG.md | 26 + plugins/scaffolder/package.json | 20 +- plugins/search-backend-module-pg/CHANGELOG.md | 12 + plugins/search-backend-module-pg/package.json | 8 +- plugins/search-react/CHANGELOG.md | 9 + plugins/search-react/package.json | 6 +- plugins/search/CHANGELOG.md | 11 + plugins/search/package.json | 16 +- plugins/sentry/CHANGELOG.md | 10 + plugins/sentry/package.json | 14 +- plugins/shortcuts/CHANGELOG.md | 8 + plugins/shortcuts/package.json | 10 +- plugins/sonarqube/CHANGELOG.md | 11 + plugins/sonarqube/package.json | 14 +- plugins/splunk-on-call/CHANGELOG.md | 10 + plugins/splunk-on-call/package.json | 14 +- plugins/stack-overflow/CHANGELOG.md | 9 + plugins/stack-overflow/package.json | 12 +- plugins/tech-insights-backend/CHANGELOG.md | 14 + plugins/tech-insights-backend/package.json | 12 +- plugins/tech-insights/CHANGELOG.md | 10 + plugins/tech-insights/package.json | 14 +- plugins/tech-radar/CHANGELOG.md | 8 + plugins/tech-radar/package.json | 10 +- .../techdocs-addons-test-utils/CHANGELOG.md | 13 + .../techdocs-addons-test-utils/package.json | 20 +- plugins/techdocs-backend/CHANGELOG.md | 11 + plugins/techdocs-backend/package.json | 14 +- .../CHANGELOG.md | 20 + .../package.json | 18 +- plugins/techdocs-node/CHANGELOG.md | 18 + plugins/techdocs-node/package.json | 10 +- plugins/techdocs-react/CHANGELOG.md | 8 + plugins/techdocs-react/package.json | 8 +- plugins/techdocs/CHANGELOG.md | 24 + plugins/techdocs/package.json | 22 +- plugins/todo/CHANGELOG.md | 10 + plugins/todo/package.json | 14 +- plugins/user-settings/CHANGELOG.md | 8 + plugins/user-settings/package.json | 10 +- plugins/vault-backend/CHANGELOG.md | 10 + plugins/vault-backend/package.json | 10 +- plugins/vault/CHANGELOG.md | 11 + plugins/vault/package.json | 14 +- plugins/xcmetrics/CHANGELOG.md | 8 + plugins/xcmetrics/package.json | 10 +- 201 files changed, 3302 insertions(+), 662 deletions(-) create mode 100644 docs/releases/v1.4.0-next.2-changelog.md diff --git a/.changeset/pre.json b/.changeset/pre.json index 2bba491efc..7b30cba7ba 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -158,50 +158,76 @@ "@backstage/plugin-vault-backend": "0.1.0", "@backstage/plugin-xcmetrics": "0.2.26", "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.0.0", - "@backstage/plugin-catalog-backend-module-openapi": "0.0.0" + "@backstage/plugin-catalog-backend-module-openapi": "0.0.0", + "@backstage/plugin-cost-insights-common": "0.0.0" }, "changesets": [ + "afraid-flies-try", "beige-horses-scream", + "blue-monkeys-explain", "breezy-poems-grab", "breezy-seas-exist", "bright-balloons-hide", "calm-experts-buy", "chilled-mirrors-grab", + "cool-toys-flow", "create-app-1656408352", "curly-candles-battle", "curvy-weeks-matter", + "eight-suits-fail", + "eighty-windows-brush", "eleven-mice-collect", + "five-fireants-run", "forty-seals-complain", "great-roses-pump", "green-actors-argue", "happy-boxes-melt", + "hot-rice-sin", "large-kangaroos-poke", "lemon-goats-obey", + "light-hornets-eat", + "long-bananas-rescue", + "many-vans-thank", "metal-singers-matter", + "metal-windows-share", "modern-ducks-lay", + "moody-crabs-march", "nasty-zoos-cross", "nervous-humans-sip", + "old-onions-hear", "plenty-clouds-guess", "polite-eagles-invite", + "polite-lions-sell", "popular-pots-yell", "pretty-masks-live", + "proud-toys-return", "purple-beans-march", "quiet-pens-notice", "red-games-decide", + "renovate-149779d", + "renovate-2ae4dda", "renovate-4b5ff24", + "renovate-7438bff", + "renovate-833a91b", "renovate-9454dab", "rude-llamas-lie", + "search-boats-double", "search-lightning-cult", "search-turtles-itch", + "serious-houses-watch", "serious-zebras-joke", "shaggy-melons-drive", "sharp-numbers-taste", "sharp-planes-turn", + "shiny-seahorses-do", "shiny-turkeys-doubt", + "short-deers-remember", "short-olives-train", "shy-cameras-develop", "silent-coats-brake", + "silly-geese-design", "silver-needles-unite", + "smart-elephants-knock", "smooth-sheep-hide", "strange-tables-flash", "strange-trains-collect", @@ -211,14 +237,20 @@ "techdocs-eyes-sit", "techdocs-gorgeous-plants-sniff", "techdocs-sheep-talk", + "techdocs-sixty-mugs-hug", "techdocs-the-whole-pulse", + "thick-cats-kiss", "thick-radios-drive", + "thirty-rivers-watch", + "tricky-ravens-visit", "twelve-candles-jump", "two-crews-accept", "unlucky-stingrays-juggle", "weak-bananas-deliver", + "weak-jeans-cry", "weak-llamas-repeat", "wet-dolphins-act", - "wicked-icons-grin" + "wicked-icons-grin", + "wicked-ladybugs-argue" ] } diff --git a/docs/releases/v1.4.0-next.2-changelog.md b/docs/releases/v1.4.0-next.2-changelog.md new file mode 100644 index 0000000000..fe00c648dd --- /dev/null +++ b/docs/releases/v1.4.0-next.2-changelog.md @@ -0,0 +1,1308 @@ +# Release v1.4.0-next.2 + +## @backstage/catalog-model@1.1.0-next.2 + +### Minor Changes + +- 4cc81372f8: Introduced `GroupDefaultParentEntityPolicy` to set a default group entity parent. + +## @backstage/core-components@0.10.0-next.2 + +### Minor Changes + +- 32204fa794: Add `transformLinkUri` and `transformImageUri` to `MarkdownContent` + +### Patch Changes + +- b4b711bcc2: Fix the EntityLayout header style so that EntityContextMenu button can display in correct shape when user hover on it +- 15201b1032: Updated dependency `rc-progress` to `3.4.0`. +- 385389d23c: Updated to remove usage of the `bursts` object in the theme palette +- Updated dependencies + - @backstage/theme@0.2.16-next.1 + +## @backstage/plugin-catalog@1.4.0-next.2 + +### Minor Changes + +- a274fe38b9: Add hidden title column to catalog and API table to enable filtering by title. + +### Patch Changes + +- 258057a4b9: Adding ability to customize the "unregister entity" menu item in the entity context menu on the entity page with options 'visible','hidden','disabled'.With this three new options, one can hide the "unregister entity" menu item from the list, disable or keep it enabled. + + The boolean input for "unregister entity" will be deprecated later in favour of the above three options. + +- 385389d23c: Updated to remove usage of the `bursts` object in the theme palette + +- be26d95141: Added new `EntityProcessingStatusPicker` that will filter for entities with orphans and/or errors. + + If you are using the default Catalog page this picker will be added automatically. For those who have customized their Catalog page you'll need to add this manually by doing something like this: + + ```diff + ... + import { + CatalogFilterLayout, + EntityTypePicker, + UserListPicker, + EntityTagPicker + + EntityProcessingStatusPicker, + } from '@backstage/plugin-catalog-react'; + ... + export const CustomCatalogPage = ({ + columns, + actions, + initiallySelectedFilter = 'owned', + }: CatalogPageProps) => { + return ( + ... + + + + + + + + + + + + + + + + ... + }; + ``` + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/plugin-search-react@0.2.2-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/integration-react@1.1.2-next.2 + +## @backstage/plugin-catalog-backend-module-msgraph@0.4.0-next.1 + +### Minor Changes + +- a145672f0f: Align `msgraph` plugin's entity provider config with other providers. **Deprecated** entity processor as well as previous config. + + You will see warning at the log output until you migrate to the new setup. + All deprecated parts will be removed eventually after giving some time to migrate. + + Please find information on how to migrate your current setup to the new one below. + + **Migration Guide:** + + There were two different way on how to use the msgraph plugin: processor or provider. + + Previous registration for the processor: + + ```typescript + // packages/backend/src/plugins/catalog.ts + builder.addProcessor( + MicrosoftGraphOrgReaderProcessor.fromConfig(env.config, { + logger: env.logger, + // [...] + }), + ); + ``` + + Previous registration when using the provider: + + ```typescript + // packages/backend/src/plugins/catalog.ts + builder.addEntityProvider( + MicrosoftGraphOrgEntityProvider.fromConfig(env.config, { + id: 'https://graph.microsoft.com/v1.0', + target: 'https://graph.microsoft.com/v1.0', + logger: env.logger, + schedule: env.scheduler.createScheduledTaskRunner({ + frequency: { minutes: 30 }, + timeout: { minutes: 3 }, + }), + // [...] + }), + ); + ``` + + Previous configuration as used for both: + + ```yaml + # app-config.yaml + catalog: + processors: + microsoftGraphOrg: + providers: + - target: https://graph.microsoft.com/v1.0 + # [...] + ``` + + **Replacement:** + + Please check for the complete documentation of all configuration options (config as well as registration of the provider). + + ```yaml + # app-config.yaml + catalog: + providers: + microsoftGraphOrg: + # In case you used the deprecated configuration with the entity provider + # using the value of `target` will keep the same location key for all + providerId: # some stable ID which will be used as part of the location key for all ingested data + target: https://graph.microsoft.com/v1.0 + # [...] + ``` + + ```typescript + // packages/backend/src/plugins/catalog.ts + builder.addEntityProvider( + MicrosoftGraphOrgEntityProvider.fromConfig(env.config, { + logger: env.logger, + schedule: env.scheduler.createScheduledTaskRunner({ + frequency: { minutes: 30 }, + timeout: { minutes: 3 }, + }), + // [...] + }), + ); + ``` + + In case you've used multiple entity providers before + **and** you had different transformers for each of them + you can provide these directly at the one `fromConfig` call + by passing a Record with the provider ID as key. + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-tasks@0.3.3-next.2 + - @backstage/plugin-catalog-backend@1.2.1-next.2 + +## @backstage/plugin-cost-insights-common@0.1.0-next.0 + +### Minor Changes + +- 81dd5ea989: Introduces a new isomorphic @backstage/plugin-cost-insight-common package to contain shared types across all other cost insights packages and modules. + +## @backstage/plugin-scaffolder@1.4.0-next.2 + +### Minor Changes + +- d8eb82f447: Add `allowedRepos` `ui:option` to `RepoUrlPicker` component, and move `repoName` field to own component + +### Patch Changes + +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +- 14146703e5: Add `allowArbitraryValues` to `ui:options` in `OwnedEntityPicker`, similar to `allowArbitraryValues` in `EntityPicker` + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/integration@1.2.2-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/integration-react@1.1.2-next.2 + +## @backstage/plugin-scaffolder-backend@1.4.0-next.2 + +### Minor Changes + +- 4baf8a4ece: Update GitLab Merge Request Action to allow source branch to be deleted +- 2db07887cb: Added two new scaffolder actions: `github:repo:create` and `github:repo:push` + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. + +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + - @backstage/plugin-catalog-backend@1.2.1-next.2 + - @backstage/integration@1.2.2-next.2 + +## @backstage/plugin-tech-insights-backend@0.5.0-next.2 + +### Minor Changes + +- 818fa28d71: Allow FactRetrieverRegistry to be injected into buildTechInsightsContext so that we can override default registry implementation. + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + - @backstage/backend-tasks@0.3.3-next.2 + +## @backstage/app-defaults@1.0.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + +## @backstage/backend-common@0.14.1-next.2 + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. + +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +- Updated dependencies + - @backstage/integration@1.2.2-next.2 + +## @backstage/backend-tasks@0.3.3-next.2 + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- Updated dependencies + - @backstage/backend-common@0.14.1-next.2 + +## @backstage/backend-test-utils@0.1.26-next.2 + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- Updated dependencies + - @backstage/backend-common@0.14.1-next.2 + - @backstage/cli@0.18.0-next.2 + +## @backstage/cli@0.18.0-next.2 + +### Patch Changes + +- f6b6fb7165: The `test` command now ensures that all IO is flushed before exiting when printing `--help`. + +## @backstage/create-app@0.4.29-next.2 + +### Patch Changes + +- f281ad17c0: Adds the ability to define the Backstage app name using a `BACKSTAGE_APP_NAME` + environment variable when running `create-app`. + +## @backstage/dev-utils@1.0.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/app-defaults@1.0.4-next.2 + - @backstage/integration-react@1.1.2-next.2 + +## @backstage/integration@1.2.2-next.2 + +### Patch Changes + +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +## @backstage/integration-react@1.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/integration@1.2.2-next.2 + +## @backstage/theme@0.2.16-next.1 + +### Patch Changes + +- ff4f56eb49: **DEPRECATED**: The `bursts` object from `BackstagePaletteAdditions` has been depreciated and will be removed in a future release + + The `genPageTheme` function now includes an optional options object with an optional `fontColor` which defaults to white if not provided. + +## @backstage/plugin-adr@0.1.2-next.2 + +### Patch Changes + +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/plugin-search-react@0.2.2-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/integration-react@1.1.2-next.2 + +## @backstage/plugin-airbrake@0.3.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/dev-utils@1.0.4-next.2 + +## @backstage/plugin-allure@0.1.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-analytics-module-ga@0.1.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + +## @backstage/plugin-apache-airflow@0.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + +## @backstage/plugin-api-docs@0.8.7-next.2 + +### Patch Changes + +- a274fe38b9: Add hidden title column to catalog and API table to enable filtering by title. +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog@1.4.0-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-app-backend@0.3.34-next.2 + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- Updated dependencies + - @backstage/backend-common@0.14.1-next.2 + +## @backstage/plugin-auth-backend@0.15.0-next.2 + +### Patch Changes + +- 8e03db907a: Auth provider now also export createAuthProviderIntegration +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + +## @backstage/plugin-azure-devops@0.1.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-badges@0.2.31-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-badges-backend@0.1.28-next.2 + +### Patch Changes + +- 58fd5ee9d5: Add missing installation instructions +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + +## @backstage/plugin-bazaar@0.1.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/plugin-catalog@1.4.0-next.2 + - @backstage/cli@0.18.0-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-bazaar-backend@0.1.18-next.1 + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- Updated dependencies + - @backstage/backend-common@0.14.1-next.2 + - @backstage/backend-test-utils@0.1.26-next.2 + +## @backstage/plugin-bitrise@0.1.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-catalog-backend@1.2.1-next.2 + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. + +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + - @backstage/integration@1.2.2-next.2 + +## @backstage/plugin-catalog-backend-module-openapi@0.1.0-next.1 + +### Patch Changes + +- 4881dc4c84: Updated dependency `openapi-types` to `^12.0.0`. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + - @backstage/plugin-catalog-backend@1.2.1-next.2 + - @backstage/integration@1.2.2-next.2 + +## @backstage/plugin-catalog-graph@0.2.19-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-catalog-import@0.8.10-next.2 + +### Patch Changes + +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/integration@1.2.2-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/integration-react@1.1.2-next.2 + +## @backstage/plugin-catalog-react@1.1.2-next.2 + +### Patch Changes + +- be26d95141: Added new `EntityProcessingStatusPicker` that will filter for entities with orphans and/or errors. + + If you are using the default Catalog page this picker will be added automatically. For those who have customized their Catalog page you'll need to add this manually by doing something like this: + + ```diff + ... + import { + CatalogFilterLayout, + EntityTypePicker, + UserListPicker, + EntityTagPicker + + EntityProcessingStatusPicker, + } from '@backstage/plugin-catalog-react'; + ... + export const CustomCatalogPage = ({ + columns, + actions, + initiallySelectedFilter = 'owned', + }: CatalogPageProps) => { + return ( + ... + + + + + + + + + + + + + + + + ... + }; + ``` + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/integration@1.2.2-next.2 + +## @backstage/plugin-circleci@0.3.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-cloudbuild@0.3.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-code-climate@0.1.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-code-coverage@0.1.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-code-coverage-backend@0.1.32-next.2 + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + - @backstage/integration@1.2.2-next.2 + +## @backstage/plugin-codescene@0.1.2-next.2 + +### Patch Changes + +- 15201b1032: Updated dependency `rc-progress` to `3.4.0`. +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + +## @backstage/plugin-config-schema@0.1.30-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + +## @backstage/plugin-cost-insights@0.11.29-next.2 + +### Patch Changes + +- 3e032a5de2: Move cost-insights data specific API types (non react) into an @backstage/plugin-cost-insights-common + isomorphic package. This allows these types to be shared in any backend packages or other cost-insight + modules. +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/plugin-cost-insights-common@0.1.0-next.0 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + +## @backstage/plugin-dynatrace@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + +## @backstage/plugin-explore@0.3.38-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-firehydrant@0.1.24-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-fossa@0.2.39-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-gcalendar@0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + +## @backstage/plugin-gcp-projects@0.3.26-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + +## @backstage/plugin-git-release-manager@0.3.20-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/integration@1.2.2-next.2 + +## @backstage/plugin-github-actions@0.5.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/integration@1.2.2-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-github-deployments@0.1.38-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/integration@1.2.2-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/integration-react@1.1.2-next.2 + +## @backstage/plugin-github-pull-requests-board@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/integration@1.2.2-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-gitops-profiles@0.3.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + +## @backstage/plugin-gocd@0.1.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-graphiql@0.2.39-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + +## @backstage/plugin-home@0.4.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/plugin-stack-overflow@0.1.3-next.2 + +## @backstage/plugin-ilert@0.1.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-jenkins@0.7.6-next.2 + +### Patch Changes + +- 8747824221: feature: added support for multiple branches to the `JenkinsApi` +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-jenkins-backend@0.1.24-next.2 + +### Patch Changes + +- 8747824221: feature: added support for multiple branches to the `JenkinsApi` +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + +## @backstage/plugin-kafka@0.3.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-kafka-backend@0.2.27-next.2 + +### Patch Changes + +- 8751667541: Updated dependency `kafkajs` to `^2.0.0`. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + +## @backstage/plugin-kubernetes@0.6.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/plugin-kubernetes-common@0.4.0-next.1 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-kubernetes-backend@0.7.0-next.2 + +### Patch Changes + +- 60e5f9fe68: Fixed the lack of `limitranges` as part of the Default Objects to fetch from the kubernetes api +- Updated dependencies + - @backstage/plugin-kubernetes-common@0.4.0-next.1 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + +## @backstage/plugin-kubernetes-common@0.4.0-next.1 + +### Patch Changes + +- 60e5f9fe68: Fixed the lack of `limitranges` as part of the Default Objects to fetch from the kubernetes api +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + +## @backstage/plugin-lighthouse@0.3.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-newrelic@0.3.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + +## @backstage/plugin-newrelic-dashboard@0.1.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-org@0.5.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-pagerduty@0.5.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-periskop@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-rollbar@0.4.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-search@0.9.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/plugin-search-react@0.2.2-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-search-backend-module-pg@0.3.5-next.2 + +### Patch Changes + +- 423e3d8e95: **DEPRECATED**: `PgSearchEngine` static `from` has been deprecated and will be removed in a future release. Use static `fromConfig` method to instantiate. + + Added support for highlighting matched terms in search result data + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. + +- Updated dependencies + - @backstage/backend-common@0.14.1-next.2 + +## @backstage/plugin-search-react@0.2.2-next.2 + +### Patch Changes + +- 60408ca9d4: Fix search pagination to reset page cursor also when a term is cleared. +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + +## @backstage/plugin-sentry@0.3.45-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-shortcuts@0.2.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + +## @backstage/plugin-sonarqube@0.3.7-next.2 + +### Patch Changes + +- 15201b1032: Updated dependency `rc-progress` to `3.4.0`. +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-splunk-on-call@0.3.31-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-stack-overflow@0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-home@0.4.23-next.2 + +## @backstage/plugin-tech-insights@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-tech-radar@0.5.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + +## @backstage/plugin-techdocs@1.2.1-next.2 + +### Patch Changes + +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +- 7739141ab2: Fix: When docs are shown in an entity page under the docs tab the sidebars start overlapping with the header and tabs in the page when you scroll the documentation content. + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/plugin-search-react@0.2.2-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/integration@1.2.2-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/integration-react@1.1.2-next.2 + - @backstage/plugin-techdocs-react@1.0.2-next.1 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/plugin-search-react@0.2.2-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-techdocs@1.2.1-next.2 + - @backstage/plugin-catalog@1.4.0-next.2 + - @backstage/integration-react@1.1.2-next.2 + - @backstage/plugin-techdocs-react@1.0.2-next.1 + +## @backstage/plugin-techdocs-backend@1.2.0-next.2 + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + - @backstage/integration@1.2.2-next.2 + - @backstage/plugin-techdocs-node@1.2.0-next.2 + +## @backstage/plugin-techdocs-module-addons-contrib@1.0.2-next.2 + +### Patch Changes + +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/integration@1.2.2-next.2 + - @backstage/integration-react@1.1.2-next.2 + - @backstage/plugin-techdocs-react@1.0.2-next.1 + +## @backstage/plugin-techdocs-node@1.2.0-next.2 + +### Patch Changes + +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + - @backstage/integration@1.2.2-next.2 + +## @backstage/plugin-techdocs-react@1.0.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + +## @backstage/plugin-todo@0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-user-settings@0.4.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + +## @backstage/plugin-vault@0.1.1-next.2 + +### Patch Changes + +- 7ee4abdcc9: Added a path notion in addition to secret name to allow to differentiate secrets in sub-paths +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + +## @backstage/plugin-vault-backend@0.2.0-next.2 + +### Patch Changes + +- 7ee4abdcc9: Added a path notion in addition to secret name to allow to differentiate secrets in sub-paths +- Updated dependencies + - @backstage/backend-common@0.14.1-next.2 + - @backstage/backend-tasks@0.3.3-next.2 + - @backstage/backend-test-utils@0.1.26-next.2 + +## @backstage/plugin-xcmetrics@0.2.27-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + +## example-app@0.2.73-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-cost-insights@0.11.29-next.2 + - @backstage/core-components@0.10.0-next.2 + - @backstage/plugin-scaffolder@1.4.0-next.2 + - @backstage/plugin-jenkins@0.7.6-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/plugin-search-react@0.2.2-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-import@0.8.10-next.2 + - @backstage/plugin-techdocs@1.2.1-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.2-next.2 + - @backstage/plugin-api-docs@0.8.7-next.2 + - @backstage/plugin-catalog@1.4.0-next.2 + - @backstage/cli@0.18.0-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/app-defaults@1.0.4-next.2 + - @backstage/integration-react@1.1.2-next.2 + - @backstage/plugin-airbrake@0.3.7-next.2 + - @backstage/plugin-apache-airflow@0.2.0-next.2 + - @backstage/plugin-azure-devops@0.1.23-next.2 + - @backstage/plugin-badges@0.2.31-next.2 + - @backstage/plugin-catalog-graph@0.2.19-next.2 + - @backstage/plugin-circleci@0.3.7-next.2 + - @backstage/plugin-cloudbuild@0.3.7-next.2 + - @backstage/plugin-code-coverage@0.1.34-next.2 + - @backstage/plugin-dynatrace@0.1.1-next.2 + - @backstage/plugin-explore@0.3.38-next.2 + - @backstage/plugin-gcalendar@0.3.3-next.2 + - @backstage/plugin-gcp-projects@0.3.26-next.2 + - @backstage/plugin-github-actions@0.5.7-next.2 + - @backstage/plugin-gocd@0.1.13-next.2 + - @backstage/plugin-graphiql@0.2.39-next.2 + - @backstage/plugin-home@0.4.23-next.2 + - @backstage/plugin-kafka@0.3.7-next.2 + - @backstage/plugin-kubernetes@0.6.7-next.2 + - @backstage/plugin-lighthouse@0.3.7-next.2 + - @backstage/plugin-newrelic@0.3.25-next.2 + - @backstage/plugin-newrelic-dashboard@0.1.15-next.2 + - @backstage/plugin-org@0.5.7-next.2 + - @backstage/plugin-pagerduty@0.5.0-next.2 + - @backstage/plugin-rollbar@0.4.7-next.2 + - @backstage/plugin-search@0.9.1-next.2 + - @backstage/plugin-sentry@0.3.45-next.2 + - @backstage/plugin-shortcuts@0.2.8-next.2 + - @backstage/plugin-stack-overflow@0.1.3-next.2 + - @backstage/plugin-tech-insights@0.2.3-next.2 + - @backstage/plugin-tech-radar@0.5.14-next.2 + - @backstage/plugin-techdocs-react@1.0.2-next.1 + - @backstage/plugin-todo@0.2.9-next.2 + - @backstage/plugin-user-settings@0.4.6-next.2 + +## example-backend@0.2.73-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.7.0-next.2 + - @backstage/plugin-tech-insights-backend@0.5.0-next.2 + - @backstage/plugin-jenkins-backend@0.1.24-next.2 + - @backstage/plugin-search-backend-module-pg@0.3.5-next.2 + - @backstage/plugin-scaffolder-backend@1.4.0-next.2 + - @backstage/plugin-auth-backend@0.15.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/plugin-kafka-backend@0.2.27-next.2 + - @backstage/backend-common@0.14.1-next.2 + - @backstage/backend-tasks@0.3.3-next.2 + - @backstage/plugin-app-backend@0.3.34-next.2 + - @backstage/plugin-catalog-backend@1.2.1-next.2 + - @backstage/plugin-code-coverage-backend@0.1.32-next.2 + - @backstage/plugin-techdocs-backend@1.2.0-next.2 + - @backstage/plugin-badges-backend@0.1.28-next.2 + - @backstage/integration@1.2.2-next.2 + - example-app@0.2.73-next.2 + +## techdocs-cli-embedded-app@0.2.72-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-techdocs@1.2.1-next.2 + - @backstage/plugin-catalog@1.4.0-next.2 + - @backstage/cli@0.18.0-next.2 + - @backstage/app-defaults@1.0.4-next.2 + - @backstage/integration-react@1.1.2-next.2 + - @backstage/plugin-techdocs-react@1.0.2-next.1 + +## @internal/plugin-todo-list@1.0.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 diff --git a/package.json b/package.json index 89a49c11fd..9f219cfa11 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "@types/react": "^17", "@types/react-dom": "^17" }, - "version": "1.4.0-next.1", + "version": "1.4.0-next.2", "dependencies": { "@manypkg/get-packages": "^1.1.3", "@microsoft/api-documenter": "^7.17.11", diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index 3da536ef7f..2786d4a5e4 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/app-defaults +## 1.0.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + ## 1.0.4-next.1 ### Patch Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index 82534354a0..e67af42404 100644 --- a/packages/app-defaults/package.json +++ b/packages/app-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/app-defaults", "description": "Provides the default wiring of a Backstage App", - "version": "1.0.4-next.1", + "version": "1.0.4-next.2", "private": false, "publishConfig": { "access": "public", @@ -33,11 +33,11 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", "@backstage/core-plugin-api": "^1.0.3", "@backstage/plugin-permission-react": "^0.4.3-next.0", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "react-router-dom": "6.0.0-beta.0" @@ -46,7 +46,7 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index a4cc7735dd..0f28d87448 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,60 @@ # example-app +## 0.2.73-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-cost-insights@0.11.29-next.2 + - @backstage/core-components@0.10.0-next.2 + - @backstage/plugin-scaffolder@1.4.0-next.2 + - @backstage/plugin-jenkins@0.7.6-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/plugin-search-react@0.2.2-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-import@0.8.10-next.2 + - @backstage/plugin-techdocs@1.2.1-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.2-next.2 + - @backstage/plugin-api-docs@0.8.7-next.2 + - @backstage/plugin-catalog@1.4.0-next.2 + - @backstage/cli@0.18.0-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/app-defaults@1.0.4-next.2 + - @backstage/integration-react@1.1.2-next.2 + - @backstage/plugin-airbrake@0.3.7-next.2 + - @backstage/plugin-apache-airflow@0.2.0-next.2 + - @backstage/plugin-azure-devops@0.1.23-next.2 + - @backstage/plugin-badges@0.2.31-next.2 + - @backstage/plugin-catalog-graph@0.2.19-next.2 + - @backstage/plugin-circleci@0.3.7-next.2 + - @backstage/plugin-cloudbuild@0.3.7-next.2 + - @backstage/plugin-code-coverage@0.1.34-next.2 + - @backstage/plugin-dynatrace@0.1.1-next.2 + - @backstage/plugin-explore@0.3.38-next.2 + - @backstage/plugin-gcalendar@0.3.3-next.2 + - @backstage/plugin-gcp-projects@0.3.26-next.2 + - @backstage/plugin-github-actions@0.5.7-next.2 + - @backstage/plugin-gocd@0.1.13-next.2 + - @backstage/plugin-graphiql@0.2.39-next.2 + - @backstage/plugin-home@0.4.23-next.2 + - @backstage/plugin-kafka@0.3.7-next.2 + - @backstage/plugin-kubernetes@0.6.7-next.2 + - @backstage/plugin-lighthouse@0.3.7-next.2 + - @backstage/plugin-newrelic@0.3.25-next.2 + - @backstage/plugin-newrelic-dashboard@0.1.15-next.2 + - @backstage/plugin-org@0.5.7-next.2 + - @backstage/plugin-pagerduty@0.5.0-next.2 + - @backstage/plugin-rollbar@0.4.7-next.2 + - @backstage/plugin-search@0.9.1-next.2 + - @backstage/plugin-sentry@0.3.45-next.2 + - @backstage/plugin-shortcuts@0.2.8-next.2 + - @backstage/plugin-stack-overflow@0.1.3-next.2 + - @backstage/plugin-tech-insights@0.2.3-next.2 + - @backstage/plugin-tech-radar@0.5.14-next.2 + - @backstage/plugin-techdocs-react@1.0.2-next.1 + - @backstage/plugin-todo@0.2.9-next.2 + - @backstage/plugin-user-settings@0.4.6-next.2 + ## 0.2.73-next.1 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index 4ba50b13c7..c114d79250 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,67 +1,67 @@ { "name": "example-app", - "version": "0.2.73-next.1", + "version": "0.2.73-next.2", "private": true, "backstage": { "role": "frontend" }, "bundled": true, "dependencies": { - "@backstage/app-defaults": "^1.0.4-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/cli": "^0.18.0-next.1", + "@backstage/app-defaults": "^1.0.4-next.2", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/cli": "^0.18.0-next.2", "@backstage/config": "^1.0.1", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/integration-react": "^1.1.2-next.1", - "@backstage/plugin-airbrake": "^0.3.7-next.1", - "@backstage/plugin-api-docs": "^0.8.7-next.1", - "@backstage/plugin-azure-devops": "^0.1.23-next.1", - "@backstage/plugin-apache-airflow": "^0.2.0-next.1", - "@backstage/plugin-badges": "^0.2.31-next.1", - "@backstage/plugin-catalog": "^1.3.1-next.1", + "@backstage/integration-react": "^1.1.2-next.2", + "@backstage/plugin-airbrake": "^0.3.7-next.2", + "@backstage/plugin-api-docs": "^0.8.7-next.2", + "@backstage/plugin-azure-devops": "^0.1.23-next.2", + "@backstage/plugin-apache-airflow": "^0.2.0-next.2", + "@backstage/plugin-badges": "^0.2.31-next.2", + "@backstage/plugin-catalog": "^1.4.0-next.2", "@backstage/plugin-catalog-common": "^1.0.4-next.0", - "@backstage/plugin-catalog-graph": "^0.2.19-next.1", - "@backstage/plugin-catalog-import": "^0.8.10-next.1", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/plugin-circleci": "^0.3.7-next.1", - "@backstage/plugin-cloudbuild": "^0.3.7-next.1", - "@backstage/plugin-code-coverage": "^0.1.34-next.1", - "@backstage/plugin-cost-insights": "^0.11.29-next.1", - "@backstage/plugin-dynatrace": "^0.1.1-next.1", - "@backstage/plugin-explore": "^0.3.38-next.1", - "@backstage/plugin-gcalendar": "^0.3.3-next.1", - "@backstage/plugin-gcp-projects": "^0.3.26-next.1", - "@backstage/plugin-github-actions": "^0.5.7-next.1", - "@backstage/plugin-gocd": "^0.1.13-next.1", - "@backstage/plugin-graphiql": "^0.2.39-next.1", - "@backstage/plugin-home": "^0.4.23-next.1", - "@backstage/plugin-jenkins": "^0.7.6-next.1", - "@backstage/plugin-kafka": "^0.3.7-next.1", - "@backstage/plugin-kubernetes": "^0.6.7-next.1", - "@backstage/plugin-lighthouse": "^0.3.7-next.1", - "@backstage/plugin-newrelic": "^0.3.25-next.1", - "@backstage/plugin-newrelic-dashboard": "^0.1.15-next.1", - "@backstage/plugin-org": "^0.5.7-next.1", - "@backstage/plugin-pagerduty": "0.5.0-next.1", + "@backstage/plugin-catalog-graph": "^0.2.19-next.2", + "@backstage/plugin-catalog-import": "^0.8.10-next.2", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/plugin-circleci": "^0.3.7-next.2", + "@backstage/plugin-cloudbuild": "^0.3.7-next.2", + "@backstage/plugin-code-coverage": "^0.1.34-next.2", + "@backstage/plugin-cost-insights": "^0.11.29-next.2", + "@backstage/plugin-dynatrace": "^0.1.1-next.2", + "@backstage/plugin-explore": "^0.3.38-next.2", + "@backstage/plugin-gcalendar": "^0.3.3-next.2", + "@backstage/plugin-gcp-projects": "^0.3.26-next.2", + "@backstage/plugin-github-actions": "^0.5.7-next.2", + "@backstage/plugin-gocd": "^0.1.13-next.2", + "@backstage/plugin-graphiql": "^0.2.39-next.2", + "@backstage/plugin-home": "^0.4.23-next.2", + "@backstage/plugin-jenkins": "^0.7.6-next.2", + "@backstage/plugin-kafka": "^0.3.7-next.2", + "@backstage/plugin-kubernetes": "^0.6.7-next.2", + "@backstage/plugin-lighthouse": "^0.3.7-next.2", + "@backstage/plugin-newrelic": "^0.3.25-next.2", + "@backstage/plugin-newrelic-dashboard": "^0.1.15-next.2", + "@backstage/plugin-org": "^0.5.7-next.2", + "@backstage/plugin-pagerduty": "0.5.0-next.2", "@backstage/plugin-permission-react": "^0.4.3-next.0", - "@backstage/plugin-rollbar": "^0.4.7-next.1", - "@backstage/plugin-scaffolder": "^1.4.0-next.1", - "@backstage/plugin-search": "^0.9.1-next.1", - "@backstage/plugin-search-react": "^0.2.2-next.1", + "@backstage/plugin-rollbar": "^0.4.7-next.2", + "@backstage/plugin-scaffolder": "^1.4.0-next.2", + "@backstage/plugin-search": "^0.9.1-next.2", + "@backstage/plugin-search-react": "^0.2.2-next.2", "@backstage/plugin-search-common": "^0.3.6-next.0", - "@backstage/plugin-sentry": "^0.3.45-next.1", - "@backstage/plugin-shortcuts": "^0.2.8-next.1", - "@backstage/plugin-stack-overflow": "^0.1.3-next.1", - "@backstage/plugin-tech-radar": "^0.5.14-next.1", - "@backstage/plugin-techdocs": "^1.2.1-next.1", - "@backstage/plugin-techdocs-react": "^1.0.2-next.0", - "@backstage/plugin-techdocs-module-addons-contrib": "^1.0.2-next.1", - "@backstage/plugin-todo": "^0.2.9-next.1", - "@backstage/plugin-user-settings": "^0.4.6-next.1", - "@backstage/plugin-tech-insights": "^0.2.3-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-sentry": "^0.3.45-next.2", + "@backstage/plugin-shortcuts": "^0.2.8-next.2", + "@backstage/plugin-stack-overflow": "^0.1.3-next.2", + "@backstage/plugin-tech-radar": "^0.5.14-next.2", + "@backstage/plugin-techdocs": "^1.2.1-next.2", + "@backstage/plugin-techdocs-react": "^1.0.2-next.1", + "@backstage/plugin-techdocs-module-addons-contrib": "^1.0.2-next.2", + "@backstage/plugin-todo": "^0.2.9-next.2", + "@backstage/plugin-user-settings": "^0.4.6-next.2", + "@backstage/plugin-tech-insights": "^0.2.3-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md index 3ba1b38e78..a052e37fe7 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/backend-common +## 0.14.1-next.2 + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +- Updated dependencies + - @backstage/integration@1.2.2-next.2 + ## 0.14.1-next.1 ### Patch Changes diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index c5b0953864..140548e9fb 100644 --- a/packages/backend-common/package.json +++ b/packages/backend-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-common", "description": "Common functionality library for Backstage backends", - "version": "0.14.1-next.1", + "version": "0.14.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -38,7 +38,7 @@ "@backstage/config": "^1.0.1", "@backstage/config-loader": "^1.1.3-next.0", "@backstage/errors": "^1.1.0-next.0", - "@backstage/integration": "^1.2.2-next.1", + "@backstage/integration": "^1.2.2-next.2", "@backstage/types": "^1.0.0", "@google-cloud/storage": "^6.0.0", "@manypkg/get-packages": "^1.1.3", @@ -91,8 +91,8 @@ } }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.26-next.1", - "@backstage/cli": "^0.18.0-next.1", + "@backstage/backend-test-utils": "^0.1.26-next.2", + "@backstage/cli": "^0.18.0-next.2", "@types/archiver": "^5.1.0", "@types/base64-stream": "^1.0.2", "@types/compression": "^1.7.0", diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md index 5b5232e1fb..782088ff84 100644 --- a/packages/backend-tasks/CHANGELOG.md +++ b/packages/backend-tasks/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/backend-tasks +## 0.3.3-next.2 + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- Updated dependencies + - @backstage/backend-common@0.14.1-next.2 + ## 0.3.3-next.1 ### Patch Changes diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index 80655db491..91b94d4d1c 100644 --- a/packages/backend-tasks/package.json +++ b/packages/backend-tasks/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-tasks", "description": "Common distributed task management library for Backstage backends", - "version": "0.3.3-next.1", + "version": "0.3.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -33,7 +33,7 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-common": "^0.14.1-next.2", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0-next.0", "@backstage/types": "^1.0.0", @@ -48,8 +48,8 @@ "zod": "^3.9.5" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.26-next.1", - "@backstage/cli": "^0.18.0-next.1", + "@backstage/backend-test-utils": "^0.1.26-next.2", + "@backstage/cli": "^0.18.0-next.2", "@types/cron": "^2.0.0", "wait-for-expect": "^3.0.2" }, diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index 63868083d7..e0bb57a3f0 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/backend-test-utils +## 0.1.26-next.2 + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- Updated dependencies + - @backstage/backend-common@0.14.1-next.2 + - @backstage/cli@0.18.0-next.2 + ## 0.1.26-next.1 ### Patch Changes diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index ff1275c387..b658c375e5 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-test-utils", "description": "Test helpers library for Backstage backends", - "version": "0.1.26-next.1", + "version": "0.1.26-next.2", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -34,8 +34,8 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.14.1-next.1", - "@backstage/cli": "^0.18.0-next.1", + "@backstage/backend-common": "^0.14.1-next.2", + "@backstage/cli": "^0.18.0-next.2", "@backstage/config": "^1.0.1", "better-sqlite3": "^7.5.0", "knex": "^2.0.0", @@ -46,7 +46,7 @@ "uuid": "^8.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1" + "@backstage/cli": "^0.18.0-next.2" }, "files": [ "dist" diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index f692b3b6c3..02eac85805 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,28 @@ # example-backend +## 0.2.73-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.7.0-next.2 + - @backstage/plugin-tech-insights-backend@0.5.0-next.2 + - @backstage/plugin-jenkins-backend@0.1.24-next.2 + - @backstage/plugin-search-backend-module-pg@0.3.5-next.2 + - @backstage/plugin-scaffolder-backend@1.4.0-next.2 + - @backstage/plugin-auth-backend@0.15.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/plugin-kafka-backend@0.2.27-next.2 + - @backstage/backend-common@0.14.1-next.2 + - @backstage/backend-tasks@0.3.3-next.2 + - @backstage/plugin-app-backend@0.3.34-next.2 + - @backstage/plugin-catalog-backend@1.2.1-next.2 + - @backstage/plugin-code-coverage-backend@0.1.32-next.2 + - @backstage/plugin-techdocs-backend@1.2.0-next.2 + - @backstage/plugin-badges-backend@0.1.28-next.2 + - @backstage/integration@1.2.2-next.2 + - example-app@0.2.73-next.2 + ## 0.2.73-next.1 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index 1cb0e1405a..df6fe5ec3b 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.2.73-next.1", + "version": "0.2.73-next.2", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,36 +26,36 @@ "build-image": "docker build ../.. -f Dockerfile --tag example-backend" }, "dependencies": { - "@backstage/backend-common": "^0.14.1-next.1", - "@backstage/backend-tasks": "^0.3.3-next.1", + "@backstage/backend-common": "^0.14.1-next.2", + "@backstage/backend-tasks": "^0.3.3-next.2", "@backstage/catalog-client": "^1.0.4-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", - "@backstage/integration": "^1.2.2-next.1", - "@backstage/plugin-app-backend": "^0.3.34-next.1", - "@backstage/plugin-auth-backend": "^0.15.0-next.1", + "@backstage/integration": "^1.2.2-next.2", + "@backstage/plugin-app-backend": "^0.3.34-next.2", + "@backstage/plugin-auth-backend": "^0.15.0-next.2", "@backstage/plugin-auth-node": "^0.2.3-next.1", "@backstage/plugin-azure-devops-backend": "^0.3.13-next.0", - "@backstage/plugin-badges-backend": "^0.1.28-next.1", - "@backstage/plugin-catalog-backend": "^1.2.1-next.1", - "@backstage/plugin-code-coverage-backend": "^0.1.32-next.1", + "@backstage/plugin-badges-backend": "^0.1.28-next.2", + "@backstage/plugin-catalog-backend": "^1.2.1-next.2", + "@backstage/plugin-code-coverage-backend": "^0.1.32-next.2", "@backstage/plugin-graphql-backend": "^0.1.24-next.0", - "@backstage/plugin-jenkins-backend": "^0.1.24-next.1", - "@backstage/plugin-kubernetes-backend": "^0.7.0-next.1", - "@backstage/plugin-kafka-backend": "^0.2.27-next.1", + "@backstage/plugin-jenkins-backend": "^0.1.24-next.2", + "@backstage/plugin-kubernetes-backend": "^0.7.0-next.2", + "@backstage/plugin-kafka-backend": "^0.2.27-next.2", "@backstage/plugin-permission-backend": "^0.5.9-next.1", "@backstage/plugin-permission-common": "^0.6.3-next.0", "@backstage/plugin-permission-node": "^0.6.3-next.1", "@backstage/plugin-proxy-backend": "^0.2.28-next.0", "@backstage/plugin-rollbar-backend": "^0.1.31-next.0", - "@backstage/plugin-scaffolder-backend": "^1.4.0-next.1", + "@backstage/plugin-scaffolder-backend": "^1.4.0-next.2", "@backstage/plugin-scaffolder-backend-module-rails": "^0.4.2-next.1", "@backstage/plugin-search-backend": "^0.5.4-next.1", "@backstage/plugin-search-backend-node": "^0.6.3-next.1", "@backstage/plugin-search-backend-module-elasticsearch": "^0.2.0-next.1", - "@backstage/plugin-search-backend-module-pg": "^0.3.5-next.1", - "@backstage/plugin-techdocs-backend": "^1.2.0-next.1", - "@backstage/plugin-tech-insights-backend": "^0.4.2-next.1", + "@backstage/plugin-search-backend-module-pg": "^0.3.5-next.2", + "@backstage/plugin-techdocs-backend": "^1.2.0-next.2", + "@backstage/plugin-tech-insights-backend": "^0.5.0-next.2", "@backstage/plugin-tech-insights-node": "^0.3.2-next.0", "@backstage/plugin-tech-insights-backend-module-jsonfc": "^0.1.18-next.1", "@backstage/plugin-todo-backend": "^0.1.31-next.1", @@ -75,7 +75,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@types/dockerode": "^3.3.0", "@types/express": "^4.17.6", "@types/express-serve-static-core": "^4.17.5", diff --git a/packages/catalog-model/CHANGELOG.md b/packages/catalog-model/CHANGELOG.md index 78f7a1207c..910fc92cd2 100644 --- a/packages/catalog-model/CHANGELOG.md +++ b/packages/catalog-model/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/catalog-model +## 1.1.0-next.2 + +### Minor Changes + +- 4cc81372f8: Introduced `GroupDefaultParentEntityPolicy` to set a default group entity parent. + ## 1.1.0-next.1 ### Patch Changes diff --git a/packages/catalog-model/package.json b/packages/catalog-model/package.json index 91d3f74a66..a58fdcf4d5 100644 --- a/packages/catalog-model/package.json +++ b/packages/catalog-model/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/catalog-model", "description": "Types and validators that help describe the model of a Backstage Catalog", - "version": "1.1.0-next.1", + "version": "1.1.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -43,7 +43,7 @@ "uuid": "^8.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@types/jest": "^26.0.7", "@types/json-schema": "^7.0.5", "@types/lodash": "^4.14.151", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 227ad4b772..b4dbb1cdc5 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/cli +## 0.18.0-next.2 + +### Patch Changes + +- f6b6fb7165: The `test` command now ensures that all IO is flushed before exiting when printing `--help`. + ## 0.18.0-next.1 ### Minor Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 6653744a33..7ea86cfb26 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/cli", "description": "CLI for developing Backstage plugins and apps", - "version": "0.18.0-next.1", + "version": "0.18.0-next.2", "private": false, "publishConfig": { "access": "public" @@ -126,14 +126,14 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-common": "^0.14.1-next.2", "@backstage/config": "^1.0.1", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@types/diff": "^5.0.0", "@types/express": "^4.17.6", "@types/fs-extra": "^9.0.1", diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index cf1c6305d4..46a44394b3 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/core-components +## 0.10.0-next.2 + +### Minor Changes + +- 32204fa794: Add `transformLinkUri` and `transformImageUri` to `MarkdownContent` + +### Patch Changes + +- b4b711bcc2: Fix the EntityLayout header style so that EntityContextMenu button can display in correct shape when user hover on it +- 15201b1032: Updated dependency `rc-progress` to `3.4.0`. +- 385389d23c: Updated to remove usage of the `bursts` object in the theme palette +- Updated dependencies + - @backstage/theme@0.2.16-next.1 + ## 0.9.6-next.1 ### Patch Changes diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 51cbc37a1b..e297f89eeb 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-components", "description": "Core components used by Backstage plugins and apps", - "version": "0.9.6-next.1", + "version": "0.10.0-next.2", "private": false, "publishConfig": { "access": "public", @@ -36,7 +36,7 @@ "@backstage/config": "^1.0.1", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@backstage/version-bridge": "^1.0.1", "@material-table/core": "^3.1.0", "@material-ui/core": "^4.12.2", @@ -80,7 +80,7 @@ }, "devDependencies": { "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index 9ec1859289..7f2fa483f0 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/create-app +## 0.4.29-next.2 + +### Patch Changes + +- f281ad17c0: Adds the ability to define the Backstage app name using a `BACKSTAGE_APP_NAME` + environment variable when running `create-app`. + ## 0.4.29-next.1 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 381e975729..1fc0d17285 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/create-app", "description": "A CLI that helps you create your own Backstage app", - "version": "0.4.29-next.1", + "version": "0.4.29-next.2", "private": false, "publishConfig": { "access": "public" diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 907c9f757d..b748970b06 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/dev-utils +## 1.0.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/app-defaults@1.0.4-next.2 + - @backstage/integration-react@1.1.2-next.2 + ## 1.0.4-next.1 ### Patch Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index c15e60d423..8d19bf9cb3 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/dev-utils", "description": "Utilities for developing Backstage plugins.", - "version": "1.0.4-next.1", + "version": "1.0.4-next.2", "private": false, "publishConfig": { "access": "public", @@ -33,15 +33,15 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/app-defaults": "^1.0.4-next.1", + "@backstage/app-defaults": "^1.0.4-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/integration-react": "^1.1.2-next.1", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/integration-react": "^1.1.2-next.2", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", "@backstage/test-utils": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@testing-library/jest-dom": "^5.10.1", @@ -59,7 +59,7 @@ "react-dom": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@types/jest": "^26.0.7", "@types/node": "^16.0.0" }, diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index 102fc3ea75..644d6f7cc4 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/integration-react +## 1.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/integration@1.2.2-next.2 + ## 1.1.2-next.1 ### Patch Changes diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index 6a0cfe3041..97f5a6491a 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration-react", "description": "Frontend package for managing integrations towards external systems", - "version": "1.1.2-next.1", + "version": "1.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,10 +25,10 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/integration": "^1.2.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/integration": "^1.2.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -38,8 +38,8 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/cli": "^0.18.0-next.2", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/packages/integration/CHANGELOG.md b/packages/integration/CHANGELOG.md index 3db1b7c7b9..bf352f168f 100644 --- a/packages/integration/CHANGELOG.md +++ b/packages/integration/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/integration +## 1.2.2-next.2 + +### Patch Changes + +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + ## 1.2.2-next.1 ### Patch Changes diff --git a/packages/integration/package.json b/packages/integration/package.json index 3f0c5e604c..45834ebed7 100644 --- a/packages/integration/package.json +++ b/packages/integration/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration", "description": "Helpers for managing integrations towards external systems", - "version": "1.2.2-next.1", + "version": "1.2.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -43,7 +43,7 @@ "lodash": "^4.17.21" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/config-loader": "^1.1.3-next.0", "@backstage/test-utils": "^1.1.2-next.1", "@types/jest": "^26.0.7", diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index 29a53625fc..af9f0ad09c 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,20 @@ # techdocs-cli-embedded-app +## 0.2.72-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-techdocs@1.2.1-next.2 + - @backstage/plugin-catalog@1.4.0-next.2 + - @backstage/cli@0.18.0-next.2 + - @backstage/app-defaults@1.0.4-next.2 + - @backstage/integration-react@1.1.2-next.2 + - @backstage/plugin-techdocs-react@1.0.2-next.1 + ## 0.2.72-next.1 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index fa4ec8a38c..60389b6596 100644 --- a/packages/techdocs-cli-embedded-app/package.json +++ b/packages/techdocs-cli-embedded-app/package.json @@ -1,25 +1,25 @@ { "name": "techdocs-cli-embedded-app", - "version": "0.2.72-next.1", + "version": "0.2.72-next.2", "private": true, "backstage": { "role": "frontend" }, "bundled": true, "dependencies": { - "@backstage/app-defaults": "^1.0.4-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/cli": "^0.18.0-next.1", + "@backstage/app-defaults": "^1.0.4-next.2", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/cli": "^0.18.0-next.2", "@backstage/config": "^1.0.1", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/integration-react": "^1.1.2-next.1", - "@backstage/plugin-catalog": "^1.3.1-next.1", - "@backstage/plugin-techdocs": "^1.2.1-next.1", - "@backstage/plugin-techdocs-react": "^1.0.2-next.0", + "@backstage/integration-react": "^1.1.2-next.2", + "@backstage/plugin-catalog": "^1.4.0-next.2", + "@backstage/plugin-techdocs": "^1.2.1-next.2", + "@backstage/plugin-techdocs-react": "^1.0.2-next.1", "@backstage/test-utils": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", "history": "^5.0.0", @@ -30,7 +30,7 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/packages/theme/CHANGELOG.md b/packages/theme/CHANGELOG.md index 15e9eb68cd..93b79b0721 100644 --- a/packages/theme/CHANGELOG.md +++ b/packages/theme/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/theme +## 0.2.16-next.1 + +### Patch Changes + +- ff4f56eb49: **DEPRECATED**: The `bursts` object from `BackstagePaletteAdditions` has been depreciated and will be removed in a future release + + The `genPageTheme` function now includes an optional options object with an optional `fontColor` which defaults to white if not provided. + ## 0.2.16-next.0 ### Patch Changes diff --git a/packages/theme/package.json b/packages/theme/package.json index a3ff37538c..4cbd4d2205 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/theme", "description": "material-ui theme for use with Backstage.", - "version": "0.2.16-next.0", + "version": "0.2.16-next.1", "private": false, "publishConfig": { "access": "public", @@ -36,7 +36,7 @@ "@material-ui/core": "^4.12.2" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1" + "@backstage/cli": "^0.18.0-next.2" }, "files": [ "dist" diff --git a/plugins/adr/CHANGELOG.md b/plugins/adr/CHANGELOG.md index fc8b859ec5..efad1034a8 100644 --- a/plugins/adr/CHANGELOG.md +++ b/plugins/adr/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-adr +## 0.1.2-next.2 + +### Patch Changes + +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/plugin-search-react@0.2.2-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/integration-react@1.1.2-next.2 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/adr/package.json b/plugins/adr/package.json index 10132932f8..d72c1b697b 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr", - "version": "0.1.2-next.1", + "version": "0.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,14 +22,14 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/integration-react": "^1.1.2-next.1", + "@backstage/integration-react": "^1.1.2-next.2", "@backstage/plugin-adr-common": "^0.1.2-next.1", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", "@backstage/plugin-search-common": "^0.3.6-next.0", - "@backstage/plugin-search-react": "^0.2.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-search-react": "^0.2.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -44,9 +44,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/airbrake/CHANGELOG.md b/plugins/airbrake/CHANGELOG.md index f8b683bf5a..0be1badd9e 100644 --- a/plugins/airbrake/CHANGELOG.md +++ b/plugins/airbrake/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-airbrake +## 0.3.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/dev-utils@1.0.4-next.2 + ## 0.3.7-next.1 ### Patch Changes diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json index 00554efeee..faa9a98dcb 100644 --- a/plugins/airbrake/package.json +++ b/plugins/airbrake/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake", - "version": "0.3.7-next.1", + "version": "0.3.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,13 +23,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/dev-utils": "^1.0.4-next.1", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", "@backstage/test-utils": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -40,9 +40,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/app-defaults": "^1.0.4-next.1", - "@backstage/cli": "^0.18.0-next.1", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/app-defaults": "^1.0.4-next.2", + "@backstage/cli": "^0.18.0-next.2", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/allure/CHANGELOG.md b/plugins/allure/CHANGELOG.md index d1cce9b7ef..8f09da737c 100644 --- a/plugins/allure/CHANGELOG.md +++ b/plugins/allure/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-allure +## 0.1.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.1.23-next.1 ### Patch Changes diff --git a/plugins/allure/package.json b/plugins/allure/package.json index a576aa8f9b..4f531adde2 100644 --- a/plugins/allure/package.json +++ b/plugins/allure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-allure", "description": "A Backstage plugin that integrates with Allure", - "version": "0.1.23-next.1", + "version": "0.1.23-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,11 +25,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -40,9 +40,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/analytics-module-ga/CHANGELOG.md b/plugins/analytics-module-ga/CHANGELOG.md index 23f583473d..edbc67981a 100644 --- a/plugins/analytics-module-ga/CHANGELOG.md +++ b/plugins/analytics-module-ga/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-analytics-module-ga +## 0.1.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + ## 0.1.18-next.1 ### Patch Changes diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json index e7bae29f51..0ffbf75d9f 100644 --- a/plugins/analytics-module-ga/package.json +++ b/plugins/analytics-module-ga/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-analytics-module-ga", - "version": "0.1.18-next.1", + "version": "0.1.18-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,9 +25,9 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -38,9 +38,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/apache-airflow/CHANGELOG.md b/plugins/apache-airflow/CHANGELOG.md index a27c58192e..920dcf5686 100644 --- a/plugins/apache-airflow/CHANGELOG.md +++ b/plugins/apache-airflow/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-apache-airflow +## 0.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + ## 0.2.0-next.1 ### Minor Changes diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json index a880942750..c84ee3eaf5 100644 --- a/plugins/apache-airflow/package.json +++ b/plugins/apache-airflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apache-airflow", - "version": "0.2.0-next.1", + "version": "0.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,7 +23,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -36,9 +36,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index b4ebf48607..6b2e54f018 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-api-docs +## 0.8.7-next.2 + +### Patch Changes + +- a274fe38b9: Add hidden title column to catalog and API table to enable filtering by title. +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog@1.4.0-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.8.7-next.1 ### Patch Changes diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index 8b4f80fa3f..38ea1a1fde 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-api-docs", "description": "A Backstage plugin that helps represent API entities in the frontend", - "version": "0.8.7-next.1", + "version": "0.8.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,12 +34,12 @@ }, "dependencies": { "@asyncapi/react-component": "1.0.0-next.38", - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog": "^1.3.1-next.1", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog": "^1.4.0-next.2", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -57,9 +57,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md index cf84f54fb0..0282527437 100644 --- a/plugins/app-backend/CHANGELOG.md +++ b/plugins/app-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-app-backend +## 0.3.34-next.2 + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- Updated dependencies + - @backstage/backend-common@0.14.1-next.2 + ## 0.3.34-next.1 ### Patch Changes diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index b76c4c00dd..a59c80837f 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-app-backend", "description": "A Backstage backend plugin that serves the Backstage frontend app", - "version": "0.3.34-next.1", + "version": "0.3.34-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,7 +33,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-common": "^0.14.1-next.2", "@backstage/config-loader": "^1.1.3-next.0", "@backstage/config": "^1.0.1", "@backstage/types": "^1.0.0", @@ -50,8 +50,8 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.26-next.1", - "@backstage/cli": "^0.18.0-next.1", + "@backstage/backend-test-utils": "^0.1.26-next.2", + "@backstage/cli": "^0.18.0-next.2", "@backstage/types": "^1.0.0", "@types/supertest": "^2.0.8", "mock-fs": "^5.1.0", diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index 4b0da94dad..8e6e79d97e 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-auth-backend +## 0.15.0-next.2 + +### Patch Changes + +- 8e03db907a: Auth provider now also export createAuthProviderIntegration +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + ## 0.15.0-next.1 ### Minor Changes diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 624899c38f..48b7affb9a 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend", "description": "A Backstage backend plugin that handles authentication", - "version": "0.15.0-next.1", + "version": "0.15.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,9 +34,9 @@ }, "dependencies": { "@backstage/plugin-auth-node": "^0.2.3-next.1", - "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-common": "^0.14.1-next.2", "@backstage/catalog-client": "^1.0.4-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0-next.0", "@backstage/types": "^1.0.0", @@ -76,8 +76,8 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.26-next.1", - "@backstage/cli": "^0.18.0-next.1", + "@backstage/backend-test-utils": "^0.1.26-next.2", + "@backstage/cli": "^0.18.0-next.2", "@types/body-parser": "^1.19.0", "@types/cookie-parser": "^1.4.2", "@types/express-session": "^1.17.2", diff --git a/plugins/azure-devops/CHANGELOG.md b/plugins/azure-devops/CHANGELOG.md index 32b7ee5a25..79a58574f3 100644 --- a/plugins/azure-devops/CHANGELOG.md +++ b/plugins/azure-devops/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-azure-devops +## 0.1.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.1.23-next.1 ### Patch Changes diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json index d96ccbea29..7fdb37e859 100644 --- a/plugins/azure-devops/package.json +++ b/plugins/azure-devops/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops", - "version": "0.1.23-next.1", + "version": "0.1.23-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,13 +30,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", "@backstage/plugin-azure-devops-common": "^0.2.3", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -49,9 +49,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/badges-backend/CHANGELOG.md b/plugins/badges-backend/CHANGELOG.md index 02729eb7c8..779625184e 100644 --- a/plugins/badges-backend/CHANGELOG.md +++ b/plugins/badges-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-badges-backend +## 0.1.28-next.2 + +### Patch Changes + +- 58fd5ee9d5: Add missing installation instructions +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + ## 0.1.28-next.1 ### Patch Changes diff --git a/plugins/badges-backend/package.json b/plugins/badges-backend/package.json index 26a11c98b1..1e0bc62b15 100644 --- a/plugins/badges-backend/package.json +++ b/plugins/badges-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges-backend", "description": "A Backstage backend plugin that generates README badges for your entities", - "version": "0.1.28-next.1", + "version": "0.1.28-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,9 +34,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-common": "^0.14.1-next.2", "@backstage/catalog-client": "^1.0.4-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0-next.0", "@types/express": "^4.17.6", @@ -48,7 +48,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@types/supertest": "^2.0.8", "supertest": "^6.1.3" }, diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md index 41d41c9855..b6fc662c3a 100644 --- a/plugins/badges/CHANGELOG.md +++ b/plugins/badges/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-badges +## 0.2.31-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.2.31-next.1 ### Patch Changes diff --git a/plugins/badges/package.json b/plugins/badges/package.json index 2b58487932..fe5df1fe22 100644 --- a/plugins/badges/package.json +++ b/plugins/badges/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges", "description": "A Backstage plugin that generates README badges for your entities", - "version": "0.2.31-next.1", + "version": "0.2.31-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,12 +30,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -46,9 +46,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/bazaar-backend/CHANGELOG.md b/plugins/bazaar-backend/CHANGELOG.md index cfc222eb55..81358cfc7f 100644 --- a/plugins/bazaar-backend/CHANGELOG.md +++ b/plugins/bazaar-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-bazaar-backend +## 0.1.18-next.1 + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- Updated dependencies + - @backstage/backend-common@0.14.1-next.2 + - @backstage/backend-test-utils@0.1.26-next.2 + ## 0.1.18-next.0 ### Patch Changes diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json index 08e39852f5..351535e544 100644 --- a/plugins/bazaar-backend/package.json +++ b/plugins/bazaar-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar-backend", - "version": "0.1.18-next.0", + "version": "0.1.18-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,8 +23,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.1-next.1", - "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/backend-common": "^0.14.1-next.2", + "@backstage/backend-test-utils": "^0.1.26-next.2", "@backstage/config": "^1.0.1", "@types/express": "^4.17.6", "express": "^4.17.1", @@ -34,7 +34,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1" + "@backstage/cli": "^0.18.0-next.2" }, "files": [ "dist", diff --git a/plugins/bazaar/CHANGELOG.md b/plugins/bazaar/CHANGELOG.md index 864a5eb017..e70e0db58b 100644 --- a/plugins/bazaar/CHANGELOG.md +++ b/plugins/bazaar/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-bazaar +## 0.1.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/plugin-catalog@1.4.0-next.2 + - @backstage/cli@0.18.0-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.1.22-next.1 ### Patch Changes diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json index bbc5919e12..aa44986a79 100644 --- a/plugins/bazaar/package.json +++ b/plugins/bazaar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar", - "version": "0.1.22-next.1", + "version": "0.1.22-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,12 +25,12 @@ }, "dependencies": { "@backstage/catalog-client": "^1.0.4-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/cli": "^0.18.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/cli": "^0.18.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog": "^1.3.1-next.1", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/plugin-catalog": "^1.4.0-next.2", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", "@date-io/luxon": "1.x", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -47,8 +47,8 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/cli": "^0.18.0-next.2", + "@backstage/dev-utils": "^1.0.4-next.2", "@testing-library/jest-dom": "^5.10.1", "cross-fetch": "^3.1.5" }, diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md index 0ef9d10bea..9058f5c15a 100644 --- a/plugins/bitrise/CHANGELOG.md +++ b/plugins/bitrise/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-bitrise +## 0.1.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.1.34-next.1 ### Patch Changes diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index f8f96be603..2ad5cf3650 100644 --- a/plugins/bitrise/package.json +++ b/plugins/bitrise/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitrise", "description": "A Backstage plugin that integrates towards Bitrise", - "version": "0.1.34-next.1", + "version": "0.1.34-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,11 +24,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -43,9 +43,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md index d50e93edcc..a86663d6d1 100644 --- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md +++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md @@ -1,5 +1,104 @@ # @backstage/plugin-catalog-backend-module-msgraph +## 0.4.0-next.1 + +### Minor Changes + +- a145672f0f: Align `msgraph` plugin's entity provider config with other providers. **Deprecated** entity processor as well as previous config. + + You will see warning at the log output until you migrate to the new setup. + All deprecated parts will be removed eventually after giving some time to migrate. + + Please find information on how to migrate your current setup to the new one below. + + **Migration Guide:** + + There were two different way on how to use the msgraph plugin: processor or provider. + + Previous registration for the processor: + + ```typescript + // packages/backend/src/plugins/catalog.ts + builder.addProcessor( + MicrosoftGraphOrgReaderProcessor.fromConfig(env.config, { + logger: env.logger, + // [...] + }), + ); + ``` + + Previous registration when using the provider: + + ```typescript + // packages/backend/src/plugins/catalog.ts + builder.addEntityProvider( + MicrosoftGraphOrgEntityProvider.fromConfig(env.config, { + id: 'https://graph.microsoft.com/v1.0', + target: 'https://graph.microsoft.com/v1.0', + logger: env.logger, + schedule: env.scheduler.createScheduledTaskRunner({ + frequency: { minutes: 30 }, + timeout: { minutes: 3 }, + }), + // [...] + }), + ); + ``` + + Previous configuration as used for both: + + ```yaml + # app-config.yaml + catalog: + processors: + microsoftGraphOrg: + providers: + - target: https://graph.microsoft.com/v1.0 + # [...] + ``` + + **Replacement:** + + Please check https://github.com/backstage/backstage/blob/master/plugins/catalog-backend-module-msgraph/README.md for the complete documentation of all configuration options (config as well as registration of the provider). + + ```yaml + # app-config.yaml + catalog: + providers: + microsoftGraphOrg: + # In case you used the deprecated configuration with the entity provider + # using the value of `target` will keep the same location key for all + providerId: # some stable ID which will be used as part of the location key for all ingested data + target: https://graph.microsoft.com/v1.0 + # [...] + ``` + + ```typescript + // packages/backend/src/plugins/catalog.ts + builder.addEntityProvider( + MicrosoftGraphOrgEntityProvider.fromConfig(env.config, { + logger: env.logger, + schedule: env.scheduler.createScheduledTaskRunner({ + frequency: { minutes: 30 }, + timeout: { minutes: 3 }, + }), + // [...] + }), + ); + ``` + + In case you've used multiple entity providers before + **and** you had different transformers for each of them + you can provide these directly at the one `fromConfig` call + by passing a Record with the provider ID as key. + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-tasks@0.3.3-next.2 + - @backstage/plugin-catalog-backend@1.2.1-next.2 + ## 0.3.4-next.0 ### Patch Changes diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index cf777d982c..ca33339c1d 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-msgraph", "description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph", - "version": "0.3.4-next.0", + "version": "0.4.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,10 +34,10 @@ }, "dependencies": { "@azure/msal-node": "^1.1.0", - "@backstage/backend-tasks": "^0.3.3-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/backend-tasks": "^0.3.3-next.2", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", - "@backstage/plugin-catalog-backend": "^1.2.1-next.1", + "@backstage/plugin-catalog-backend": "^1.2.1-next.2", "@microsoft/microsoft-graph-types": "^2.6.0", "@types/node-fetch": "^2.5.12", "lodash": "^4.17.21", @@ -48,9 +48,9 @@ "qs": "^6.9.4" }, "devDependencies": { - "@backstage/backend-common": "^0.14.1-next.1", - "@backstage/backend-test-utils": "^0.1.26-next.1", - "@backstage/cli": "^0.18.0-next.1", + "@backstage/backend-common": "^0.14.1-next.2", + "@backstage/backend-test-utils": "^0.1.26-next.2", + "@backstage/cli": "^0.18.0-next.2", "@types/lodash": "^4.14.151", "msw": "^0.42.0" }, diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md index d98f5a95d0..657238efda 100644 --- a/plugins/catalog-backend-module-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-openapi +## 0.1.0-next.1 + +### Patch Changes + +- 4881dc4c84: Updated dependency `openapi-types` to `^12.0.0`. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + - @backstage/plugin-catalog-backend@1.2.1-next.2 + - @backstage/integration@1.2.2-next.2 + ## 0.1.0-next.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index 306117075c..0b9c24369c 100644 --- a/plugins/catalog-backend-module-openapi/package.json +++ b/plugins/catalog-backend-module-openapi/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-openapi", "description": "A Backstage catalog backend module that helps with OpenAPI specifications", - "version": "0.1.0-next.0", + "version": "0.1.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,17 +34,17 @@ }, "dependencies": { "@apidevtools/swagger-parser": "^10.1.0", - "@backstage/backend-common": "^0.14.1-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/backend-common": "^0.14.1-next.2", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", - "@backstage/integration": "^1.2.2-next.1", - "@backstage/plugin-catalog-backend": "^1.2.1-next.1", + "@backstage/integration": "^1.2.2-next.2", + "@backstage/plugin-catalog-backend": "^1.2.1-next.2", "winston": "^3.2.1", "yaml": "^2.1.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.26-next.1", - "@backstage/cli": "^0.18.0-next.1", + "@backstage/backend-test-utils": "^0.1.26-next.2", + "@backstage/cli": "^0.18.0-next.2", "openapi-types": "^12.0.0" }, "files": [ diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index 7d58cfda6e..a228308681 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-catalog-backend +## 1.2.1-next.2 + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + - @backstage/integration@1.2.2-next.2 + ## 1.2.1-next.1 ### Patch Changes diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 71608c4eb3..59870f1a6f 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend", "description": "The Backstage backend plugin that provides the Backstage catalog", - "version": "1.2.1-next.1", + "version": "1.2.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,12 +34,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-common": "^0.14.1-next.2", "@backstage/catalog-client": "^1.0.4-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0-next.0", - "@backstage/integration": "^1.2.2-next.1", + "@backstage/integration": "^1.2.2-next.2", "@backstage/plugin-catalog-common": "^1.0.4-next.0", "@backstage/plugin-permission-common": "^0.6.3-next.0", "@backstage/plugin-permission-node": "^0.6.3-next.1", @@ -68,8 +68,8 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.26-next.1", - "@backstage/cli": "^0.18.0-next.1", + "@backstage/backend-test-utils": "^0.1.26-next.2", + "@backstage/cli": "^0.18.0-next.2", "@backstage/plugin-permission-common": "^0.6.3-next.0", "@backstage/plugin-search-backend-node": "0.6.3-next.1", "@types/core-js": "^2.5.4", diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md index 235434ff66..f497b35628 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog-graph +## 0.2.19-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.2.19-next.1 ### Patch Changes diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index e2d8af6f46..c61d388f0b 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-graph", - "version": "0.2.19-next.1", + "version": "0.2.19-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,11 +25,11 @@ }, "dependencies": { "@backstage/catalog-client": "^1.0.4-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -45,10 +45,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", - "@backstage/plugin-catalog": "^1.3.1-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", + "@backstage/plugin-catalog": "^1.4.0-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@backstage/types": "^1.0.0", "@testing-library/jest-dom": "^5.10.1", diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index 6c306635e1..7de1bd72d0 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-catalog-import +## 0.8.10-next.2 + +### Patch Changes + +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/integration@1.2.2-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/integration-react@1.1.2-next.2 + ## 0.8.10-next.1 ### Patch Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index 0f804cddd4..12d12380ed 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-import", "description": "A Backstage plugin the helps you import entities into your catalog", - "version": "0.8.10-next.1", + "version": "0.8.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,14 +35,14 @@ }, "dependencies": { "@backstage/catalog-client": "^1.0.4-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/integration": "^1.2.2-next.1", - "@backstage/integration-react": "^1.1.2-next.1", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/integration": "^1.2.2-next.2", + "@backstage/integration-react": "^1.1.2-next.2", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -60,9 +60,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index fb5bcc81c3..0df99a1bb9 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,54 @@ # @backstage/plugin-catalog-react +## 1.1.2-next.2 + +### Patch Changes + +- be26d95141: Added new `EntityProcessingStatusPicker` that will filter for entities with orphans and/or errors. + + If you are using the default Catalog page this picker will be added automatically. For those who have customized their Catalog page you'll need to add this manually by doing something like this: + + ```diff + ... + import { + CatalogFilterLayout, + EntityTypePicker, + UserListPicker, + EntityTagPicker + + EntityProcessingStatusPicker, + } from '@backstage/plugin-catalog-react'; + ... + export const CustomCatalogPage = ({ + columns, + actions, + initiallySelectedFilter = 'owned', + }: CatalogPageProps) => { + return ( + ... + + + + + + + + + + + + + + + + ... + }; + ``` + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/integration@1.2.2-next.2 + ## 1.1.2-next.1 ### Patch Changes diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index a28b8219be..3f3ee5f402 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-react", "description": "A frontend library that helps other Backstage plugins interact with the catalog", - "version": "1.1.2-next.1", + "version": "1.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,15 +35,15 @@ }, "dependencies": { "@backstage/catalog-client": "^1.0.4-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/integration": "^1.2.2-next.1", + "@backstage/integration": "^1.2.2-next.2", "@backstage/plugin-catalog-common": "^1.0.4-next.0", "@backstage/plugin-permission-common": "^0.6.3-next.0", "@backstage/plugin-permission-react": "^0.4.3-next.0", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@backstage/types": "^1.0.0", "@backstage/version-bridge": "^1.0.1", "@material-ui/core": "^4.12.2", @@ -63,7 +63,7 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", "@backstage/plugin-catalog-common": "^1.0.4-next.0", "@backstage/plugin-scaffolder-common": "^1.1.2-next.0", diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 21e30517e2..5e00cd2661 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,65 @@ # @backstage/plugin-catalog +## 1.4.0-next.2 + +### Minor Changes + +- a274fe38b9: Add hidden title column to catalog and API table to enable filtering by title. + +### Patch Changes + +- 258057a4b9: Adding ability to customize the "unregister entity" menu item in the entity context menu on the entity page with options 'visible','hidden','disabled'.With this three new options, one can hide the "unregister entity" menu item from the list, disable or keep it enabled. + + The boolean input for "unregister entity" will be deprecated later in favour of the above three options. + +- 385389d23c: Updated to remove usage of the `bursts` object in the theme palette +- be26d95141: Added new `EntityProcessingStatusPicker` that will filter for entities with orphans and/or errors. + + If you are using the default Catalog page this picker will be added automatically. For those who have customized their Catalog page you'll need to add this manually by doing something like this: + + ```diff + ... + import { + CatalogFilterLayout, + EntityTypePicker, + UserListPicker, + EntityTagPicker + + EntityProcessingStatusPicker, + } from '@backstage/plugin-catalog-react'; + ... + export const CustomCatalogPage = ({ + columns, + actions, + initiallySelectedFilter = 'owned', + }: CatalogPageProps) => { + return ( + ... + + + + + + + + + + + + + + + + ... + }; + ``` + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/plugin-search-react@0.2.2-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/integration-react@1.1.2-next.2 + ## 1.3.1-next.1 ### Patch Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 0dd7836c02..a294e64d29 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog", "description": "The Backstage plugin for browsing the Backstage catalog", - "version": "1.3.1-next.1", + "version": "1.4.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,16 +35,16 @@ }, "dependencies": { "@backstage/catalog-client": "^1.0.4-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/integration-react": "^1.1.2-next.1", + "@backstage/integration-react": "^1.1.2-next.2", "@backstage/plugin-catalog-common": "^1.0.4-next.0", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", "@backstage/plugin-search-common": "^0.3.6-next.0", - "@backstage/plugin-search-react": "^0.2.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-search-react": "^0.2.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@backstage/types": "^1.0.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -61,9 +61,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/plugin-permission-react": "^0.4.3-next.0", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md index 2d5bee3a89..4df5655c52 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-circleci +## 0.3.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.3.7-next.1 ### Patch Changes diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index 3873b6fd03..d0fb16eae0 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-circleci", "description": "A Backstage plugin that integrates towards Circle CI", - "version": "0.3.7-next.1", + "version": "0.3.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,11 +35,11 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -55,9 +55,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index 6c0f361fdc..94b16aafdd 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-cloudbuild +## 0.3.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.3.7-next.1 ### Patch Changes diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index 874fb69017..418da8677a 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cloudbuild", "description": "A Backstage plugin that integrates towards Google Cloud Build", - "version": "0.3.7-next.1", + "version": "0.3.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,11 +34,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -52,9 +52,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/code-climate/CHANGELOG.md b/plugins/code-climate/CHANGELOG.md index c882f5a2c0..cd2e824758 100644 --- a/plugins/code-climate/CHANGELOG.md +++ b/plugins/code-climate/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-code-climate +## 0.1.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json index a9542e0f72..399f9d6d56 100644 --- a/plugins/code-climate/package.json +++ b/plugins/code-climate/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-code-climate", - "version": "0.1.7-next.1", + "version": "0.1.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,11 +23,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -40,8 +40,8 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/cli": "^0.18.0-next.2", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/code-coverage-backend/CHANGELOG.md b/plugins/code-coverage-backend/CHANGELOG.md index b813d32776..6fccd225cb 100644 --- a/plugins/code-coverage-backend/CHANGELOG.md +++ b/plugins/code-coverage-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-code-coverage-backend +## 0.1.32-next.2 + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + - @backstage/integration@1.2.2-next.2 + ## 0.1.32-next.1 ### Patch Changes diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json index f27090d8ef..3fa632d709 100644 --- a/plugins/code-coverage-backend/package.json +++ b/plugins/code-coverage-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage-backend", "description": "A Backstage backend plugin that helps you keep track of your code coverage", - "version": "0.1.32-next.1", + "version": "0.1.32-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,12 +23,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-common": "^0.14.1-next.2", "@backstage/catalog-client": "^1.0.4-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0-next.0", - "@backstage/integration": "^1.2.2-next.1", + "@backstage/integration": "^1.2.2-next.2", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -39,7 +39,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@types/express-xml-bodyparser": "^0.3.2", "@types/supertest": "^2.0.8", "msw": "^0.42.0", diff --git a/plugins/code-coverage/CHANGELOG.md b/plugins/code-coverage/CHANGELOG.md index b3199f207b..b2b64aa993 100644 --- a/plugins/code-coverage/CHANGELOG.md +++ b/plugins/code-coverage/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-code-coverage +## 0.1.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.1.34-next.1 ### Patch Changes diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index b7d7723277..98e5905e2e 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage", "description": "A Backstage plugin that helps you keep track of your code coverage", - "version": "0.1.34-next.1", + "version": "0.1.34-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,13 +24,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -46,9 +46,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/codescene/CHANGELOG.md b/plugins/codescene/CHANGELOG.md index 4f0944ff34..e3f98725c3 100644 --- a/plugins/codescene/CHANGELOG.md +++ b/plugins/codescene/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-codescene +## 0.1.2-next.2 + +### Patch Changes + +- 15201b1032: Updated dependency `rc-progress` to `3.4.0`. +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index c21c1e24be..71cd460d49 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-codescene", - "version": "0.1.2-next.1", + "version": "0.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,10 +23,10 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.9.10", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "^4.0.0-alpha.57", @@ -38,9 +38,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index 99a23391d6..b6a43ed858 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-config-schema +## 0.1.30-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + ## 0.1.30-next.1 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index 59b8780987..0a7a0a1e7a 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-config-schema", "description": "A Backstage plugin that lets you browse the configuration schema of your app", - "version": "0.1.30-next.1", + "version": "0.1.30-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,10 +25,10 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@backstage/types": "^1.0.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -41,9 +41,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/cost-insights-common/CHANGELOG.md b/plugins/cost-insights-common/CHANGELOG.md index d958aaa41b..0a55b342fc 100644 --- a/plugins/cost-insights-common/CHANGELOG.md +++ b/plugins/cost-insights-common/CHANGELOG.md @@ -1 +1,7 @@ # @backstage/plugin-cost-insights-common + +## 0.1.0-next.0 + +### Minor Changes + +- 81dd5ea989: Introduces a new isomorphic @backstage/plugin-cost-insight-common package to contain shared types across all other cost insights packages and modules. diff --git a/plugins/cost-insights-common/package.json b/plugins/cost-insights-common/package.json index c15f063fd2..2918462e09 100644 --- a/plugins/cost-insights-common/package.json +++ b/plugins/cost-insights-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cost-insights-common", "description": "Common functionalities for the cost-insights plugin", - "version": "0.0.0", + "version": "0.1.0-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,7 +34,7 @@ }, "dependencies": {}, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1" + "@backstage/cli": "^0.18.0-next.2" }, "files": [ "dist" diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md index 734cf0cfa0..a5824d1cc9 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-cost-insights +## 0.11.29-next.2 + +### Patch Changes + +- 3e032a5de2: Move cost-insights data specific API types (non react) into an @backstage/plugin-cost-insights-common + isomorphic package. This allows these types to be shared in any backend packages or other cost-insight + modules. +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/plugin-cost-insights-common@0.1.0-next.0 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + ## 0.11.29-next.1 ### Patch Changes diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index d7a04eddbc..6c769705ef 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cost-insights", "description": "A Backstage plugin that helps you keep track of your cloud spend", - "version": "0.11.29-next.1", + "version": "0.11.29-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,12 +34,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-cost-insights-common": "^0.0.0", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-cost-insights-common": "^0.1.0-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -61,9 +61,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/dynatrace/CHANGELOG.md b/plugins/dynatrace/CHANGELOG.md index d6cb7f6f56..ffe12d4991 100644 --- a/plugins/dynatrace/CHANGELOG.md +++ b/plugins/dynatrace/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-dynatrace +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json index 4983e7bf83..ed7d454b0e 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-dynatrace", - "version": "0.1.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,10 +22,10 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -37,9 +37,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index 64c2ec4995..e73d0d6474 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/plugin-todo-list +## 1.0.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + ## 1.0.3-next.1 ### Patch Changes diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index 68d6e89d56..b65d32afc9 100644 --- a/plugins/example-todo-list/package.json +++ b/plugins/example-todo-list/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list", - "version": "1.0.3-next.1", + "version": "1.0.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,9 +24,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -36,9 +36,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md index 70ae5ba3a4..ecb1209c85 100644 --- a/plugins/explore/CHANGELOG.md +++ b/plugins/explore/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-explore +## 0.3.38-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.3.38-next.1 ### Patch Changes diff --git a/plugins/explore/package.json b/plugins/explore/package.json index c8f8be82f0..ff171fcd5e 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore", "description": "A Backstage plugin for building an exploration page of your software ecosystem", - "version": "0.3.38-next.1", + "version": "0.3.38-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,12 +34,12 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", "@backstage/plugin-explore-react": "^0.0.18", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -53,9 +53,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/firehydrant/CHANGELOG.md b/plugins/firehydrant/CHANGELOG.md index 09b9373dbe..c03b08e828 100644 --- a/plugins/firehydrant/CHANGELOG.md +++ b/plugins/firehydrant/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-firehydrant +## 0.1.24-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.1.24-next.1 ### Patch Changes diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json index 2ad2366295..3ddc3bee00 100644 --- a/plugins/firehydrant/package.json +++ b/plugins/firehydrant/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-firehydrant", "description": "A Backstage plugin that integrates towards FireHydrant", - "version": "0.1.24-next.1", + "version": "0.1.24-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,10 +25,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -39,9 +39,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/fossa/CHANGELOG.md b/plugins/fossa/CHANGELOG.md index 8c361a38f3..99d6445627 100644 --- a/plugins/fossa/CHANGELOG.md +++ b/plugins/fossa/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-fossa +## 0.2.39-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.2.39-next.1 ### Patch Changes diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index 876de5965c..7a3dedf7f9 100644 --- a/plugins/fossa/package.json +++ b/plugins/fossa/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-fossa", "description": "A Backstage plugin that integrates towards FOSSA", - "version": "0.2.39-next.1", + "version": "0.2.39-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,12 +35,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -53,9 +53,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/gcalendar/CHANGELOG.md b/plugins/gcalendar/CHANGELOG.md index bb548b86cb..12e37176a7 100644 --- a/plugins/gcalendar/CHANGELOG.md +++ b/plugins/gcalendar/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-gcalendar +## 0.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + ## 0.3.3-next.1 ### Patch Changes diff --git a/plugins/gcalendar/package.json b/plugins/gcalendar/package.json index 9acc0cb3f5..cf7ee0cfbb 100644 --- a/plugins/gcalendar/package.json +++ b/plugins/gcalendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-gcalendar", - "version": "0.3.3-next.1", + "version": "0.3.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,10 +22,10 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -43,9 +43,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/gcp-projects/CHANGELOG.md b/plugins/gcp-projects/CHANGELOG.md index 24a8fbe415..f2bedb646f 100644 --- a/plugins/gcp-projects/CHANGELOG.md +++ b/plugins/gcp-projects/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-gcp-projects +## 0.3.26-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + ## 0.3.26-next.1 ### Patch Changes diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index 3e3a9067aa..3b5dfd6d52 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gcp-projects", "description": "A Backstage plugin that helps you manage projects in GCP", - "version": "0.3.26-next.1", + "version": "0.3.26-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,9 +34,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -47,9 +47,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/git-release-manager/CHANGELOG.md b/plugins/git-release-manager/CHANGELOG.md index 13e16cd353..e617ca7342 100644 --- a/plugins/git-release-manager/CHANGELOG.md +++ b/plugins/git-release-manager/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-git-release-manager +## 0.3.20-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/integration@1.2.2-next.2 + ## 0.3.20-next.1 ### Patch Changes diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index b25a95a156..4424954a79 100644 --- a/plugins/git-release-manager/package.json +++ b/plugins/git-release-manager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-git-release-manager", "description": "A Backstage plugin that helps you manage releases in git", - "version": "0.3.20-next.1", + "version": "0.3.20-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,10 +24,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/integration": "^1.2.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/integration": "^1.2.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -43,9 +43,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md index ab347c1b77..de2a693116 100644 --- a/plugins/github-actions/CHANGELOG.md +++ b/plugins/github-actions/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-github-actions +## 0.5.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/integration@1.2.2-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.5.7-next.1 ### Patch Changes diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index 989847df6e..79b28f4924 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-actions", "description": "A Backstage plugin that integrates towards GitHub Actions", - "version": "0.5.7-next.1", + "version": "0.5.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,12 +36,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/integration": "^1.2.2-next.1", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/integration": "^1.2.2-next.2", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -55,9 +55,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md index 3dc6a89f93..cd0542d5cf 100644 --- a/plugins/github-deployments/CHANGELOG.md +++ b/plugins/github-deployments/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-github-deployments +## 0.1.38-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/integration@1.2.2-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/integration-react@1.1.2-next.2 + ## 0.1.38-next.1 ### Patch Changes diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index 5fc366522e..b839f27ae7 100644 --- a/plugins/github-deployments/package.json +++ b/plugins/github-deployments/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-deployments", "description": "A Backstage plugin that integrates towards GitHub Deployments", - "version": "0.1.38-next.1", + "version": "0.1.38-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,14 +24,14 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/integration": "^1.2.2-next.1", - "@backstage/integration-react": "^1.1.2-next.1", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/integration": "^1.2.2-next.2", + "@backstage/integration-react": "^1.1.2-next.2", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -43,9 +43,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/github-pull-requests-board/CHANGELOG.md b/plugins/github-pull-requests-board/CHANGELOG.md index 4e8ba70b9a..91faf82d07 100644 --- a/plugins/github-pull-requests-board/CHANGELOG.md +++ b/plugins/github-pull-requests-board/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-github-pull-requests-board +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/integration@1.2.2-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index 77caa4129f..193cad018b 100644 --- a/plugins/github-pull-requests-board/package.json +++ b/plugins/github-pull-requests-board/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-pull-requests-board", "description": "A Backstage plugin that allows you to see all open Pull Requests for all the repositories owned by your team", - "version": "0.1.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,12 +35,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/integration": "^1.2.2-next.1", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/integration": "^1.2.2-next.2", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -49,8 +49,8 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/cli": "^0.18.0-next.2", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/gitops-profiles/CHANGELOG.md b/plugins/gitops-profiles/CHANGELOG.md index 7ad6421f53..0c47ffc99f 100644 --- a/plugins/gitops-profiles/CHANGELOG.md +++ b/plugins/gitops-profiles/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-gitops-profiles +## 0.3.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + ## 0.3.25-next.1 ### Patch Changes diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index 5a60b9c68e..adfb30bb8f 100644 --- a/plugins/gitops-profiles/package.json +++ b/plugins/gitops-profiles/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gitops-profiles", "description": "A Backstage plugin that helps you manage GitOps profiles", - "version": "0.3.25-next.1", + "version": "0.3.25-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,9 +35,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -48,9 +48,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/gocd/CHANGELOG.md b/plugins/gocd/CHANGELOG.md index 9a1f0c40c7..692a789447 100644 --- a/plugins/gocd/CHANGELOG.md +++ b/plugins/gocd/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-gocd +## 0.1.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.1.13-next.1 ### Patch Changes diff --git a/plugins/gocd/package.json b/plugins/gocd/package.json index a2a8f99983..e4774eff87 100644 --- a/plugins/gocd/package.json +++ b/plugins/gocd/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gocd", "description": "A Backstage plugin that integrates towards GoCD", - "version": "0.1.13-next.1", + "version": "0.1.13-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,12 +31,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -49,9 +49,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/graphiql/CHANGELOG.md b/plugins/graphiql/CHANGELOG.md index ca98c30b8c..c034cef2b5 100644 --- a/plugins/graphiql/CHANGELOG.md +++ b/plugins/graphiql/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-graphiql +## 0.2.39-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + ## 0.2.39-next.1 ### Patch Changes diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index 7049ca1317..cd0ab9a0b8 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphiql", "description": "Backstage plugin for browsing GraphQL APIs", - "version": "0.2.39-next.1", + "version": "0.2.39-next.2", "private": false, "publishConfig": { "access": "public", @@ -34,9 +34,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -49,9 +49,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md index f185b92193..bb2e5d7405 100644 --- a/plugins/home/CHANGELOG.md +++ b/plugins/home/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-home +## 0.4.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/plugin-stack-overflow@0.1.3-next.2 + ## 0.4.23-next.1 ### Patch Changes diff --git a/plugins/home/package.json b/plugins/home/package.json index 57fe69590a..e402a9c636 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-home", "description": "A Backstage plugin that helps you build a home page", - "version": "0.4.23-next.1", + "version": "0.4.23-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,13 +34,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/plugin-stack-overflow": "^0.1.3-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/plugin-stack-overflow": "^0.1.3-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -53,9 +53,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/ilert/CHANGELOG.md b/plugins/ilert/CHANGELOG.md index bc5bd32d10..f24f1ede11 100644 --- a/plugins/ilert/CHANGELOG.md +++ b/plugins/ilert/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-ilert +## 0.1.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.1.33-next.1 ### Patch Changes diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index 8a14e8f3de..201d2c7b25 100644 --- a/plugins/ilert/package.json +++ b/plugins/ilert/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-ilert", "description": "A Backstage plugin that integrates towards iLert", - "version": "0.1.33-next.1", + "version": "0.1.33-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,12 +24,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@date-io/luxon": "1.x", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -43,9 +43,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/jenkins-backend/CHANGELOG.md b/plugins/jenkins-backend/CHANGELOG.md index 6a326c10cc..c96b147b18 100644 --- a/plugins/jenkins-backend/CHANGELOG.md +++ b/plugins/jenkins-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-jenkins-backend +## 0.1.24-next.2 + +### Patch Changes + +- 8747824221: feature: added support for multiple branches to the `JenkinsApi` +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + ## 0.1.24-next.1 ### Patch Changes diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index 948907a1e2..c662bc90ab 100644 --- a/plugins/jenkins-backend/package.json +++ b/plugins/jenkins-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins-backend", "description": "A Backstage backend plugin that integrates towards Jenkins", - "version": "0.1.24-next.1", + "version": "0.1.24-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,9 +25,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-common": "^0.14.1-next.2", "@backstage/catalog-client": "^1.0.4-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0-next.0", "@backstage/plugin-auth-node": "^0.2.3-next.1", @@ -42,7 +42,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@types/jenkins": "^0.23.1", "@types/supertest": "^2.0.8", "msw": "^0.42.0", diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md index 65680ea7c4..a55f8a3d4b 100644 --- a/plugins/jenkins/CHANGELOG.md +++ b/plugins/jenkins/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-jenkins +## 0.7.6-next.2 + +### Patch Changes + +- 8747824221: feature: added support for multiple branches to the `JenkinsApi` +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.7.6-next.1 ### Patch Changes diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index e7a20b9046..afcce126f0 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins", "description": "A Backstage plugin that integrates towards Jenkins", - "version": "0.7.6-next.1", + "version": "0.7.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,13 +35,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", "@backstage/plugin-jenkins-common": "^0.1.6-next.0", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -54,9 +54,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/kafka-backend/CHANGELOG.md b/plugins/kafka-backend/CHANGELOG.md index ef7514bdee..5a35d5a504 100644 --- a/plugins/kafka-backend/CHANGELOG.md +++ b/plugins/kafka-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-kafka-backend +## 0.2.27-next.2 + +### Patch Changes + +- 8751667541: Updated dependency `kafkajs` to `^2.0.0`. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + ## 0.2.27-next.1 ### Patch Changes diff --git a/plugins/kafka-backend/package.json b/plugins/kafka-backend/package.json index 4315e45853..5a666ee6df 100644 --- a/plugins/kafka-backend/package.json +++ b/plugins/kafka-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka-backend", "description": "A Backstage backend plugin that integrates towards Kafka", - "version": "0.2.27-next.1", + "version": "0.2.27-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,8 +35,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.1-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/backend-common": "^0.14.1-next.2", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0-next.0", "@types/express": "^4.17.6", @@ -47,7 +47,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@types/jest-when": "^3.5.0", "@types/lodash": "^4.14.151", "jest-when": "^3.1.0", diff --git a/plugins/kafka/CHANGELOG.md b/plugins/kafka/CHANGELOG.md index b7139b7e8c..7f5db4402c 100644 --- a/plugins/kafka/CHANGELOG.md +++ b/plugins/kafka/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-kafka +## 0.3.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.3.7-next.1 ### Patch Changes diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index 3da853574f..558f6fcc87 100644 --- a/plugins/kafka/package.json +++ b/plugins/kafka/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka", "description": "A Backstage plugin that integrates towards Kafka", - "version": "0.3.7-next.1", + "version": "0.3.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,11 +24,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -39,9 +39,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index e20634eb16..b11a5b045f 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-kubernetes-backend +## 0.7.0-next.2 + +### Patch Changes + +- 60e5f9fe68: Fixed the lack of `limitranges` as part of the Default Objects to fetch from the kubernetes api +- Updated dependencies + - @backstage/plugin-kubernetes-common@0.4.0-next.1 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + ## 0.7.0-next.1 ### Patch Changes diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 048d025bff..e7d8d2c3c0 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-backend", "description": "A Backstage backend plugin that integrates towards Kubernetes", - "version": "0.7.0-next.1", + "version": "0.7.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,11 +36,11 @@ }, "dependencies": { "@azure/identity": "^2.0.4", - "@backstage/backend-common": "^0.14.1-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/backend-common": "^0.14.1-next.2", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0-next.0", - "@backstage/plugin-kubernetes-common": "^0.4.0-next.0", + "@backstage/plugin-kubernetes-common": "^0.4.0-next.1", "@google-cloud/container": "^4.0.0", "@kubernetes/client-node": "^0.16.0", "@types/express": "^4.17.6", @@ -61,7 +61,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@types/aws4": "^1.5.1", "aws-sdk-mock": "^5.2.1", "supertest": "^6.1.3" diff --git a/plugins/kubernetes-common/CHANGELOG.md b/plugins/kubernetes-common/CHANGELOG.md index 560f700be0..dd1feff82e 100644 --- a/plugins/kubernetes-common/CHANGELOG.md +++ b/plugins/kubernetes-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-kubernetes-common +## 0.4.0-next.1 + +### Patch Changes + +- 60e5f9fe68: Fixed the lack of `limitranges` as part of the Default Objects to fetch from the kubernetes api +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + ## 0.4.0-next.0 ### Minor Changes diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json index e109139f74..9e3ff7299e 100644 --- a/plugins/kubernetes-common/package.json +++ b/plugins/kubernetes-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-common", "description": "Common functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend plugin", - "version": "0.4.0-next.0", + "version": "0.4.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -38,11 +38,11 @@ "url": "https://github.com/backstage/backstage/issues" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@kubernetes/client-node": "^0.16.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1" + "@backstage/cli": "^0.18.0-next.2" }, "jest": { "roots": [ diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index 4312cf5776..dc44dffad4 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-kubernetes +## 0.6.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/plugin-kubernetes-common@0.4.0-next.1 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.6.7-next.1 ### Patch Changes diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index 35e685382d..3ec137654d 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes", "description": "A Backstage plugin that integrates towards Kubernetes", - "version": "0.6.7-next.1", + "version": "0.6.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,13 +34,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/plugin-kubernetes-common": "^0.4.0-next.0", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/plugin-kubernetes-common": "^0.4.0-next.1", + "@backstage/theme": "^0.2.16-next.1", "@kubernetes/client-node": "^0.16.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -57,9 +57,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/lighthouse/CHANGELOG.md b/plugins/lighthouse/CHANGELOG.md index 837bf0c598..ded56ce2da 100644 --- a/plugins/lighthouse/CHANGELOG.md +++ b/plugins/lighthouse/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-lighthouse +## 0.3.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.3.7-next.1 ### Patch Changes diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index 8a1f484a35..fe56c08b5f 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse", "description": "A Backstage plugin that integrates towards Lighthouse", - "version": "0.3.7-next.1", + "version": "0.3.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,12 +35,12 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -51,9 +51,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/newrelic-dashboard/CHANGELOG.md b/plugins/newrelic-dashboard/CHANGELOG.md index ea33fd1444..ce7fb18e5c 100644 --- a/plugins/newrelic-dashboard/CHANGELOG.md +++ b/plugins/newrelic-dashboard/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-newrelic-dashboard +## 0.1.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.1.15-next.1 ### Patch Changes diff --git a/plugins/newrelic-dashboard/package.json b/plugins/newrelic-dashboard/package.json index b488db090c..a0a21fcf9c 100644 --- a/plugins/newrelic-dashboard/package.json +++ b/plugins/newrelic-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-newrelic-dashboard", - "version": "0.1.15-next.1", + "version": "0.1.15-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,19 +23,19 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/cli": "^0.18.0-next.2", + "@backstage/dev-utils": "^1.0.4-next.2", "@testing-library/jest-dom": "^5.10.1", "@types/react": "^16.13.1 || ^17.0.0", "cross-fetch": "^3.1.5" diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md index 6134eee42e..f3ff482fd8 100644 --- a/plugins/newrelic/CHANGELOG.md +++ b/plugins/newrelic/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-newrelic +## 0.3.25-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + ## 0.3.25-next.1 ### Patch Changes diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index bb5a4d14ef..c36a2bf063 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-newrelic", "description": "A Backstage plugin that integrates towards New Relic", - "version": "0.3.25-next.1", + "version": "0.3.25-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,9 +35,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -47,9 +47,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index 5cbc78f41c..f21231dc81 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-org +## 0.5.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.5.7-next.1 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index f6927f7a28..e1dea81951 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-org", "description": "A Backstage plugin that helps you create entity pages for your organization", - "version": "0.5.7-next.1", + "version": "0.5.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -29,11 +29,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -49,9 +49,9 @@ }, "devDependencies": { "@backstage/catalog-client": "^1.0.4-next.1", - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md index 43254df1ad..929a4a3ed8 100644 --- a/plugins/pagerduty/CHANGELOG.md +++ b/plugins/pagerduty/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-pagerduty +## 0.5.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.5.0-next.1 ### Patch Changes diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index 63e6d0b951..1c93732ddb 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-pagerduty", "description": "A Backstage plugin that integrates towards PagerDuty", - "version": "0.5.0-next.1", + "version": "0.5.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,12 +34,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -53,9 +53,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/periskop/CHANGELOG.md b/plugins/periskop/CHANGELOG.md index 0a167ae1be..db6854741f 100644 --- a/plugins/periskop/CHANGELOG.md +++ b/plugins/periskop/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-periskop +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json index 5918b0c45b..bd804ff676 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop", - "version": "0.1.5-next.1", + "version": "0.1.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,12 +25,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -42,9 +42,9 @@ "react-dom": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md index 44baedce85..367b7a07f3 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-rollbar +## 0.4.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.4.7-next.1 ### Patch Changes diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index 9e6079c548..56d9d39006 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar", "description": "A Backstage plugin that integrates towards Rollbar", - "version": "0.4.7-next.1", + "version": "0.4.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,11 +35,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -53,9 +53,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index b2ac690d5c..ed97db5617 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-scaffolder-backend +## 1.4.0-next.2 + +### Minor Changes + +- 4baf8a4ece: Update GitLab Merge Request Action to allow source branch to be deleted +- 2db07887cb: Added two new scaffolder actions: `github:repo:create` and `github:repo:push` + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + - @backstage/plugin-catalog-backend@1.2.1-next.2 + - @backstage/integration@1.2.2-next.2 + ## 1.4.0-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 92adda6d37..a7b9e870d8 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend", "description": "The Backstage backend plugin that helps you create new things", - "version": "1.4.0-next.1", + "version": "1.4.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,13 +34,13 @@ "build:assets": "node scripts/build-nunjucks.js" }, "dependencies": { - "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-common": "^0.14.1-next.2", "@backstage/catalog-client": "^1.0.4-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0-next.0", - "@backstage/integration": "^1.2.2-next.1", - "@backstage/plugin-catalog-backend": "^1.2.1-next.1", + "@backstage/integration": "^1.2.2-next.2", + "@backstage/plugin-catalog-backend": "^1.2.1-next.2", "@backstage/plugin-scaffolder-common": "^1.1.2-next.0", "@backstage/types": "^1.0.0", "@gitbeaker/core": "^35.6.0", @@ -76,8 +76,8 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.26-next.1", - "@backstage/cli": "^0.18.0-next.1", + "@backstage/backend-test-utils": "^0.1.26-next.2", + "@backstage/cli": "^0.18.0-next.2", "@types/command-exists": "^1.2.0", "@types/fs-extra": "^9.0.1", "@types/git-url-parse": "^9.0.0", diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index 7492ceb582..a8a606c73d 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-scaffolder +## 1.4.0-next.2 + +### Minor Changes + +- d8eb82f447: Add `allowedRepos` `ui:option` to `RepoUrlPicker` component, and move `repoName` field to own component + +### Patch Changes + +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +- 14146703e5: Add `allowArbitraryValues` to `ui:options` in `OwnedEntityPicker`, similar to `allowArbitraryValues` in `EntityPicker` +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/integration@1.2.2-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/integration-react@1.1.2-next.2 + ## 1.4.0-next.1 ### Patch Changes diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 6087a730f4..070b45c78c 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder", "description": "The Backstage plugin that helps you create new things", - "version": "1.4.0-next.1", + "version": "1.4.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,18 +36,18 @@ }, "dependencies": { "@backstage/catalog-client": "^1.0.4-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/integration": "^1.2.2-next.1", - "@backstage/integration-react": "^1.1.2-next.1", + "@backstage/integration": "^1.2.2-next.2", + "@backstage/integration-react": "^1.1.2-next.2", "@backstage/plugin-catalog-common": "^1.0.4-next.0", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", "@backstage/plugin-permission-react": "^0.4.3-next.0", "@backstage/plugin-scaffolder-common": "^1.1.2-next.0", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@backstage/types": "^1.0.0", "@codemirror/language": "^6.0.0", "@codemirror/legacy-modes": "^6.1.0", @@ -80,10 +80,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", - "@backstage/plugin-catalog": "^1.3.1-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", + "@backstage/plugin-catalog": "^1.4.0-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md index 370339d9af..fdbf4d01e4 100644 --- a/plugins/search-backend-module-pg/CHANGELOG.md +++ b/plugins/search-backend-module-pg/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-search-backend-module-pg +## 0.3.5-next.2 + +### Patch Changes + +- 423e3d8e95: **DEPRECATED**: `PgSearchEngine` static `from` has been deprecated and will be removed in a future release. Use static `fromConfig` method to instantiate. + + Added support for highlighting matched terms in search result data + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- Updated dependencies + - @backstage/backend-common@0.14.1-next.2 + ## 0.3.5-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index 16367b9ef1..9e58859449 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-pg", "description": "A module for the search backend that implements search using PostgreSQL", - "version": "0.3.5-next.1", + "version": "0.3.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,7 +23,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-common": "^0.14.1-next.2", "@backstage/config": "^1.0.1", "@backstage/plugin-search-backend-node": "^0.6.3-next.1", "@backstage/plugin-search-common": "^0.3.6-next.0", @@ -32,8 +32,8 @@ "uuid": "^8.3.2" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.26-next.1", - "@backstage/cli": "^0.18.0-next.1" + "@backstage/backend-test-utils": "^0.1.26-next.2", + "@backstage/cli": "^0.18.0-next.2" }, "files": [ "dist", diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md index 6ae54e736a..685aa56a86 100644 --- a/plugins/search-react/CHANGELOG.md +++ b/plugins/search-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-search-react +## 0.2.2-next.2 + +### Patch Changes + +- 60408ca9d4: Fix search pagination to reset page cursor also when a term is cleared. +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + ## 0.2.2-next.1 ### Patch Changes diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json index 2cc8782758..3e3b362919 100644 --- a/plugins/search-react/package.json +++ b/plugins/search-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-react", - "version": "0.2.2-next.1", + "version": "0.2.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,10 +32,10 @@ }, "dependencies": { "@backstage/plugin-search-common": "^0.3.6-next.0", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/version-bridge": "^1.0.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@backstage/types": "^1.0.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md index 0c7f749f82..707ba1cab7 100644 --- a/plugins/search/CHANGELOG.md +++ b/plugins/search/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-search +## 0.9.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/plugin-search-react@0.2.2-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.9.1-next.1 ### Patch Changes diff --git a/plugins/search/package.json b/plugins/search/package.json index e0fb5447f7..a558166fb0 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search", "description": "The Backstage plugin that provides your backstage app with search", - "version": "0.9.1-next.1", + "version": "0.9.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,15 +33,15 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", "@backstage/plugin-search-common": "^0.3.6-next.0", - "@backstage/plugin-search-react": "^0.2.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-search-react": "^0.2.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@backstage/types": "^1.0.0", "@backstage/version-bridge": "^1.0.1", "@material-ui/core": "^4.12.2", @@ -57,9 +57,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md index eed3d21aa7..28903311c5 100644 --- a/plugins/sentry/CHANGELOG.md +++ b/plugins/sentry/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-sentry +## 0.3.45-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.3.45-next.1 ### Patch Changes diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index f40a8d8178..639f9c7dbe 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sentry", "description": "A Backstage plugin that integrates towards Sentry", - "version": "0.3.45-next.1", + "version": "0.3.45-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,11 +35,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-table/core": "^3.1.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -53,9 +53,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/shortcuts/CHANGELOG.md b/plugins/shortcuts/CHANGELOG.md index d65296efd7..c32e53638c 100644 --- a/plugins/shortcuts/CHANGELOG.md +++ b/plugins/shortcuts/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-shortcuts +## 0.2.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + ## 0.2.8-next.1 ### Patch Changes diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index 54b3867df7..b72d20e402 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-shortcuts", "description": "A Backstage plugin that provides a shortcuts feature to the sidebar", - "version": "0.2.8-next.1", + "version": "0.2.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,9 +24,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@backstage/types": "^1.0.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -42,9 +42,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md index 9a4f9aa752..072979d537 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-sonarqube +## 0.3.7-next.2 + +### Patch Changes + +- 15201b1032: Updated dependency `rc-progress` to `3.4.0`. +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.3.7-next.1 ### Patch Changes diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index 4aabc80bab..39c9c6b915 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sonarqube", "description": "", - "version": "0.3.7-next.1", + "version": "0.3.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,11 +36,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -53,9 +53,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md index 87a26d4d58..c48e6acab2 100644 --- a/plugins/splunk-on-call/CHANGELOG.md +++ b/plugins/splunk-on-call/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-splunk-on-call +## 0.3.31-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.3.31-next.1 ### Patch Changes diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index 46443585cc..11a4495723 100644 --- a/plugins/splunk-on-call/package.json +++ b/plugins/splunk-on-call/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-splunk-on-call", "description": "A Backstage plugin that integrates towards Splunk On-Call", - "version": "0.3.31-next.1", + "version": "0.3.31-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,11 +34,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -51,9 +51,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/stack-overflow/CHANGELOG.md b/plugins/stack-overflow/CHANGELOG.md index 097d8507a2..bbba0a273d 100644 --- a/plugins/stack-overflow/CHANGELOG.md +++ b/plugins/stack-overflow/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-stack-overflow +## 0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-home@0.4.23-next.2 + ## 0.1.3-next.1 ### Patch Changes diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json index f08db4618c..917e9e23d9 100644 --- a/plugins/stack-overflow/package.json +++ b/plugins/stack-overflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow", - "version": "0.1.3-next.1", + "version": "0.1.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,11 +24,11 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/plugin-home": "^0.4.23-next.1", + "@backstage/plugin-home": "^0.4.23-next.2", "@backstage/plugin-search-common": "^0.3.6-next.0", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@testing-library/jest-dom": "^5.10.1", @@ -42,9 +42,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/tech-insights-backend/CHANGELOG.md b/plugins/tech-insights-backend/CHANGELOG.md index ff5a703be2..9a08f51d33 100644 --- a/plugins/tech-insights-backend/CHANGELOG.md +++ b/plugins/tech-insights-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-tech-insights-backend +## 0.5.0-next.2 + +### Minor Changes + +- 818fa28d71: Allow FactRetrieverRegistry to be injected into buildTechInsightsContext so that we can override default registry implementation. + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + - @backstage/backend-tasks@0.3.3-next.2 + ## 0.4.2-next.1 ### Patch Changes diff --git a/plugins/tech-insights-backend/package.json b/plugins/tech-insights-backend/package.json index 6ac9054a99..0ecdb6b6e8 100644 --- a/plugins/tech-insights-backend/package.json +++ b/plugins/tech-insights-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend", - "version": "0.4.2-next.1", + "version": "0.5.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,10 +34,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.1-next.1", - "@backstage/backend-tasks": "^0.3.3-next.1", + "@backstage/backend-common": "^0.14.1-next.2", + "@backstage/backend-tasks": "^0.3.3-next.2", "@backstage/catalog-client": "^1.0.4-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0-next.0", "@backstage/plugin-tech-insights-common": "^0.2.4", @@ -54,8 +54,8 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.26-next.1", - "@backstage/cli": "^0.18.0-next.1", + "@backstage/backend-test-utils": "^0.1.26-next.2", + "@backstage/cli": "^0.18.0-next.2", "@types/supertest": "^2.0.8", "@types/semver": "^7.3.8", "supertest": "^6.1.3", diff --git a/plugins/tech-insights/CHANGELOG.md b/plugins/tech-insights/CHANGELOG.md index 1948f639fe..68e60fd0d1 100644 --- a/plugins/tech-insights/CHANGELOG.md +++ b/plugins/tech-insights/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-tech-insights +## 0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.2.3-next.1 ### Patch Changes diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json index 6b628b04d7..de2e560a9d 100644 --- a/plugins/tech-insights/package.json +++ b/plugins/tech-insights/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights", - "version": "0.2.3-next.1", + "version": "0.2.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -28,13 +28,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", "@backstage/plugin-tech-insights-common": "^0.2.4", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@backstage/types": "^1.0.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -47,9 +47,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md index 464c51f5b5..99d537779f 100644 --- a/plugins/tech-radar/CHANGELOG.md +++ b/plugins/tech-radar/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-tech-radar +## 0.5.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + ## 0.5.14-next.1 ### Patch Changes diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index 87efc6ed36..12ed7a1631 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-tech-radar", "description": "A Backstage plugin that lets you display a Tech Radar for your organization", - "version": "0.5.14-next.1", + "version": "0.5.14-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,9 +34,9 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -49,9 +49,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index 43bb307fe2..667c189a99 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.0.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/plugin-search-react@0.2.2-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-techdocs@1.2.1-next.2 + - @backstage/plugin-catalog@1.4.0-next.2 + - @backstage/integration-react@1.1.2-next.2 + - @backstage/plugin-techdocs-react@1.0.2-next.1 + ## 1.0.2-next.1 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index 58e4ec8657..f61a763eaf 100644 --- a/plugins/techdocs-addons-test-utils/package.json +++ b/plugins/techdocs-addons-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-addons-test-utils", - "version": "1.0.2-next.1", + "version": "1.0.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,16 +32,16 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/integration-react": "^1.1.2-next.1", - "@backstage/plugin-catalog": "^1.3.1-next.1", - "@backstage/plugin-search-react": "^0.2.2-next.1", - "@backstage/plugin-techdocs": "^1.2.1-next.1", - "@backstage/plugin-techdocs-react": "^1.0.2-next.0", + "@backstage/integration-react": "^1.1.2-next.2", + "@backstage/plugin-catalog": "^1.4.0-next.2", + "@backstage/plugin-search-react": "^0.2.2-next.2", + "@backstage/plugin-techdocs": "^1.2.1-next.2", + "@backstage/plugin-techdocs-react": "^1.0.2-next.1", "@backstage/test-utils": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -56,8 +56,8 @@ "react-dom": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/cli": "^0.18.0-next.2", + "@backstage/dev-utils": "^1.0.4-next.2", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index 3222ee1c2a..3039a7c50c 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-techdocs-backend +## 1.2.0-next.2 + +### Patch Changes + +- 679b32172e: Updated dependency `knex` to `^2.0.0`. +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + - @backstage/integration@1.2.2-next.2 + - @backstage/plugin-techdocs-node@1.2.0-next.2 + ## 1.2.0-next.1 ### Minor Changes diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index c316a93f76..e7f4ad6ef1 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-backend", "description": "The Backstage backend plugin that renders technical documentation for your components", - "version": "1.2.0-next.1", + "version": "1.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,16 +34,16 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.14.1-next.1", + "@backstage/backend-common": "^0.14.1-next.2", "@backstage/catalog-client": "^1.0.4-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0-next.0", - "@backstage/integration": "^1.2.2-next.1", + "@backstage/integration": "^1.2.2-next.2", "@backstage/plugin-catalog-common": "^1.0.4-next.0", "@backstage/plugin-permission-common": "^0.6.3-next.0", "@backstage/plugin-search-common": "^0.3.6-next.0", - "@backstage/plugin-techdocs-node": "^1.2.0-next.1", + "@backstage/plugin-techdocs-node": "^1.2.0-next.2", "@types/express": "^4.17.6", "dockerode": "^3.3.1", "express": "^4.17.1", @@ -56,8 +56,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.26-next.1", - "@backstage/cli": "^0.18.0-next.1", + "@backstage/backend-test-utils": "^0.1.26-next.2", + "@backstage/cli": "^0.18.0-next.2", "@backstage/plugin-search-backend-node": "0.6.3-next.1", "@types/dockerode": "^3.3.0", "msw": "^0.42.0", diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index 2f2626f925..049cf72493 100644 --- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md +++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-techdocs-module-addons-contrib +## 1.0.2-next.2 + +### Patch Changes + +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/integration@1.2.2-next.2 + - @backstage/integration-react@1.1.2-next.2 + - @backstage/plugin-techdocs-react@1.0.2-next.1 + ## 1.0.2-next.1 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index a18e3e4c31..cdb4a5237e 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-module-addons-contrib", "description": "Plugin module for contributed TechDocs Addons", - "version": "1.0.2-next.1", + "version": "1.0.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,12 +34,12 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/integration": "^1.2.2-next.1", - "@backstage/integration-react": "^1.1.2-next.1", - "@backstage/plugin-techdocs-react": "^1.0.2-next.0", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/integration": "^1.2.2-next.2", + "@backstage/integration-react": "^1.1.2-next.2", + "@backstage/plugin-techdocs-react": "^1.0.2-next.1", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -51,10 +51,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", - "@backstage/plugin-techdocs-addons-test-utils": "^1.0.2-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", + "@backstage/plugin-techdocs-addons-test-utils": "^1.0.2-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md index be88fd74b1..159966eaae 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-techdocs-node +## 1.2.0-next.2 + +### Patch Changes + +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +- Updated dependencies + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/backend-common@0.14.1-next.2 + - @backstage/integration@1.2.2-next.2 + ## 1.2.0-next.1 ### Minor Changes diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index bcce7ce449..24ca02de8a 100644 --- a/plugins/techdocs-node/package.json +++ b/plugins/techdocs-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-node", "description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli", - "version": "1.2.0-next.1", + "version": "1.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -42,11 +42,11 @@ "dependencies": { "@azure/identity": "^2.0.1", "@azure/storage-blob": "^12.5.0", - "@backstage/backend-common": "^0.14.1-next.1", - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/backend-common": "^0.14.1-next.2", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0-next.0", - "@backstage/integration": "^1.2.2-next.1", + "@backstage/integration": "^1.2.2-next.2", "@backstage/plugin-search-common": "^0.3.6-next.0", "@google-cloud/storage": "^6.0.0", "@trendyol-js/openstack-swift-sdk": "^0.0.5", @@ -64,7 +64,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@types/fs-extra": "^9.0.5", "@types/js-yaml": "^4.0.0", "@types/mime-types": "^2.1.0", diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index 6feb9062d3..aa839600c3 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-techdocs-react +## 1.0.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + ## 1.0.2-next.0 ### Patch Changes diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index 7209bab004..042dd4c81b 100644 --- a/plugins/techdocs-react/package.json +++ b/plugins/techdocs-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-react", "description": "Shared frontend utilities for TechDocs and Addons", - "version": "1.0.2-next.0", + "version": "1.0.2-next.1", "private": false, "publishConfig": { "access": "public", @@ -35,8 +35,8 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/version-bridge": "^1.0.1", "@material-ui/core": "^4.12.2", @@ -57,7 +57,7 @@ "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", "@backstage/test-utils": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0" + "@backstage/theme": "^0.2.16-next.1" }, "files": [ "alpha", diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index 7d8fb30bbb..aad89b46cf 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-techdocs +## 1.2.1-next.2 + +### Patch Changes + +- e2d7b76f43: Upgrade git-url-parse to 12.0.0. + + Motivation for upgrade is transitively upgrading parse-url which is vulnerable + to several CVEs detected by Snyk. + + - SNYK-JS-PARSEURL-2935944 + - SNYK-JS-PARSEURL-2935947 + - SNYK-JS-PARSEURL-2936249 + +- 7739141ab2: Fix: When docs are shown in an entity page under the docs tab the sidebars start overlapping with the header and tabs in the page when you scroll the documentation content. +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/plugin-search-react@0.2.2-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/integration@1.2.2-next.2 + - @backstage/plugin-catalog-react@1.1.2-next.2 + - @backstage/integration-react@1.1.2-next.2 + - @backstage/plugin-techdocs-react@1.0.2-next.1 + ## 1.2.1-next.1 ### Patch Changes diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 880d29bac3..292cd3fbd8 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs", "description": "The Backstage plugin that renders technical documentation for your components", - "version": "1.2.1-next.1", + "version": "1.2.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,18 +35,18 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/integration": "^1.2.2-next.1", - "@backstage/integration-react": "^1.1.2-next.1", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", + "@backstage/integration": "^1.2.2-next.2", + "@backstage/integration-react": "^1.1.2-next.2", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", "@backstage/plugin-search-common": "^0.3.6-next.0", - "@backstage/plugin-search-react": "^0.2.2-next.1", - "@backstage/plugin-techdocs-react": "^1.0.2-next.0", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-search-react": "^0.2.2-next.2", + "@backstage/plugin-techdocs-react": "^1.0.2-next.1", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -67,9 +67,9 @@ "react-dom": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/todo/CHANGELOG.md b/plugins/todo/CHANGELOG.md index 5f0d94f1d1..a2892e3036 100644 --- a/plugins/todo/CHANGELOG.md +++ b/plugins/todo/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-todo +## 0.2.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.2.9-next.1 ### Patch Changes diff --git a/plugins/todo/package.json b/plugins/todo/package.json index e5e4dcd103..ffc93bbdaa 100644 --- a/plugins/todo/package.json +++ b/plugins/todo/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo", "description": "A Backstage plugin that lets you browse TODO comments in your source code", - "version": "0.2.9-next.1", + "version": "0.2.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,12 +30,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -45,9 +45,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index 783871bef8..a515a7572a 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-user-settings +## 0.4.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + ## 0.4.6-next.1 ### Patch Changes diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index ba2b02d067..99959b1a21 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings", "description": "A Backstage plugin that provides a settings page", - "version": "0.4.6-next.1", + "version": "0.4.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,9 +34,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -48,9 +48,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/vault-backend/CHANGELOG.md b/plugins/vault-backend/CHANGELOG.md index d47d46870d..6b1dba1bfa 100644 --- a/plugins/vault-backend/CHANGELOG.md +++ b/plugins/vault-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-vault-backend +## 0.2.0-next.2 + +### Patch Changes + +- 7ee4abdcc9: Added a path notion in addition to secret name to allow to differentiate secrets in sub-paths +- Updated dependencies + - @backstage/backend-common@0.14.1-next.2 + - @backstage/backend-tasks@0.3.3-next.2 + - @backstage/backend-test-utils@0.1.26-next.2 + ## 0.2.0-next.1 ### Patch Changes diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json index 9996c521f7..bcc8186990 100644 --- a/plugins/vault-backend/package.json +++ b/plugins/vault-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault-backend", "description": "A Backstage backend plugin that integrates towards Vault", - "version": "0.2.0-next.1", + "version": "0.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,9 +34,9 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-common": "^0.14.1-next.1", - "@backstage/backend-tasks": "^0.3.3-next.1", - "@backstage/backend-test-utils": "^0.1.26-next.1", + "@backstage/backend-common": "^0.14.1-next.2", + "@backstage/backend-tasks": "^0.3.3-next.2", + "@backstage/backend-test-utils": "^0.1.26-next.2", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0-next.0", "@types/express": "*", @@ -51,7 +51,7 @@ "yn": "^5.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@types/compression": "^1.7.2", "@types/supertest": "^2.0.8", "msw": "^0.42.0", diff --git a/plugins/vault/CHANGELOG.md b/plugins/vault/CHANGELOG.md index af82aedff4..317d6ae7d6 100644 --- a/plugins/vault/CHANGELOG.md +++ b/plugins/vault/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-vault +## 0.1.1-next.2 + +### Patch Changes + +- 7ee4abdcc9: Added a path notion in addition to secret name to allow to differentiate secrets in sub-paths +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/catalog-model@1.1.0-next.2 + - @backstage/theme@0.2.16-next.1 + - @backstage/plugin-catalog-react@1.1.2-next.2 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/vault/package.json b/plugins/vault/package.json index 8c0fd85fdd..ff795cc53f 100644 --- a/plugins/vault/package.json +++ b/plugins/vault/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault", "description": "A Backstage plugin that integrates towards Vault", - "version": "0.1.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,12 +34,12 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0-next.1", - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/plugin-catalog-react": "^1.1.2-next.1", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/plugin-catalog-react": "^1.1.2-next.2", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "^4.0.0-alpha.57", @@ -49,9 +49,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/xcmetrics/CHANGELOG.md b/plugins/xcmetrics/CHANGELOG.md index 94179d1e6b..a8ac7904a0 100644 --- a/plugins/xcmetrics/CHANGELOG.md +++ b/plugins/xcmetrics/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-xcmetrics +## 0.2.27-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.10.0-next.2 + - @backstage/theme@0.2.16-next.1 + ## 0.2.27-next.1 ### Patch Changes diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index 572502f68b..04a74d5b57 100644 --- a/plugins/xcmetrics/package.json +++ b/plugins/xcmetrics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-xcmetrics", "description": "A Backstage plugin that shows XCode build metrics for your components", - "version": "0.2.27-next.1", + "version": "0.2.27-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,10 +24,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.9.6-next.1", + "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", - "@backstage/theme": "^0.2.16-next.0", + "@backstage/theme": "^0.2.16-next.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -40,9 +40,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0-next.1", + "@backstage/cli": "^0.18.0-next.2", "@backstage/core-app-api": "^1.0.4-next.0", - "@backstage/dev-utils": "^1.0.4-next.1", + "@backstage/dev-utils": "^1.0.4-next.2", "@backstage/test-utils": "^1.1.2-next.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", From 6ad8190f852e8b7ecb9ab6ad98252d8e6519ca6a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Jul 2022 08:27:59 +0000 Subject: [PATCH 179/231] fix(deps): update dependency @google-cloud/container to v4.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 3b1cc42bef..7e959ad4c8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2288,9 +2288,9 @@ xcase "^2.0.1" "@google-cloud/container@^4.0.0": - version "4.0.1" - resolved "https://registry.npmjs.org/@google-cloud/container/-/container-4.0.1.tgz#a3206d3030539e09b7beee8f351fad86c77af79d" - integrity sha512-JpsOsdKnCQm1b5aVNnO/2Urdg+qbCLi/srEnTupRj73Pu5wXLHXOCe3vy8Z2GvyCqu7qr89fMREQ4kO4QijnHA== + version "4.1.0" + resolved "https://registry.npmjs.org/@google-cloud/container/-/container-4.1.0.tgz#cf929184f668fc40ca8b864b7f638228ae67fc98" + integrity sha512-LpVT3wxG73iX/5deF4a2KIEZ7sULF2mksrzyA25OVGtyxFclSZT2Gs5uho5USSLkoKg/Ou+l+ekGMrgBQbLDag== dependencies: google-gax "^3.0.1" From f286450c82a106133e5dec352095a03a067d52e7 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Tue, 5 Jul 2022 14:00:07 +0530 Subject: [PATCH 180/231] add upcoming events to on-demand Signed-off-by: Himanshu Mishra --- microsite/data/on-demand/20220720-1.yaml | 9 +++++++++ microsite/data/on-demand/20220727-1.yaml | 9 +++++++++ 2 files changed, 18 insertions(+) create mode 100644 microsite/data/on-demand/20220720-1.yaml create mode 100644 microsite/data/on-demand/20220727-1.yaml diff --git a/microsite/data/on-demand/20220720-1.yaml b/microsite/data/on-demand/20220720-1.yaml new file mode 100644 index 0000000000..a1f51859f4 --- /dev/null +++ b/microsite/data/on-demand/20220720-1.yaml @@ -0,0 +1,9 @@ +--- +title: Adopters Community Sessions +date: July 20, 2022 +category: Upcoming +description: Adopters Community Session ✨. It's the monthly meetup where we all come together to listen to the latest maintainer updates, learn from each other about adopting, share exciting new demos or discuss any relevant topic like developer effectiveness, developer experience, developer portals, etc. +youtubeUrl: https://youtu.be/4VFNlPxWcx8 +youtubeImgUrl: https://backstage.io/img/b-sessions.png +rsvpUrl: https://calendar.google.com/calendar/embed?src=c_qup9gbhn9sqpuao6trttd8mk5s@group.calendar.google.com +eventUrl: https://github.com/backstage/community/issues/52 diff --git a/microsite/data/on-demand/20220727-1.yaml b/microsite/data/on-demand/20220727-1.yaml new file mode 100644 index 0000000000..5f7712596f --- /dev/null +++ b/microsite/data/on-demand/20220727-1.yaml @@ -0,0 +1,9 @@ +--- +title: Contributor Community Sessions +date: July 27, 2022 +category: Upcoming +description: Join the maintainers and contributors for the Contributor Community Sessions +youtubeUrl: https://youtu.be/4VFNlPxWcx8 +youtubeImgUrl: https://backstage.io/img/b-sessions.png +rsvpUrl: https://calendar.google.com/calendar/embed?src=c_qup9gbhn9sqpuao6trttd8mk5s@group.calendar.google.com +eventUrl: https://github.com/backstage/community/issues/52 From 159b0228f1f3aca3ce4e4086a18961757117c489 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Tue, 5 Jul 2022 14:00:28 +0530 Subject: [PATCH 181/231] microsite: make file names consistent 01 -> 1 Signed-off-by: Himanshu Mishra --- .../data/on-demand/{20211117-01.yaml => 20211117-1.yaml} | 0 .../data/on-demand/{20211118-01.yaml => 20211118-1.yaml} | 0 .../data/on-demand/{20211215-01.yaml => 20211215-1.yaml} | 0 .../data/on-demand/{20211216-01.yaml => 20211216-1.yaml} | 0 .../data/on-demand/{20220216-01.yaml => 20220216-1.yaml} | 0 .../data/on-demand/{20220223-01.yaml => 20220223-1.yaml} | 0 .../data/on-demand/{20220518-01.yaml => 20220518-1.yaml} | 0 microsite/data/on-demand/{20220525.yaml => 20220525-1.yaml} | 0 .../data/on-demand/{20220615-01.yaml => 20220615-1.yaml} | 2 +- microsite/data/on-demand/20220622-1.yaml | 4 ++-- 10 files changed, 3 insertions(+), 3 deletions(-) rename microsite/data/on-demand/{20211117-01.yaml => 20211117-1.yaml} (100%) rename microsite/data/on-demand/{20211118-01.yaml => 20211118-1.yaml} (100%) rename microsite/data/on-demand/{20211215-01.yaml => 20211215-1.yaml} (100%) rename microsite/data/on-demand/{20211216-01.yaml => 20211216-1.yaml} (100%) rename microsite/data/on-demand/{20220216-01.yaml => 20220216-1.yaml} (100%) rename microsite/data/on-demand/{20220223-01.yaml => 20220223-1.yaml} (100%) rename microsite/data/on-demand/{20220518-01.yaml => 20220518-1.yaml} (100%) rename microsite/data/on-demand/{20220525.yaml => 20220525-1.yaml} (100%) rename microsite/data/on-demand/{20220615-01.yaml => 20220615-1.yaml} (97%) diff --git a/microsite/data/on-demand/20211117-01.yaml b/microsite/data/on-demand/20211117-1.yaml similarity index 100% rename from microsite/data/on-demand/20211117-01.yaml rename to microsite/data/on-demand/20211117-1.yaml diff --git a/microsite/data/on-demand/20211118-01.yaml b/microsite/data/on-demand/20211118-1.yaml similarity index 100% rename from microsite/data/on-demand/20211118-01.yaml rename to microsite/data/on-demand/20211118-1.yaml diff --git a/microsite/data/on-demand/20211215-01.yaml b/microsite/data/on-demand/20211215-1.yaml similarity index 100% rename from microsite/data/on-demand/20211215-01.yaml rename to microsite/data/on-demand/20211215-1.yaml diff --git a/microsite/data/on-demand/20211216-01.yaml b/microsite/data/on-demand/20211216-1.yaml similarity index 100% rename from microsite/data/on-demand/20211216-01.yaml rename to microsite/data/on-demand/20211216-1.yaml diff --git a/microsite/data/on-demand/20220216-01.yaml b/microsite/data/on-demand/20220216-1.yaml similarity index 100% rename from microsite/data/on-demand/20220216-01.yaml rename to microsite/data/on-demand/20220216-1.yaml diff --git a/microsite/data/on-demand/20220223-01.yaml b/microsite/data/on-demand/20220223-1.yaml similarity index 100% rename from microsite/data/on-demand/20220223-01.yaml rename to microsite/data/on-demand/20220223-1.yaml diff --git a/microsite/data/on-demand/20220518-01.yaml b/microsite/data/on-demand/20220518-1.yaml similarity index 100% rename from microsite/data/on-demand/20220518-01.yaml rename to microsite/data/on-demand/20220518-1.yaml diff --git a/microsite/data/on-demand/20220525.yaml b/microsite/data/on-demand/20220525-1.yaml similarity index 100% rename from microsite/data/on-demand/20220525.yaml rename to microsite/data/on-demand/20220525-1.yaml diff --git a/microsite/data/on-demand/20220615-01.yaml b/microsite/data/on-demand/20220615-1.yaml similarity index 97% rename from microsite/data/on-demand/20220615-01.yaml rename to microsite/data/on-demand/20220615-1.yaml index 8ac660a71c..fb296dd6ce 100644 --- a/microsite/data/on-demand/20220615-01.yaml +++ b/microsite/data/on-demand/20220615-1.yaml @@ -1,7 +1,7 @@ --- title: Adopters Community Sessions date: June 15, 2022 -category: Upcoming +category: Meetup description: Adopters Community Session ✨. It's the monthly meetup where we all come together to listen to the latest maintainer updates, learn from each other about adopting, share exciting new demos or discuss any relevant topic like developer effectiveness, developer experience, developer portals, etc. youtubeUrl: https://youtu.be/aKZnjnE5Wy8 youtubeImgUrl: https://backstage.io/img/b-sessions.png diff --git a/microsite/data/on-demand/20220622-1.yaml b/microsite/data/on-demand/20220622-1.yaml index 0bbd53525a..27634609cb 100644 --- a/microsite/data/on-demand/20220622-1.yaml +++ b/microsite/data/on-demand/20220622-1.yaml @@ -1,9 +1,9 @@ --- title: Contributor Community Sessions date: June 22, 2022 -category: Upcoming +category: Meetup description: Join the maintainers and contributors for the Contributor Community Sessions -youtubeUrl: https://youtu.be/aKZnjnE5Wy8 +youtubeUrl: https://youtu.be/E-jWqWXBxUY youtubeImgUrl: https://backstage.io/img/b-sessions.png rsvpUrl: https://calendar.google.com/calendar/embed?src=c_qup9gbhn9sqpuao6trttd8mk5s@group.calendar.google.com eventUrl: https://github.com/backstage/community/issues/49 From 8e6be0411fca35b32dd06ae68f3d442336b8a3f9 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 5 Jul 2022 10:37:22 +0200 Subject: [PATCH 182/231] chore: fixing the tests for the k8s client bump Signed-off-by: blam Signed-off-by: blam --- plugins/kubernetes/src/setupTests.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/plugins/kubernetes/src/setupTests.ts b/plugins/kubernetes/src/setupTests.ts index 28a35d2b06..a373310a1a 100644 --- a/plugins/kubernetes/src/setupTests.ts +++ b/plugins/kubernetes/src/setupTests.ts @@ -14,3 +14,14 @@ * limitations under the License. */ import '@testing-library/jest-dom'; +// eslint-disable-next-line no-restricted-imports +import { TextDecoder, TextEncoder } from 'util'; + +// These are missing from jest-node, so not available on global. +Object.defineProperty(global, 'TextEncoder', { + value: TextEncoder, +}); + +Object.defineProperty(global, 'TextDecoder', { + value: TextDecoder, +}); From d5853d8885cfdfeca90e545cb913aa9b3a21b5c1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Jul 2022 08:40:36 +0000 Subject: [PATCH 183/231] fix(deps): update dependency eslint to v8.19.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 3b1cc42bef..51ef484dc4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12427,9 +12427,9 @@ eslint-webpack-plugin@^3.1.1: schema-utils "^4.0.0" eslint@^8.6.0: - version "8.18.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz#78d565d16c993d0b73968c523c0446b13da784fd" - integrity sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA== + version "8.19.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz#7342a3cbc4fbc5c106a1eefe0fd0b50b6b1a7d28" + integrity sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw== dependencies: "@eslint/eslintrc" "^1.3.0" "@humanwhocodes/config-array" "^0.9.2" From ff630b2b2096ce65935c0c742b27139c2750759a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 5 Jul 2022 11:06:30 +0200 Subject: [PATCH 184/231] Help update Expedia contacts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- ADOPTERS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ADOPTERS.md b/ADOPTERS.md index 1cb0577c44..6bf1f482bf 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -23,7 +23,7 @@ _You can do this by using the [Adopter form](https://form.typeform.com/to/zcOaKi | [Fiverr](https://www.fiverr.com) | [@nirga](https://github.com/nirga) | Unifying separate tools that developers are using today (i.e. monitoring, dead letter queues management, etc.) into a single platform. | | [Zalando SE](https://www.zalando.de) | [@leviferreira](https://github.com/leviferreira) | Building V2 of the Internal Development Portal. | | [LegalZoom](https://legalzoom.com) | [@backjo](https://github.com/backjo) | Developer portal - hub for all engineering projects and metadata. | -| [Expedia Group](https://www.expediagroup.com) | [@guillermomanzo](https://github.com/guillermomanzo), [Sheena Sharma](mailto:shesharma@expediagroup.com) | EG Common Developer Toolkit | +| [Expedia Group](https://www.expediagroup.com) | [@guillermomanzo](https://github.com/guillermomanzo), [Sheena Sharma](mailto:shesharma@expediagroup.com), [@ajbw](https://github.com/ajbw) | EG Common Developer Toolkit | | [Paddle.com](https://paddle.com) | [Ioannis Georgoulas](https://github.com/geototti21) | Developer portal (Tech Docs, Service Catalog, Internal Tooling), we use vanilla Backstage FE and custom BE implementation in Go | | [Acast.com](https://acast.com) | [Olle Lundberg](https://github.com/lndbrg) | Developer portal with tech docs, service catalog and a bunch of other internal tooling | | [Lunar](https://lunar.app) | [Jacob Valdemar](https://github.com/JacobValdemar) | Internal developer portal for service overview and insights, API documentation, technical guides, onboarding guides and RFC's. | @@ -188,5 +188,5 @@ _You can do this by using the [Adopter form](https://form.typeform.com/to/zcOaKi | [Cho Tot](https://www.chotot.com) | [Chotot Team](mailto:sre@chotot.vn) | Internal developer portal, service catalog with CI/CD tools. | | [William Hill](https://www.williamhillgroup.com/) | [Pat Mills](mailto:pat.mills@williamhill.com), [Nathan Flynn](mailto:nflynn@williamhill.co.uk), and [Nishkarsh Raj](mailto:nishkarsh.raj@williamhill.co.uk) | William Hill are leveraging Backstage to build our Engineering Portal. Our mission is to centralize the software catalog inventory to enable service discoverability, reduce the onboarding time for new Engineers, provide a single pane of glass to accelerate Developer Productivity and Save Engineers time. Our aspiration is to create an InnerSource community focussed on organization-wide patterns that are re-usable and can be self-served with the Scaffolder. | | [Vodafone NewZealand Limited](https://vodafone.co.nz) | [Ankit Gupta](mailto:ankit.gupta@vodafone.nz), [DevOps COE](mailto:devopstooling@vodafone.nz) | Vodafone NZ are leveraging Backstage to build centralised and self service Engineering Portal. Our mission is to standardised Pipeline templates across the Engineering teams, One shop stop to create the pipelines and repository with a template approach which reduces creation part from days to minutes and no wait time for developers. A unified view for Azure DevOps pipeline, Azure Repo pull requests, Deployment status from Azure RedHat Openshift-ArgoCD and SonarQube Security and code quality scans report on a single pan to provide a streamlined view for all microservices across the app stack. | -| [Coamo](http://www.coamo.com.br) | [@holiiveira](https://github.com/holiiveira), [@gpxlnx](https://github.com/gpxlnx) | We're starting to use it as the main tool of a DevOps platform. Our goal is to provide software templates, centralize our software catalog enabling efficient service discovery, and make it easy to manage the entire software ecosystem in one place. +| [Coamo](http://www.coamo.com.br) | [@holiiveira](https://github.com/holiiveira), [@gpxlnx](https://github.com/gpxlnx) | We're starting to use it as the main tool of a DevOps platform. Our goal is to provide software templates, centralize our software catalog enabling efficient service discovery, and make it easy to manage the entire software ecosystem in one place. | From 6f7886424fec6150f856446a4f2e36439f1ac2c5 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 5 Jul 2022 11:19:35 +0200 Subject: [PATCH 185/231] chore: avoid double encoding of filepath Signed-off-by: blam --- .../integration/src/bitbucketServer/core.test.ts | 14 ++++++++++++++ packages/integration/src/bitbucketServer/core.ts | 4 +++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/integration/src/bitbucketServer/core.test.ts b/packages/integration/src/bitbucketServer/core.test.ts index 1c8f5d259c..076a2c7a4f 100644 --- a/packages/integration/src/bitbucketServer/core.test.ts +++ b/packages/integration/src/bitbucketServer/core.test.ts @@ -108,6 +108,20 @@ describe('bitbucketServer core', () => { ); }); + it('does not double encode the filepath', async () => { + const config: BitbucketServerIntegrationConfig = { + host: 'bitbucket.mycompany.net', + apiBaseUrl: 'https://api.bitbucket.mycompany.net/rest/api/1.0', + }; + const result = await getBitbucketServerDownloadUrl( + 'https://bitbucket.mycompany.net/projects/backstage/repos/mock/browse/%2Fdocs?at=some-branch', + config, + ); + expect(result).toEqual( + 'https://api.bitbucket.mycompany.net/rest/api/1.0/projects/backstage/repos/mock/archive?format=tgz&at=some-branch&prefix=backstage-mock&path=%2Fdocs', + ); + }); + it('do not add path param if no path is specified for Bitbucket Server', async () => { const defaultBranchResponse = { displayId: 'main', diff --git a/packages/integration/src/bitbucketServer/core.ts b/packages/integration/src/bitbucketServer/core.ts index 80dbc0443f..0c57b0d3ed 100644 --- a/packages/integration/src/bitbucketServer/core.ts +++ b/packages/integration/src/bitbucketServer/core.ts @@ -83,7 +83,9 @@ export async function getBitbucketServerDownloadUrl( // path will limit the downloaded content // /docs will only download the docs folder and everything below it // /docs/index.md will download the docs folder and everything below it - const path = filepath ? `&path=${encodeURIComponent(filepath)}` : ''; + const path = filepath + ? `&path=${encodeURIComponent(decodeURIComponent(filepath))}` + : ''; return `${config.apiBaseUrl}/projects/${project}/repos/${repoName}/archive?format=tgz&at=${branch}&prefix=${project}-${repoName}${path}`; } From 4df3390795e137f43a370b335351456ffa3d974e Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 5 Jul 2022 11:20:34 +0200 Subject: [PATCH 186/231] chore: added changeset Signed-off-by: blam --- .changeset/tender-terms-flash.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/tender-terms-flash.md diff --git a/.changeset/tender-terms-flash.md b/.changeset/tender-terms-flash.md new file mode 100644 index 0000000000..b8e02b3356 --- /dev/null +++ b/.changeset/tender-terms-flash.md @@ -0,0 +1,5 @@ +--- +'@backstage/integration': patch +--- + +Avoid double encoding of the filepath in `getBitbucketServerDownloadUrl` From ab912fb5060a460fcc758292da7ab35c12e6ec0e Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Tue, 5 Jul 2022 11:35:27 +0200 Subject: [PATCH 187/231] workflow: Remove awaiting-review from stalebot exclude list Signed-off-by: Johan Haals --- .github/workflows/automate_stale.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/automate_stale.yml b/.github/workflows/automate_stale.yml index f9c655fc4a..8978048c89 100644 --- a/.github/workflows/automate_stale.yml +++ b/.github/workflows/automate_stale.yml @@ -25,6 +25,6 @@ jobs: If you are the author and the PR has been closed, feel free to re-open the PR and continue the contribution! days-before-pr-stale: 7 days-before-pr-close: 5 - exempt-pr-labels: reviewer-approved,awaiting-review,will-fix + exempt-pr-labels: reviewer-approved,will-fix stale-pr-label: stale operations-per-run: 100 From ac7470591edc05bb49c4cc27387be2bd0ad32a64 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Mon, 4 Jul 2022 09:55:23 +0200 Subject: [PATCH 188/231] refactor: apply review suggestions Signed-off-by: Camila Belo --- .changeset/ninety-coats-learn.md | 2 +- packages/core-app-api/api-report.md | 3 -- packages/core-app-api/src/app/AppManager.tsx | 3 +- packages/core-app-api/src/app/index.ts | 1 - packages/core-components/package.json | 1 - .../src/components/Link/Link.tsx | 39 +++++++++++++++---- 6 files changed, 34 insertions(+), 15 deletions(-) diff --git a/.changeset/ninety-coats-learn.md b/.changeset/ninety-coats-learn.md index 19d56aa128..9d6945e9c0 100644 --- a/.changeset/ninety-coats-learn.md +++ b/.changeset/ninety-coats-learn.md @@ -2,4 +2,4 @@ '@backstage/core-components': patch --- -Fix the relative `sub-paths` by concatenating the app's base URL with them. +Fix relative `sub-paths` by concatenating the app's base path with them. diff --git a/packages/core-app-api/api-report.md b/packages/core-app-api/api-report.md index 6cbff05709..116b33c598 100644 --- a/packages/core-app-api/api-report.md +++ b/packages/core-app-api/api-report.md @@ -372,9 +372,6 @@ export type FlatRoutesProps = { children: ReactNode; }; -// @public -export function getBasePath(configApi: Config): string; - // @public export class GithubAuth { // (undocumented) diff --git a/packages/core-app-api/src/app/AppManager.tsx b/packages/core-app-api/src/app/AppManager.tsx index 25aa606e4e..f47ddf676a 100644 --- a/packages/core-app-api/src/app/AppManager.tsx +++ b/packages/core-app-api/src/app/AppManager.tsx @@ -95,9 +95,8 @@ const InternalAppContext = createContext<{ * Get the app base path from the configured app baseUrl. * * The returned path does not have a trailing slash. - * @public */ -export function getBasePath(configApi: Config) { +function getBasePath(configApi: Config) { let { pathname } = new URL( configApi.getOptionalString('app.baseUrl') ?? '/', 'http://dummy.dev', // baseUrl can be specified as just a path diff --git a/packages/core-app-api/src/app/index.ts b/packages/core-app-api/src/app/index.ts index 4d4ddf7e8b..7843b36339 100644 --- a/packages/core-app-api/src/app/index.ts +++ b/packages/core-app-api/src/app/index.ts @@ -16,5 +16,4 @@ export { createSpecializedApp } from './createSpecializedApp'; export { defaultConfigLoader } from './defaultConfigLoader'; -export { getBasePath } from './AppManager'; export * from './types'; diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 0202904448..51cbc37a1b 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -34,7 +34,6 @@ }, "dependencies": { "@backstage/config": "^1.0.1", - "@backstage/core-app-api": "^1.0.4-next.0", "@backstage/core-plugin-api": "^1.0.3", "@backstage/errors": "^1.1.0-next.0", "@backstage/theme": "^0.2.16-next.0", diff --git a/packages/core-components/src/components/Link/Link.tsx b/packages/core-components/src/components/Link/Link.tsx index d404755b54..22b203d157 100644 --- a/packages/core-components/src/components/Link/Link.tsx +++ b/packages/core-components/src/components/Link/Link.tsx @@ -25,7 +25,7 @@ import { Link as RouterLink, LinkProps as RouterLinkProps, } from 'react-router-dom'; -import { getBasePath } from '@backstage/core-app-api'; +import { trimEnd } from 'lodash'; const useStyles = makeStyles( { @@ -53,14 +53,39 @@ export type LinkProps = MaterialLinkProps & noTrack?: boolean; }; +/** + * Returns the app base url that could be empty if the Config API is not properly implemented. + * The only cases there would be no Config API are in tests and in storybook stories, and in those cases, it's unlikely that callers would rely on this subpath behavior. + */ +const useBaseUrl = () => { + try { + const config = useApi(configApiRef); + return config.getOptionalString('app.baseUrl'); + } catch { + return undefined; + } +}; + +/** + * Get the app base path from the configured app baseUrl. + * The returned path does not have a trailing slash. + */ +const useBasePath = () => { + // baseUrl can be specified as just a path + const base = 'http://dummy.dev'; + const url = useBaseUrl() ?? '/'; + const { pathname } = new URL(url, base); + return trimEnd(pathname, '/'); +}; + export const useResolvedPath = (uri: LinkProps['to']) => { - const configApi = useApi(configApiRef); - const basePath = getBasePath(configApi); - let resolvedPath = String(uri); - const external = isExternalUri(resolvedPath); - if (!external && !resolvedPath.startsWith(basePath)) { + const basePath = useBasePath(); + const external = isExternalUri(resolvedPath); + const startsWithBasePath = resolvedPath.startsWith(basePath); + + if (!external && !startsWithBasePath) { resolvedPath = basePath.concat(resolvedPath); } @@ -130,8 +155,8 @@ export const Link = React.forwardRef( {...props} ref={ref} component={RouterLink} - onClick={handleClick} to={to} + onClick={handleClick} /> ); }, From 2d47dc92e2c5226e91ae3ce197cbb9d01b0b613b Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 5 Jul 2022 11:48:50 +0200 Subject: [PATCH 189/231] Update tender-terms-flash.md Signed-off-by: Patrik Oldsberg --- .changeset/tender-terms-flash.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/tender-terms-flash.md b/.changeset/tender-terms-flash.md index b8e02b3356..ca5fdb3799 100644 --- a/.changeset/tender-terms-flash.md +++ b/.changeset/tender-terms-flash.md @@ -2,4 +2,4 @@ '@backstage/integration': patch --- -Avoid double encoding of the filepath in `getBitbucketServerDownloadUrl` +Avoid double encoding of the file path in `getBitbucketServerDownloadUrl` From a70869e775b2af5258a3218fd80fcbf894ca15ee Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Jul 2022 09:54:20 +0000 Subject: [PATCH 190/231] chore(deps): update dependency msw to ^0.43.0 Signed-off-by: Renovate Bot --- .changeset/renovate-0546761.md | 103 ++++++++++++++ packages/backend-common/package.json | 2 +- packages/backend-test-utils/package.json | 2 +- packages/catalog-client/package.json | 2 +- packages/cli/package.json | 2 +- packages/config-loader/package.json | 2 +- packages/core-app-api/package.json | 2 +- packages/core-components/package.json | 2 +- packages/core-plugin-api/package.json | 2 +- packages/integration-react/package.json | 2 +- packages/integration/package.json | 2 +- packages/release-manifests/package.json | 2 +- packages/test-utils/package.json | 2 +- plugins/adr-backend/package.json | 2 +- plugins/adr/package.json | 2 +- plugins/airbrake-backend/package.json | 2 +- plugins/airbrake/package.json | 2 +- plugins/allure/package.json | 2 +- plugins/analytics-module-ga/package.json | 2 +- plugins/apache-airflow/package.json | 2 +- plugins/api-docs/package.json | 2 +- plugins/app-backend/package.json | 2 +- plugins/auth-backend/package.json | 2 +- plugins/auth-node/package.json | 2 +- plugins/azure-devops-backend/package.json | 2 +- plugins/azure-devops/package.json | 2 +- plugins/badges/package.json | 2 +- plugins/bitbucket-cloud-common/package.json | 2 +- plugins/bitrise/package.json | 2 +- .../catalog-backend-module-azure/package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- plugins/catalog-backend/package.json | 2 +- plugins/catalog-graphql/package.json | 2 +- plugins/catalog-import/package.json | 2 +- plugins/circleci/package.json | 2 +- plugins/cloudbuild/package.json | 2 +- plugins/code-climate/package.json | 2 +- plugins/code-coverage-backend/package.json | 2 +- plugins/code-coverage/package.json | 2 +- plugins/codescene/package.json | 2 +- plugins/config-schema/package.json | 2 +- plugins/cost-insights/package.json | 2 +- plugins/dynatrace/package.json | 2 +- .../example-todo-list-backend/package.json | 2 +- plugins/example-todo-list-common/package.json | 2 +- plugins/example-todo-list/package.json | 2 +- plugins/explore-react/package.json | 2 +- plugins/explore/package.json | 2 +- plugins/firehydrant/package.json | 2 +- plugins/fossa/package.json | 2 +- plugins/gcalendar/package.json | 2 +- plugins/gcp-projects/package.json | 2 +- plugins/git-release-manager/package.json | 2 +- plugins/github-actions/package.json | 2 +- plugins/github-deployments/package.json | 2 +- .../github-pull-requests-board/package.json | 2 +- plugins/gitops-profiles/package.json | 2 +- plugins/gocd/package.json | 2 +- plugins/graphiql/package.json | 2 +- plugins/graphql-backend/package.json | 2 +- plugins/home/package.json | 2 +- plugins/ilert/package.json | 2 +- plugins/jenkins-backend/package.json | 2 +- plugins/jenkins/package.json | 2 +- plugins/kafka/package.json | 2 +- plugins/kubernetes/package.json | 2 +- plugins/lighthouse/package.json | 2 +- plugins/newrelic/package.json | 2 +- plugins/org/package.json | 2 +- plugins/pagerduty/package.json | 2 +- plugins/periskop-backend/package.json | 2 +- plugins/periskop/package.json | 2 +- plugins/permission-backend/package.json | 2 +- plugins/permission-common/package.json | 2 +- plugins/permission-node/package.json | 2 +- plugins/rollbar-backend/package.json | 2 +- plugins/rollbar/package.json | 2 +- .../package.json | 2 +- plugins/scaffolder-backend/package.json | 2 +- plugins/scaffolder/package.json | 2 +- plugins/search/package.json | 2 +- plugins/sentry/package.json | 2 +- plugins/shortcuts/package.json | 2 +- plugins/sonarqube/package.json | 2 +- plugins/splunk-on-call/package.json | 2 +- plugins/stack-overflow/package.json | 2 +- plugins/tech-insights/package.json | 2 +- plugins/tech-radar/package.json | 2 +- .../techdocs-addons-test-utils/package.json | 2 +- plugins/techdocs-backend/package.json | 2 +- .../package.json | 2 +- plugins/techdocs/package.json | 2 +- plugins/todo-backend/package.json | 2 +- plugins/todo/package.json | 2 +- plugins/user-settings/package.json | 2 +- plugins/vault-backend/package.json | 2 +- plugins/vault/package.json | 2 +- plugins/xcmetrics/package.json | 2 +- yarn.lock | 128 +++++++++--------- 104 files changed, 269 insertions(+), 166 deletions(-) create mode 100644 .changeset/renovate-0546761.md diff --git a/.changeset/renovate-0546761.md b/.changeset/renovate-0546761.md new file mode 100644 index 0000000000..ed7b8b19a3 --- /dev/null +++ b/.changeset/renovate-0546761.md @@ -0,0 +1,103 @@ +--- +'@backstage/backend-common': patch +'@backstage/backend-test-utils': patch +'@backstage/catalog-client': patch +'@backstage/cli': patch +'@backstage/config-loader': patch +'@backstage/core-app-api': patch +'@backstage/core-components': patch +'@backstage/core-plugin-api': patch +'@backstage/integration-react': patch +'@backstage/integration': patch +'@backstage/release-manifests': patch +'@backstage/test-utils': patch +'@backstage/plugin-adr-backend': patch +'@backstage/plugin-adr': patch +'@backstage/plugin-airbrake-backend': patch +'@backstage/plugin-airbrake': patch +'@backstage/plugin-allure': patch +'@backstage/plugin-analytics-module-ga': patch +'@backstage/plugin-apache-airflow': patch +'@backstage/plugin-api-docs': patch +'@backstage/plugin-app-backend': patch +'@backstage/plugin-auth-backend': patch +'@backstage/plugin-auth-node': patch +'@backstage/plugin-azure-devops-backend': patch +'@backstage/plugin-azure-devops': patch +'@backstage/plugin-badges': patch +'@backstage/plugin-bitbucket-cloud-common': patch +'@backstage/plugin-bitrise': patch +'@backstage/plugin-catalog-backend-module-azure': patch +'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch +'@backstage/plugin-catalog-backend-module-bitbucket': patch +'@backstage/plugin-catalog-backend-module-gerrit': patch +'@backstage/plugin-catalog-backend-module-github': patch +'@backstage/plugin-catalog-backend-module-gitlab': patch +'@backstage/plugin-catalog-backend-module-msgraph': patch +'@backstage/plugin-catalog-backend': patch +'@backstage/plugin-catalog-graphql': patch +'@backstage/plugin-catalog-import': patch +'@backstage/plugin-circleci': patch +'@backstage/plugin-cloudbuild': patch +'@backstage/plugin-code-climate': patch +'@backstage/plugin-code-coverage-backend': patch +'@backstage/plugin-code-coverage': patch +'@backstage/plugin-codescene': patch +'@backstage/plugin-config-schema': patch +'@backstage/plugin-cost-insights': patch +'@backstage/plugin-dynatrace': patch +'@backstage/plugin-explore-react': patch +'@backstage/plugin-explore': patch +'@backstage/plugin-firehydrant': patch +'@backstage/plugin-fossa': patch +'@backstage/plugin-gcalendar': patch +'@backstage/plugin-gcp-projects': patch +'@backstage/plugin-git-release-manager': patch +'@backstage/plugin-github-actions': patch +'@backstage/plugin-github-deployments': patch +'@backstage/plugin-github-pull-requests-board': patch +'@backstage/plugin-gitops-profiles': patch +'@backstage/plugin-gocd': patch +'@backstage/plugin-graphiql': patch +'@backstage/plugin-graphql-backend': patch +'@backstage/plugin-home': patch +'@backstage/plugin-ilert': patch +'@backstage/plugin-jenkins-backend': patch +'@backstage/plugin-jenkins': patch +'@backstage/plugin-kafka': patch +'@backstage/plugin-kubernetes': patch +'@backstage/plugin-lighthouse': patch +'@backstage/plugin-newrelic': patch +'@backstage/plugin-org': patch +'@backstage/plugin-pagerduty': patch +'@backstage/plugin-periskop-backend': patch +'@backstage/plugin-periskop': patch +'@backstage/plugin-permission-backend': patch +'@backstage/plugin-permission-common': patch +'@backstage/plugin-permission-node': patch +'@backstage/plugin-rollbar-backend': patch +'@backstage/plugin-rollbar': patch +'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch +'@backstage/plugin-scaffolder-backend': patch +'@backstage/plugin-scaffolder': patch +'@backstage/plugin-search': patch +'@backstage/plugin-sentry': patch +'@backstage/plugin-shortcuts': patch +'@backstage/plugin-sonarqube': patch +'@backstage/plugin-splunk-on-call': patch +'@backstage/plugin-stack-overflow': patch +'@backstage/plugin-tech-insights': patch +'@backstage/plugin-tech-radar': patch +'@backstage/plugin-techdocs-addons-test-utils': patch +'@backstage/plugin-techdocs-backend': patch +'@backstage/plugin-techdocs-module-addons-contrib': patch +'@backstage/plugin-techdocs': patch +'@backstage/plugin-todo-backend': patch +'@backstage/plugin-todo': patch +'@backstage/plugin-user-settings': patch +'@backstage/plugin-vault-backend': patch +'@backstage/plugin-vault': patch +'@backstage/plugin-xcmetrics': patch +--- + +Updated dependency `msw` to `^0.43.0`. diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index 140548e9fb..422465ee6f 100644 --- a/packages/backend-common/package.json +++ b/packages/backend-common/package.json @@ -112,7 +112,7 @@ "better-sqlite3": "^7.5.0", "http-errors": "^2.0.0", "mock-fs": "^5.1.0", - "msw": "^0.42.0", + "msw": "^0.43.0", "mysql2": "^2.2.5", "recursive-readdir": "^2.2.2", "supertest": "^6.1.3" diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index b658c375e5..53953ba85e 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -39,7 +39,7 @@ "@backstage/config": "^1.0.1", "better-sqlite3": "^7.5.0", "knex": "^2.0.0", - "msw": "^0.42.0", + "msw": "^0.43.0", "mysql2": "^2.2.5", "pg": "^8.3.0", "testcontainers": "^8.1.2", diff --git a/packages/catalog-client/package.json b/packages/catalog-client/package.json index 05075d14dc..3fbf662615 100644 --- a/packages/catalog-client/package.json +++ b/packages/catalog-client/package.json @@ -40,7 +40,7 @@ "devDependencies": { "@backstage/cli": "^0.18.0-next.1", "@types/jest": "^26.0.7", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/packages/cli/package.json b/packages/cli/package.json index 7ea86cfb26..aead136ec6 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -152,7 +152,7 @@ "@types/yarnpkg__lockfile": "^1.1.4", "del": "^6.0.0", "mock-fs": "^5.1.0", - "msw": "^0.42.0", + "msw": "^0.43.0", "nodemon": "^2.0.2", "ts-node": "^10.0.0" }, diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json index 3a02afde9b..894e86ef27 100644 --- a/packages/config-loader/package.json +++ b/packages/config-loader/package.json @@ -57,7 +57,7 @@ "@types/node": "^16.11.26", "@types/yup": "^0.29.13", "mock-fs": "^5.1.0", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index 624a9259e9..e7d530417a 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -59,7 +59,7 @@ "@types/node": "^16.11.26", "@types/zen-observable": "^0.8.0", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/packages/core-components/package.json b/packages/core-components/package.json index e297f89eeb..0d27c6419d 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -101,7 +101,7 @@ "@types/react-window": "^1.8.5", "@types/zen-observable": "^0.8.0", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json index eb17f75285..37b69d74f7 100644 --- a/packages/core-plugin-api/package.json +++ b/packages/core-plugin-api/package.json @@ -58,7 +58,7 @@ "@types/prop-types": "^15.7.3", "@types/zen-observable": "^0.8.0", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index 97f5a6491a..bf0a3e471c 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -46,7 +46,7 @@ "@testing-library/user-event": "^14.0.0", "@types/jest": "^26.0.7", "@types/node": "^16.11.26", - "msw": "^0.42.0", + "msw": "^0.43.0", "cross-fetch": "^3.1.5" }, "files": [ diff --git a/packages/integration/package.json b/packages/integration/package.json index 45834ebed7..532797aee8 100644 --- a/packages/integration/package.json +++ b/packages/integration/package.json @@ -48,7 +48,7 @@ "@backstage/test-utils": "^1.1.2-next.1", "@types/jest": "^26.0.7", "@types/luxon": "^2.0.4", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/packages/release-manifests/package.json b/packages/release-manifests/package.json index 822c3c1a52..3309b1b9f1 100644 --- a/packages/release-manifests/package.json +++ b/packages/release-manifests/package.json @@ -37,7 +37,7 @@ }, "devDependencies": { "@backstage/test-utils": "^1.1.2-next.0", - "msw": "^0.42.0", + "msw": "^0.43.0", "@types/jest": "^26.0.7", "@types/node": "^16.0.0" }, diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 1dfa7faf43..0918dcaaac 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -58,7 +58,7 @@ "@backstage/cli": "^0.18.0-next.1", "@types/jest": "^26.0.7", "@types/node": "^16.11.26", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/adr-backend/package.json b/plugins/adr-backend/package.json index 1a42f7ff03..be04a712cc 100644 --- a/plugins/adr-backend/package.json +++ b/plugins/adr-backend/package.json @@ -48,7 +48,7 @@ "@types/marked": "^4.0.0", "@types/supertest": "^2.0.8", "supertest": "^6.1.3", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/adr/package.json b/plugins/adr/package.json index d72c1b697b..80d24e7223 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -55,7 +55,7 @@ "@types/jest": "*", "@types/node": "*", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/airbrake-backend/package.json b/plugins/airbrake-backend/package.json index da6cdcbfef..900161364c 100644 --- a/plugins/airbrake-backend/package.json +++ b/plugins/airbrake-backend/package.json @@ -37,7 +37,7 @@ "@types/http-proxy-middleware": "^0.19.3", "@types/supertest": "^2.0.8", "supertest": "^6.1.6", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json index faa9a98dcb..2f93d533cc 100644 --- a/plugins/airbrake/package.json +++ b/plugins/airbrake/package.json @@ -51,7 +51,7 @@ "@types/node": "^16.11.26", "@types/object-hash": "^2.2.1", "cross-fetch": "^3.1.5", - "msw": "^0.42.0", + "msw": "^0.43.0", "react-router": "6.0.0-beta.0" }, "files": [ diff --git a/plugins/allure/package.json b/plugins/allure/package.json index 4f531adde2..c98b8b7d63 100644 --- a/plugins/allure/package.json +++ b/plugins/allure/package.json @@ -50,7 +50,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json index 0ffbf75d9f..23532af5fa 100644 --- a/plugins/analytics-module-ga/package.json +++ b/plugins/analytics-module-ga/package.json @@ -48,7 +48,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json index c84ee3eaf5..657ecc7ad6 100644 --- a/plugins/apache-airflow/package.json +++ b/plugins/apache-airflow/package.json @@ -45,7 +45,7 @@ "@testing-library/user-event": "^14.0.0", "@types/jest": "^26.0.7", "@types/node": "^16.11.26", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index 38ea1a1fde..eb2e333e8e 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -68,7 +68,7 @@ "@types/node": "^16.11.26", "@types/swagger-ui-react": "^4.1.1", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index a59c80837f..b25a162f4a 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -55,7 +55,7 @@ "@backstage/types": "^1.0.0", "@types/supertest": "^2.0.8", "mock-fs": "^5.1.0", - "msw": "^0.42.0", + "msw": "^0.43.0", "supertest": "^6.1.3" }, "files": [ diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 48b7affb9a..d6b027e6ea 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -88,7 +88,7 @@ "@types/passport-saml": "^1.1.3", "@types/passport-strategy": "^0.2.35", "@types/xml2js": "^0.4.7", - "msw": "^0.42.0", + "msw": "^0.43.0", "supertest": "^6.1.3" }, "files": [ diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json index ad67eefefc..011aade178 100644 --- a/plugins/auth-node/package.json +++ b/plugins/auth-node/package.json @@ -33,7 +33,7 @@ "devDependencies": { "@backstage/cli": "^0.18.0-next.1", "lodash": "^4.17.21", - "msw": "^0.42.0", + "msw": "^0.43.0", "uuid": "^8.0.0" }, "files": [ diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json index 2126bfced7..cff9eaf07e 100644 --- a/plugins/azure-devops-backend/package.json +++ b/plugins/azure-devops-backend/package.json @@ -38,7 +38,7 @@ "@backstage/cli": "^0.18.0-next.1", "@types/supertest": "^2.0.8", "supertest": "^6.1.6", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json index 7fdb37e859..6ab9760f66 100644 --- a/plugins/azure-devops/package.json +++ b/plugins/azure-devops/package.json @@ -59,7 +59,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/badges/package.json b/plugins/badges/package.json index fe5df1fe22..6972ba80ae 100644 --- a/plugins/badges/package.json +++ b/plugins/badges/package.json @@ -56,7 +56,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/bitbucket-cloud-common/package.json b/plugins/bitbucket-cloud-common/package.json index c84303fece..d5a686a1cd 100644 --- a/plugins/bitbucket-cloud-common/package.json +++ b/plugins/bitbucket-cloud-common/package.json @@ -34,7 +34,7 @@ "devDependencies": { "@backstage/cli": "^0.18.0-next.1", "@openapitools/openapi-generator-cli": "^2.4.26", - "msw": "^0.42.0", + "msw": "^0.43.0", "ts-morph": "^15.0.0" }, "files": [ diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index 2ad5cf3650..07ac2ca46e 100644 --- a/plugins/bitrise/package.json +++ b/plugins/bitrise/package.json @@ -53,7 +53,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "@types/recharts": "^1.8.15", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index 4cb1639a36..6256a01a72 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -42,7 +42,7 @@ "@backstage/plugin-catalog-backend": "^1.2.1-next.1", "@backstage/types": "^1.0.0", "lodash": "^4.17.21", - "msw": "^0.42.0", + "msw": "^0.43.0", "uuid": "^8.0.0", "node-fetch": "^2.6.7", "winston": "^3.2.1" diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index 663c0b37fe..b272cb8c29 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/package.json +++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json @@ -45,7 +45,7 @@ "@backstage/backend-common": "^0.14.1-next.1", "@backstage/backend-test-utils": "^0.1.26-next.1", "@backstage/cli": "^0.18.0-next.1", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json index 56b0c16eec..4eb2a85e0e 100644 --- a/plugins/catalog-backend-module-bitbucket/package.json +++ b/plugins/catalog-backend-module-bitbucket/package.json @@ -42,7 +42,7 @@ "@backstage/plugin-catalog-backend": "^1.2.1-next.1", "@backstage/types": "^1.0.0", "lodash": "^4.17.21", - "msw": "^0.42.0", + "msw": "^0.43.0", "node-fetch": "^2.6.7", "winston": "^3.2.1" }, diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index dd4c07c044..6c4bd63659 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -36,7 +36,7 @@ "@backstage/integration": "^1.2.2-next.1", "@backstage/plugin-catalog-backend": "^1.2.1-next.1", "fs-extra": "10.1.0", - "msw": "^0.42.0", + "msw": "^0.43.0", "node-fetch": "^2.6.7", "uuid": "^8.0.0", "winston": "^3.2.1" diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index ffe8e38e32..eae503c507 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -43,7 +43,7 @@ "@backstage/types": "^1.0.0", "@octokit/graphql": "^4.5.8", "lodash": "^4.17.21", - "msw": "^0.42.0", + "msw": "^0.43.0", "node-fetch": "^2.6.7", "uuid": "^8.0.0", "winston": "^3.2.1" diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index a4240119e3..47f48af481 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -42,7 +42,7 @@ "@backstage/plugin-catalog-backend": "^1.2.1-next.1", "@backstage/types": "^1.0.0", "lodash": "^4.17.21", - "msw": "^0.42.0", + "msw": "^0.43.0", "node-fetch": "^2.6.7", "winston": "^3.2.1", "uuid": "^8.0.0" diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index ca33339c1d..921d198b8b 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -52,7 +52,7 @@ "@backstage/backend-test-utils": "^0.1.26-next.2", "@backstage/cli": "^0.18.0-next.2", "@types/lodash": "^4.14.151", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 59870f1a6f..ebed76ca90 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -78,7 +78,7 @@ "@types/supertest": "^2.0.8", "@types/uuid": "^8.0.0", "better-sqlite3": "^7.5.0", - "msw": "^0.42.0", + "msw": "^0.43.0", "supertest": "^6.1.3", "wait-for-expect": "^3.0.2", "luxon": "^2.0.2" diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index c1ca2f9fa6..81b31ffe51 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -53,7 +53,7 @@ "@graphql-codegen/typescript": "^2.4.2", "@graphql-codegen/typescript-resolvers": "^2.4.3", "@graphql-tools/schema": "^8.3.1", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index 12d12380ed..042e85f792 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -70,7 +70,7 @@ "@testing-library/user-event": "^14.0.0", "@types/jest": "^26.0.7", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index d0fb16eae0..c17569db13 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -66,7 +66,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index 418da8677a..2348693d58 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -62,7 +62,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json index 399f9d6d56..40c0861f17 100644 --- a/plugins/code-climate/package.json +++ b/plugins/code-climate/package.json @@ -51,7 +51,7 @@ "@types/luxon": "^2.0.9", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json index 3fa632d709..017b96122e 100644 --- a/plugins/code-coverage-backend/package.json +++ b/plugins/code-coverage-backend/package.json @@ -42,7 +42,7 @@ "@backstage/cli": "^0.18.0-next.2", "@types/express-xml-bodyparser": "^0.3.2", "@types/supertest": "^2.0.8", - "msw": "^0.42.0", + "msw": "^0.43.0", "supertest": "^6.1.6", "xml2js": "^0.4.23" }, diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index 98e5905e2e..68cd7d7990 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -58,7 +58,7 @@ "@types/node": "^16.11.26", "@types/recharts": "^1.8.15", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index 71cd460d49..85f7096f69 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -47,7 +47,7 @@ "@testing-library/user-event": "^14.0.0", "@types/jest": "*", "@types/node": "*", - "msw": "^0.42.0", + "msw": "^0.43.0", "cross-fetch": "^3.1.5" }, "files": [ diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index 0a7a0a1e7a..c33e7adac3 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -51,7 +51,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index 6c769705ef..beb28546b6 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -76,7 +76,7 @@ "@types/yup": "^0.29.13", "canvas": "^2.6.1", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json index ed7d454b0e..0bf3c2f26c 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -48,7 +48,7 @@ "@types/node": "*", "cross-fetch": "^3.1.5", "express": "^4.18.1", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index e91cbf3bf3..67fc049267 100644 --- a/plugins/example-todo-list-backend/package.json +++ b/plugins/example-todo-list-backend/package.json @@ -39,7 +39,7 @@ "@backstage/cli": "^0.18.0-next.1", "@types/supertest": "^2.0.8", "@types/uuid": "^8.0.0", - "msw": "^0.42.0", + "msw": "^0.43.0", "supertest": "^6.1.6" }, "files": [ diff --git a/plugins/example-todo-list-common/package.json b/plugins/example-todo-list-common/package.json index c19c0d0485..b06328608a 100644 --- a/plugins/example-todo-list-common/package.json +++ b/plugins/example-todo-list-common/package.json @@ -31,7 +31,7 @@ "@backstage/dev-utils": "^1.0.4-next.1", "@backstage/test-utils": "^1.1.2-next.1", "@types/node": "^16.11.26", - "msw": "^0.42.0", + "msw": "^0.43.0", "cross-fetch": "^3.1.5" }, "files": [ diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index b65d32afc9..3531995880 100644 --- a/plugins/example-todo-list/package.json +++ b/plugins/example-todo-list/package.json @@ -45,7 +45,7 @@ "@testing-library/user-event": "^14.0.0", "@types/jest": "^26.0.7", "@types/node": "^16.11.26", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/explore-react/package.json b/plugins/explore-react/package.json index 164f449da7..b23867d8a7 100644 --- a/plugins/explore-react/package.json +++ b/plugins/explore-react/package.json @@ -45,7 +45,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/explore/package.json b/plugins/explore/package.json index ff171fcd5e..729aee7322 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -63,7 +63,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json index 3ddc3bee00..2690fbcb1d 100644 --- a/plugins/firehydrant/package.json +++ b/plugins/firehydrant/package.json @@ -49,7 +49,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index 7a3dedf7f9..223a246151 100644 --- a/plugins/fossa/package.json +++ b/plugins/fossa/package.json @@ -62,7 +62,7 @@ "@testing-library/user-event": "^14.0.0", "@types/jest": "^26.0.7", "@types/node": "^16.11.26", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/gcalendar/package.json b/plugins/gcalendar/package.json index cf7ee0cfbb..3024c80e26 100644 --- a/plugins/gcalendar/package.json +++ b/plugins/gcalendar/package.json @@ -55,7 +55,7 @@ "@types/node": "^16.11.26", "@types/sanitize-html": "^2.6.2", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index 3b5dfd6d52..c3809ffaac 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -57,7 +57,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index 4424954a79..28bfa001a0 100644 --- a/plugins/git-release-manager/package.json +++ b/plugins/git-release-manager/package.json @@ -55,7 +55,7 @@ "@types/node": "^16.11.26", "@types/recharts": "^1.8.15", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index 79b28f4924..eefc7c1f4c 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -65,7 +65,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index b839f27ae7..cbfc076a9b 100644 --- a/plugins/github-deployments/package.json +++ b/plugins/github-deployments/package.json @@ -53,7 +53,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index 193cad018b..c167cc8d88 100644 --- a/plugins/github-pull-requests-board/package.json +++ b/plugins/github-pull-requests-board/package.json @@ -58,7 +58,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "peerDependencies": { "@types/react": "^16.13.1 || ^17.0.0", diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index adfb30bb8f..3b48f5a6a1 100644 --- a/plugins/gitops-profiles/package.json +++ b/plugins/gitops-profiles/package.json @@ -58,7 +58,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/gocd/package.json b/plugins/gocd/package.json index e4774eff87..a7d968d3c7 100644 --- a/plugins/gocd/package.json +++ b/plugins/gocd/package.json @@ -61,7 +61,7 @@ "@types/luxon": "^2.0.4", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index cd0ab9a0b8..0b124ecbc9 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -60,7 +60,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0", + "msw": "^0.43.0", "react-router-dom": "6.0.0-beta.0" }, "files": [ diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json index 887718d415..0664f5a44d 100644 --- a/plugins/graphql-backend/package.json +++ b/plugins/graphql-backend/package.json @@ -53,7 +53,7 @@ "devDependencies": { "@backstage/cli": "^0.18.0-next.1", "@types/supertest": "^2.0.8", - "msw": "^0.42.0", + "msw": "^0.43.0", "supertest": "^6.1.3" }, "files": [ diff --git a/plugins/home/package.json b/plugins/home/package.json index e402a9c636..4800ba1842 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -63,7 +63,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index 201d2c7b25..c844d5bd7e 100644 --- a/plugins/ilert/package.json +++ b/plugins/ilert/package.json @@ -53,7 +53,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index c662bc90ab..bc24160dcf 100644 --- a/plugins/jenkins-backend/package.json +++ b/plugins/jenkins-backend/package.json @@ -45,7 +45,7 @@ "@backstage/cli": "^0.18.0-next.2", "@types/jenkins": "^0.23.1", "@types/supertest": "^2.0.8", - "msw": "^0.42.0", + "msw": "^0.43.0", "supertest": "^6.1.6" }, "files": [ diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index afcce126f0..e70aea32f4 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -65,7 +65,7 @@ "@types/node": "^16.11.26", "@types/testing-library__jest-dom": "^5.9.1", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index 558f6fcc87..522cefb94f 100644 --- a/plugins/kafka/package.json +++ b/plugins/kafka/package.json @@ -51,7 +51,7 @@ "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", "jest-when": "^3.1.0", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index 3ec137654d..0bb8ac0324 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -68,7 +68,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index fe56c08b5f..ea95636060 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -63,7 +63,7 @@ "@types/node": "^16.11.26", "@types/react": "^16.13.1 || ^17.0.0", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index c36a2bf063..61b49060a4 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -57,7 +57,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/org/package.json b/plugins/org/package.json index e1dea81951..9bc58b26bf 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -59,7 +59,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index 1c93732ddb..b638bbd573 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -63,7 +63,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/periskop-backend/package.json b/plugins/periskop-backend/package.json index cb08e57f4d..03be1e44ec 100644 --- a/plugins/periskop-backend/package.json +++ b/plugins/periskop-backend/package.json @@ -37,7 +37,7 @@ "devDependencies": { "@backstage/cli": "^0.18.0-next.1", "@types/supertest": "^2.0.8", - "msw": "^0.42.0", + "msw": "^0.43.0", "supertest": "^6.1.6" }, "files": [ diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json index bd804ff676..a9c538d957 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -53,7 +53,7 @@ "@types/luxon": "^2.0.4", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index cfc0ff899a..4df852d255 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -43,7 +43,7 @@ "@types/lodash": "^4.14.151", "@types/supertest": "^2.0.8", "supertest": "^6.1.6", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/permission-common/package.json b/plugins/permission-common/package.json index 4cf00f71bf..b811b63438 100644 --- a/plugins/permission-common/package.json +++ b/plugins/permission-common/package.json @@ -50,6 +50,6 @@ "devDependencies": { "@backstage/cli": "^0.18.0-next.1", "@types/jest": "^26.0.7", - "msw": "^0.42.0" + "msw": "^0.43.0" } } diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index f8f077cdc0..a0bc4585b0 100644 --- a/plugins/permission-node/package.json +++ b/plugins/permission-node/package.json @@ -46,7 +46,7 @@ "devDependencies": { "@backstage/cli": "^0.18.0-next.1", "@types/supertest": "^2.0.8", - "msw": "^0.42.0", + "msw": "^0.43.0", "supertest": "^6.1.3" }, "files": [ diff --git a/plugins/rollbar-backend/package.json b/plugins/rollbar-backend/package.json index 718e0ccff5..8f8be07621 100644 --- a/plugins/rollbar-backend/package.json +++ b/plugins/rollbar-backend/package.json @@ -53,7 +53,7 @@ "@backstage/backend-test-utils": "^0.1.26-next.1", "@backstage/cli": "^0.18.0-next.1", "@types/supertest": "^2.0.8", - "msw": "^0.42.0", + "msw": "^0.43.0", "supertest": "^6.1.3" }, "files": [ diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index 56d9d39006..1ba43e05bc 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -65,7 +65,7 @@ "@types/node": "^16.11.26", "@types/react": "^16.13.1 || ^17.0.0", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index 0420599cec..f953bac5cd 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/package.json +++ b/plugins/scaffolder-backend-module-cookiecutter/package.json @@ -41,7 +41,7 @@ "@types/jest": "^26.0.7", "@types/command-exists": "^1.2.0", "mock-fs": "^5.1.0", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index a7b9e870d8..a70e60f714 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -88,7 +88,7 @@ "esbuild": "^0.14.1", "jest-when": "^3.1.0", "mock-fs": "^5.1.0", - "msw": "^0.42.0", + "msw": "^0.43.0", "supertest": "^6.1.3", "yaml": "^1.10.0" }, diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 070b45c78c..c371c47907 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -94,7 +94,7 @@ "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", "event-source-polyfill": "1.0.25", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/search/package.json b/plugins/search/package.json index a558166fb0..ed700e643f 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -68,7 +68,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index 639f9c7dbe..7b913fcefe 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -65,7 +65,7 @@ "@types/node": "^16.11.26", "@types/react": "^16.13.1 || ^17.0.0", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index b72d20e402..2acbd5db5d 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -52,7 +52,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index 39c9c6b915..beca17ae35 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -62,7 +62,7 @@ "@testing-library/user-event": "^14.0.0", "@types/jest": "^26.0.7", "@types/node": "^16.11.26", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index 11a4495723..6d0b2ac632 100644 --- a/plugins/splunk-on-call/package.json +++ b/plugins/splunk-on-call/package.json @@ -62,7 +62,7 @@ "@types/luxon": "^2.0.4", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "configSchema": "config.d.ts", "files": [ diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json index 917e9e23d9..e1245b743a 100644 --- a/plugins/stack-overflow/package.json +++ b/plugins/stack-overflow/package.json @@ -50,7 +50,7 @@ "@testing-library/user-event": "^14.0.0", "@types/jest": "^26.0.7", "@types/node": "^16.11.26", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json index de2e560a9d..75308d67bc 100644 --- a/plugins/tech-insights/package.json +++ b/plugins/tech-insights/package.json @@ -57,7 +57,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index 12ed7a1631..421297fcca 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -62,7 +62,7 @@ "@types/node": "^16.11.26", "@types/react": "^16.13.1 || ^17.0.0", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index f61a763eaf..34580c7475 100644 --- a/plugins/techdocs-addons-test-utils/package.json +++ b/plugins/techdocs-addons-test-utils/package.json @@ -63,7 +63,7 @@ "@testing-library/user-event": "^14.0.0", "@types/jest": "^26.0.7", "@types/node": "^16.11.26", - "msw": "^0.42.0", + "msw": "^0.43.0", "cross-fetch": "^3.1.5" }, "files": [ diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index e7f4ad6ef1..deabdea689 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -60,7 +60,7 @@ "@backstage/cli": "^0.18.0-next.2", "@backstage/plugin-search-backend-node": "0.6.3-next.1", "@types/dockerode": "^3.3.0", - "msw": "^0.42.0", + "msw": "^0.43.0", "supertest": "^6.1.3" }, "files": [ diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index cdb4a5237e..e089428dbe 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -62,7 +62,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "@types/react": "^16.13.1 || ^17.0.0", - "msw": "^0.42.0", + "msw": "^0.43.0", "cross-fetch": "^3.1.5" }, "files": [ diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 292cd3fbd8..55b4a7c707 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -81,7 +81,7 @@ "@types/node": "^16.11.26", "canvas": "^2.6.1", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist", diff --git a/plugins/todo-backend/package.json b/plugins/todo-backend/package.json index e1214f8dc1..a49bd6fae5 100644 --- a/plugins/todo-backend/package.json +++ b/plugins/todo-backend/package.json @@ -45,7 +45,7 @@ "devDependencies": { "@backstage/cli": "^0.18.0-next.1", "@types/supertest": "^2.0.8", - "msw": "^0.42.0", + "msw": "^0.43.0", "supertest": "^6.1.3" }, "files": [ diff --git a/plugins/todo/package.json b/plugins/todo/package.json index ffc93bbdaa..255a58a0d5 100644 --- a/plugins/todo/package.json +++ b/plugins/todo/package.json @@ -55,7 +55,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0", + "msw": "^0.43.0", "react-router": "6.0.0-beta.0" }, "files": [ diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 99959b1a21..e2527933ee 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -58,7 +58,7 @@ "@types/jest": "^26.0.7", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json index bcc8186990..df5d0f5fa6 100644 --- a/plugins/vault-backend/package.json +++ b/plugins/vault-backend/package.json @@ -54,7 +54,7 @@ "@backstage/cli": "^0.18.0-next.2", "@types/compression": "^1.7.2", "@types/supertest": "^2.0.8", - "msw": "^0.42.0", + "msw": "^0.43.0", "supertest": "^6.1.6" }, "files": [ diff --git a/plugins/vault/package.json b/plugins/vault/package.json index ff795cc53f..43ac2fdb26 100644 --- a/plugins/vault/package.json +++ b/plugins/vault/package.json @@ -59,7 +59,7 @@ "@types/jest": "*", "@types/node": "*", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index 04a74d5b57..67a63f0342 100644 --- a/plugins/xcmetrics/package.json +++ b/plugins/xcmetrics/package.json @@ -51,7 +51,7 @@ "@types/luxon": "^2.0.4", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.42.0" + "msw": "^0.43.0" }, "files": [ "dist" diff --git a/yarn.lock b/yarn.lock index 3b1cc42bef..0acc17881a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12587,63 +12587,63 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: safe-buffer "^5.1.1" "example-app@link:packages/app": - version "0.2.73-next.1" + version "0.2.73-next.2" dependencies: - "@backstage/app-defaults" "^1.0.4-next.1" - "@backstage/catalog-model" "^1.1.0-next.1" - "@backstage/cli" "^0.18.0-next.1" + "@backstage/app-defaults" "^1.0.4-next.2" + "@backstage/catalog-model" "^1.1.0-next.2" + "@backstage/cli" "^0.18.0-next.2" "@backstage/config" "^1.0.1" "@backstage/core-app-api" "^1.0.4-next.0" - "@backstage/core-components" "^0.9.6-next.1" + "@backstage/core-components" "^0.10.0-next.2" "@backstage/core-plugin-api" "^1.0.3" - "@backstage/integration-react" "^1.1.2-next.1" - "@backstage/plugin-airbrake" "^0.3.7-next.1" - "@backstage/plugin-apache-airflow" "^0.2.0-next.1" - "@backstage/plugin-api-docs" "^0.8.7-next.1" - "@backstage/plugin-azure-devops" "^0.1.23-next.1" - "@backstage/plugin-badges" "^0.2.31-next.1" - "@backstage/plugin-catalog" "^1.3.1-next.1" + "@backstage/integration-react" "^1.1.2-next.2" + "@backstage/plugin-airbrake" "^0.3.7-next.2" + "@backstage/plugin-apache-airflow" "^0.2.0-next.2" + "@backstage/plugin-api-docs" "^0.8.7-next.2" + "@backstage/plugin-azure-devops" "^0.1.23-next.2" + "@backstage/plugin-badges" "^0.2.31-next.2" + "@backstage/plugin-catalog" "^1.4.0-next.2" "@backstage/plugin-catalog-common" "^1.0.4-next.0" - "@backstage/plugin-catalog-graph" "^0.2.19-next.1" - "@backstage/plugin-catalog-import" "^0.8.10-next.1" - "@backstage/plugin-catalog-react" "^1.1.2-next.1" - "@backstage/plugin-circleci" "^0.3.7-next.1" - "@backstage/plugin-cloudbuild" "^0.3.7-next.1" - "@backstage/plugin-code-coverage" "^0.1.34-next.1" - "@backstage/plugin-cost-insights" "^0.11.29-next.1" - "@backstage/plugin-dynatrace" "^0.1.1-next.1" - "@backstage/plugin-explore" "^0.3.38-next.1" - "@backstage/plugin-gcalendar" "^0.3.3-next.1" - "@backstage/plugin-gcp-projects" "^0.3.26-next.1" - "@backstage/plugin-github-actions" "^0.5.7-next.1" - "@backstage/plugin-gocd" "^0.1.13-next.1" - "@backstage/plugin-graphiql" "^0.2.39-next.1" - "@backstage/plugin-home" "^0.4.23-next.1" - "@backstage/plugin-jenkins" "^0.7.6-next.1" - "@backstage/plugin-kafka" "^0.3.7-next.1" - "@backstage/plugin-kubernetes" "^0.6.7-next.1" - "@backstage/plugin-lighthouse" "^0.3.7-next.1" - "@backstage/plugin-newrelic" "^0.3.25-next.1" - "@backstage/plugin-newrelic-dashboard" "^0.1.15-next.1" - "@backstage/plugin-org" "^0.5.7-next.1" - "@backstage/plugin-pagerduty" "0.5.0-next.1" + "@backstage/plugin-catalog-graph" "^0.2.19-next.2" + "@backstage/plugin-catalog-import" "^0.8.10-next.2" + "@backstage/plugin-catalog-react" "^1.1.2-next.2" + "@backstage/plugin-circleci" "^0.3.7-next.2" + "@backstage/plugin-cloudbuild" "^0.3.7-next.2" + "@backstage/plugin-code-coverage" "^0.1.34-next.2" + "@backstage/plugin-cost-insights" "^0.11.29-next.2" + "@backstage/plugin-dynatrace" "^0.1.1-next.2" + "@backstage/plugin-explore" "^0.3.38-next.2" + "@backstage/plugin-gcalendar" "^0.3.3-next.2" + "@backstage/plugin-gcp-projects" "^0.3.26-next.2" + "@backstage/plugin-github-actions" "^0.5.7-next.2" + "@backstage/plugin-gocd" "^0.1.13-next.2" + "@backstage/plugin-graphiql" "^0.2.39-next.2" + "@backstage/plugin-home" "^0.4.23-next.2" + "@backstage/plugin-jenkins" "^0.7.6-next.2" + "@backstage/plugin-kafka" "^0.3.7-next.2" + "@backstage/plugin-kubernetes" "^0.6.7-next.2" + "@backstage/plugin-lighthouse" "^0.3.7-next.2" + "@backstage/plugin-newrelic" "^0.3.25-next.2" + "@backstage/plugin-newrelic-dashboard" "^0.1.15-next.2" + "@backstage/plugin-org" "^0.5.7-next.2" + "@backstage/plugin-pagerduty" "0.5.0-next.2" "@backstage/plugin-permission-react" "^0.4.3-next.0" - "@backstage/plugin-rollbar" "^0.4.7-next.1" - "@backstage/plugin-scaffolder" "^1.4.0-next.1" - "@backstage/plugin-search" "^0.9.1-next.1" + "@backstage/plugin-rollbar" "^0.4.7-next.2" + "@backstage/plugin-scaffolder" "^1.4.0-next.2" + "@backstage/plugin-search" "^0.9.1-next.2" "@backstage/plugin-search-common" "^0.3.6-next.0" - "@backstage/plugin-search-react" "^0.2.2-next.1" - "@backstage/plugin-sentry" "^0.3.45-next.1" - "@backstage/plugin-shortcuts" "^0.2.8-next.1" - "@backstage/plugin-stack-overflow" "^0.1.3-next.1" - "@backstage/plugin-tech-insights" "^0.2.3-next.1" - "@backstage/plugin-tech-radar" "^0.5.14-next.1" - "@backstage/plugin-techdocs" "^1.2.1-next.1" - "@backstage/plugin-techdocs-module-addons-contrib" "^1.0.2-next.1" - "@backstage/plugin-techdocs-react" "^1.0.2-next.0" - "@backstage/plugin-todo" "^0.2.9-next.1" - "@backstage/plugin-user-settings" "^0.4.6-next.1" - "@backstage/theme" "^0.2.16-next.0" + "@backstage/plugin-search-react" "^0.2.2-next.2" + "@backstage/plugin-sentry" "^0.3.45-next.2" + "@backstage/plugin-shortcuts" "^0.2.8-next.2" + "@backstage/plugin-stack-overflow" "^0.1.3-next.2" + "@backstage/plugin-tech-insights" "^0.2.3-next.2" + "@backstage/plugin-tech-radar" "^0.5.14-next.2" + "@backstage/plugin-techdocs" "^1.2.1-next.2" + "@backstage/plugin-techdocs-module-addons-contrib" "^1.0.2-next.2" + "@backstage/plugin-techdocs-react" "^1.0.2-next.1" + "@backstage/plugin-todo" "^0.2.9-next.2" + "@backstage/plugin-user-settings" "^0.4.6-next.2" + "@backstage/theme" "^0.2.16-next.1" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "4.0.0-alpha.57" @@ -18941,10 +18941,10 @@ msw@^0.39.2: type-fest "^1.2.2" yargs "^17.3.1" -msw@^0.42.0: - version "0.42.3" - resolved "https://registry.npmjs.org/msw/-/msw-0.42.3.tgz#150c475e2cb6d53c67503bd0e3f6251bfd075328" - integrity sha512-zrKBIGCDsNUCZLd3DLSeUtRruZ0riwJgORg9/bSDw3D0PTI8XUGAK3nC0LJA9g0rChGuKaWK/SwObA8wpFrz4g== +msw@^0.43.0: + version "0.43.0" + resolved "https://registry.npmjs.org/msw/-/msw-0.43.0.tgz#10c6fc3fb1752c0a144179e5ab04c6a512cc9959" + integrity sha512-XJylZP0qW3D5WUGWh9FFefJEl3MGG4y1I+/8a833d0eedm6B+GaPm6wPVZNcnlS2YVTagvEgShVJ7ZtY66tTRQ== dependencies: "@mswjs/cookies" "^0.2.0" "@mswjs/interceptors" "^0.16.3" @@ -24578,21 +24578,21 @@ tdigest@^0.1.1: bintrees "1.0.1" "techdocs-cli-embedded-app@link:packages/techdocs-cli-embedded-app": - version "0.2.72-next.1" + version "0.2.72-next.2" dependencies: - "@backstage/app-defaults" "^1.0.4-next.1" - "@backstage/catalog-model" "^1.1.0-next.1" - "@backstage/cli" "^0.18.0-next.1" + "@backstage/app-defaults" "^1.0.4-next.2" + "@backstage/catalog-model" "^1.1.0-next.2" + "@backstage/cli" "^0.18.0-next.2" "@backstage/config" "^1.0.1" "@backstage/core-app-api" "^1.0.4-next.0" - "@backstage/core-components" "^0.9.6-next.1" + "@backstage/core-components" "^0.10.0-next.2" "@backstage/core-plugin-api" "^1.0.3" - "@backstage/integration-react" "^1.1.2-next.1" - "@backstage/plugin-catalog" "^1.3.1-next.1" - "@backstage/plugin-techdocs" "^1.2.1-next.1" - "@backstage/plugin-techdocs-react" "^1.0.2-next.0" + "@backstage/integration-react" "^1.1.2-next.2" + "@backstage/plugin-catalog" "^1.4.0-next.2" + "@backstage/plugin-techdocs" "^1.2.1-next.2" + "@backstage/plugin-techdocs-react" "^1.0.2-next.1" "@backstage/test-utils" "^1.1.2-next.1" - "@backstage/theme" "^0.2.16-next.0" + "@backstage/theme" "^0.2.16-next.1" "@material-ui/core" "^4.11.0" "@material-ui/icons" "^4.9.1" history "^5.0.0" From 1bd00811bcda77bb7004863a49cd896fbb0de5bf Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 5 Jul 2022 11:58:27 +0200 Subject: [PATCH 191/231] workflows: fix pr-sync approval Signed-off-by: Patrik Oldsberg --- .github/workflows/pr.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 746b6c80de..c8fe3e2d69 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -21,8 +21,9 @@ jobs: if: github.repository == 'backstage/backstage' && ( github.event.pull_request || github.event.issue.pull_request ) steps: - name: PR sync - uses: backstage/actions/pr-sync@v0.4.0 + uses: backstage/actions/pr-sync@v0.5.0 with: + github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }} app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} installation-id: ${{ secrets.BACKSTAGE_GOALIE_INSTALLATION_ID }} From dcba4404597d60d63a267138e36eef2a40750bf7 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Mon, 4 Jul 2022 15:52:18 +0200 Subject: [PATCH 192/231] refactor: apply review suggestions Signed-off-by: Camila Belo --- .changeset/two-owls-cry.md | 1 - .../src/engines/ElasticSearchSearchEngine.test.ts | 2 +- .../src/PgSearchEngine/PgSearchEngine.test.ts | 15 --------------- .../src/PgSearchEngine/PgSearchEngine.ts | 7 ------- .../src/engines/LunrSearchEngine.test.ts | 2 +- .../src/engines/LunrSearchEngine.ts | 2 +- plugins/search-backend/src/service/router.ts | 14 ++++++-------- 7 files changed, 9 insertions(+), 34 deletions(-) diff --git a/.changeset/two-owls-cry.md b/.changeset/two-owls-cry.md index b469561ad7..ca371781a1 100644 --- a/.changeset/two-owls-cry.md +++ b/.changeset/two-owls-cry.md @@ -1,6 +1,5 @@ --- '@backstage/plugin-search-backend-module-elasticsearch': patch -'@backstage/plugin-search-backend-module-pg': patch --- Throws `MissingIndexError` when no index of type exist. diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.test.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.test.ts index d794ea668d..b59c67c69c 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.test.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngine.test.ts @@ -813,7 +813,7 @@ describe('ElasticSearchSearchEngine', () => { filters: {}, }), ).rejects.toThrow( - 'Missing index for unknown__search. This means there are no documents to search through', + 'Missing index for unknown__search. This means there are no documents to search through.', ); }); }); diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts index e106cd6f06..3ed002567e 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.test.ts @@ -271,21 +271,6 @@ describe('PgSearchEngine', () => { limit: 26, }); }); - - it('should throws missing index error', async () => { - database.transaction.mockImplementation(fn => fn(tx)); - database.query.mockResolvedValue([]); - await expect( - async () => - await searchEngine.query({ - term: 'testTerm', - types: ['unknown'], - filters: {}, - }), - ).rejects.toThrow( - 'Missing index for unknown. This means there are no documents to search through', - ); - }); }); }); diff --git a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts index 065f25878c..bf98c58de9 100644 --- a/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts +++ b/plugins/search-backend-module-pg/src/PgSearchEngine/PgSearchEngine.ts @@ -15,7 +15,6 @@ */ import { PluginDatabaseManager } from '@backstage/backend-common'; import { SearchEngine } from '@backstage/plugin-search-backend-node'; -import { MissingIndexError } from '@backstage/plugin-search-backend-node'; import { SearchQuery, IndexableResultSet, @@ -93,12 +92,6 @@ export class PgSearchEngine implements SearchEngine { this.databaseStore.query(tx, pgQuery), ); - if (pgQuery?.types && !rows.length) { - throw new MissingIndexError( - `Missing index for ${pgQuery.types}. This means there are no documents to search through.`, - ); - } - // We requested one result more than the page size to know whether there is // another page. const { page } = decodePageCursor(query.pageCursor); diff --git a/plugins/search-backend-node/src/engines/LunrSearchEngine.test.ts b/plugins/search-backend-node/src/engines/LunrSearchEngine.test.ts index 0bc2e223a6..1f69460448 100644 --- a/plugins/search-backend-node/src/engines/LunrSearchEngine.test.ts +++ b/plugins/search-backend-node/src/engines/LunrSearchEngine.test.ts @@ -959,7 +959,7 @@ describe('LunrSearchEngine', () => { filters: {}, }), ).rejects.toThrow( - 'Missing index for unknown. This means there are no documents to search through', + "Missing index for unknown. This could be because the index hasn't been created yet or there was a problem during index creation.", ); }); }); diff --git a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts index a06a565d3b..ec8550d721 100644 --- a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts +++ b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts @@ -170,7 +170,7 @@ export class LunrSearchEngine implements SearchEngine { if (documentTypes?.length && !indexKeys.length) { throw new MissingIndexError( - `Missing index for ${documentTypes?.toString()}. This means there are no documents to search through.`, + `Missing index for ${documentTypes?.toString()}. This could be because the index hasn't been created yet or there was a problem during index creation.`, ); } diff --git a/plugins/search-backend/src/service/router.ts b/plugins/search-backend/src/service/router.ts index 0fbacb018e..e4ac233406 100644 --- a/plugins/search-backend/src/service/router.ts +++ b/plugins/search-backend/src/service/router.ts @@ -19,7 +19,7 @@ import Router from 'express-promise-router'; import { Logger } from 'winston'; import { z } from 'zod'; import { errorHandler } from '@backstage/backend-common'; -import { InputError } from '@backstage/errors'; +import { ErrorResponseBody, InputError } from '@backstage/errors'; import { Config } from '@backstage/config'; import { JsonObject, JsonValue } from '@backstage/types'; import { getBearerTokenFromAuthorizationHeader } from '@backstage/plugin-auth-node'; @@ -33,10 +33,7 @@ import { IndexableResultSet, SearchResultSet, } from '@backstage/plugin-search-common'; -import { - SearchEngine, - MissingIndexError, -} from '@backstage/plugin-search-backend-node'; +import { SearchEngine } from '@backstage/plugin-search-backend-node'; import { AuthorizedSearchEngine } from './AuthorizedSearchEngine'; const jsonObjectSchema: z.ZodSchema = z.lazy(() => { @@ -134,7 +131,7 @@ export async function createRouter( '/query', async ( req: express.Request, - res: express.Response, + res: express.Response, ) => { const parseResult = requestSchema.safeParse(req.query); @@ -161,8 +158,9 @@ export async function createRouter( res.send(filterResultSet(toSearchResults(resultSet))); } catch (error) { - if (error instanceof MissingIndexError) { - res.status(400).json(error.message); + if (error.name === 'MissingIndexError') { + // re-throw and let the default error handler middleware captures it and serializes it with the right response code on the standard form + throw error; } throw new Error( From 606c403e30023cb4b8cd73a0ab17ec13b4ccfa8c Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 5 Jul 2022 13:31:54 +0200 Subject: [PATCH 193/231] chore: updating some of the version query Signed-off-by: blam --- packages/cli/templates/default-backend-plugin/package.json.hbs | 2 +- packages/cli/templates/default-plugin/package.json.hbs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/cli/templates/default-backend-plugin/package.json.hbs b/packages/cli/templates/default-backend-plugin/package.json.hbs index 2416fd75cb..4e8ee254b9 100644 --- a/packages/cli/templates/default-backend-plugin/package.json.hbs +++ b/packages/cli/templates/default-backend-plugin/package.json.hbs @@ -41,7 +41,7 @@ "@backstage/cli": "{{versionQuery '@backstage/cli'}}", "@types/supertest": "{{versionQuery '@types/supertest' '2.0.8'}}", "supertest": "{{versionQuery 'supertest' '4.0.2'}}", - "msw": "{{versionQuery 'msw' '0.42.0'}}" + "msw": "{{versionQuery 'msw' '0.43.0'}}" }, "files": [ "dist" diff --git a/packages/cli/templates/default-plugin/package.json.hbs b/packages/cli/templates/default-plugin/package.json.hbs index 34a0548b29..490f18d474 100644 --- a/packages/cli/templates/default-plugin/package.json.hbs +++ b/packages/cli/templates/default-plugin/package.json.hbs @@ -49,7 +49,7 @@ "@testing-library/user-event": "{{versionQuery '@testing-library/user-event' '14.0.0'}}", "@types/jest": "{{versionQuery '@types/jest' '26.0.7'}}", "@types/node": "{{versionQuery '@types/node' '16.11.26'}}", - "msw": "{{versionQuery 'msw' '0.42.0'}}", + "msw": "{{versionQuery 'msw' '0.43.0'}}", "cross-fetch": "{{versionQuery 'cross-fetch' '3.1.5'}}" }, "files": [ From e96a7cf1471f452de3387f3c07b22fa2e18e90df Mon Sep 17 00:00:00 2001 From: Matteo Silvestri Date: Tue, 5 Jul 2022 13:47:32 +0200 Subject: [PATCH 194/231] code linting Signed-off-by: Matteo Silvestri --- .../src/scaffolder/actions/builtin/publish/gitlab.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts index e36bb0aa68..80d082bc4b 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts @@ -174,7 +174,7 @@ export function createPublishGitlabAction(options: { if (setUserAsOwner && integrationConfig.config.token) { const adminClient = new Gitlab({ host: integrationConfig.config.baseUrl, - ['token']: integrationConfig.config.token, + token: integrationConfig.config.token, }); await adminClient.ProjectMembers.add(projectId, userId, 50); From 27d130b232623d5577bed13b4d2e06872592f84e Mon Sep 17 00:00:00 2001 From: Matteo Silvestri Date: Tue, 5 Jul 2022 13:48:27 +0200 Subject: [PATCH 195/231] add comment explaining GitLab behaviour Signed-off-by: Matteo Silvestri --- .../src/scaffolder/actions/builtin/publish/gitlab.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts index 80d082bc4b..4fe55b77a2 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts @@ -171,6 +171,12 @@ export function createPublishGitlabAction(options: { visibility: repoVisibility, }); + // When setUserAsOwner is true the input token is expected to come from an unprivileged user GitLab + // OAuth flow. In this case GitLab works in a way that allows the unprivileged user to + // create the repository, but not to push the default protected branch (e.g. master). + // In order to set the user as owner of the newly created repository we need to check that the + // GitLab integration configuration for the matching host contains a token and use + // such token to bootstrap a new privileged client. if (setUserAsOwner && integrationConfig.config.token) { const adminClient = new Gitlab({ host: integrationConfig.config.baseUrl, From 74329e9d33ca9e1293e28d01a49d69b4e657e5cf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Jul 2022 12:11:14 +0000 Subject: [PATCH 196/231] fix(deps): update dependency qs to v6.11.0 Signed-off-by: Renovate Bot --- yarn.lock | 120 +++++++++++++++++++++++++++--------------------------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7d3f149436..dd85d354df 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12686,63 +12686,63 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: safe-buffer "^5.1.1" "example-app@link:packages/app": - version "0.2.73-next.1" + version "0.2.73-next.2" dependencies: - "@backstage/app-defaults" "^1.0.4-next.1" - "@backstage/catalog-model" "^1.1.0-next.1" - "@backstage/cli" "^0.18.0-next.1" + "@backstage/app-defaults" "^1.0.4-next.2" + "@backstage/catalog-model" "^1.1.0-next.2" + "@backstage/cli" "^0.18.0-next.2" "@backstage/config" "^1.0.1" "@backstage/core-app-api" "^1.0.4-next.0" - "@backstage/core-components" "^0.9.6-next.1" + "@backstage/core-components" "^0.10.0-next.2" "@backstage/core-plugin-api" "^1.0.3" - "@backstage/integration-react" "^1.1.2-next.1" - "@backstage/plugin-airbrake" "^0.3.7-next.1" - "@backstage/plugin-apache-airflow" "^0.2.0-next.1" - "@backstage/plugin-api-docs" "^0.8.7-next.1" - "@backstage/plugin-azure-devops" "^0.1.23-next.1" - "@backstage/plugin-badges" "^0.2.31-next.1" - "@backstage/plugin-catalog" "^1.3.1-next.1" + "@backstage/integration-react" "^1.1.2-next.2" + "@backstage/plugin-airbrake" "^0.3.7-next.2" + "@backstage/plugin-apache-airflow" "^0.2.0-next.2" + "@backstage/plugin-api-docs" "^0.8.7-next.2" + "@backstage/plugin-azure-devops" "^0.1.23-next.2" + "@backstage/plugin-badges" "^0.2.31-next.2" + "@backstage/plugin-catalog" "^1.4.0-next.2" "@backstage/plugin-catalog-common" "^1.0.4-next.0" - "@backstage/plugin-catalog-graph" "^0.2.19-next.1" - "@backstage/plugin-catalog-import" "^0.8.10-next.1" - "@backstage/plugin-catalog-react" "^1.1.2-next.1" - "@backstage/plugin-circleci" "^0.3.7-next.1" - "@backstage/plugin-cloudbuild" "^0.3.7-next.1" - "@backstage/plugin-code-coverage" "^0.1.34-next.1" - "@backstage/plugin-cost-insights" "^0.11.29-next.1" - "@backstage/plugin-dynatrace" "^0.1.1-next.1" - "@backstage/plugin-explore" "^0.3.38-next.1" - "@backstage/plugin-gcalendar" "^0.3.3-next.1" - "@backstage/plugin-gcp-projects" "^0.3.26-next.1" - "@backstage/plugin-github-actions" "^0.5.7-next.1" - "@backstage/plugin-gocd" "^0.1.13-next.1" - "@backstage/plugin-graphiql" "^0.2.39-next.1" - "@backstage/plugin-home" "^0.4.23-next.1" - "@backstage/plugin-jenkins" "^0.7.6-next.1" - "@backstage/plugin-kafka" "^0.3.7-next.1" - "@backstage/plugin-kubernetes" "^0.6.7-next.1" - "@backstage/plugin-lighthouse" "^0.3.7-next.1" - "@backstage/plugin-newrelic" "^0.3.25-next.1" - "@backstage/plugin-newrelic-dashboard" "^0.1.15-next.1" - "@backstage/plugin-org" "^0.5.7-next.1" - "@backstage/plugin-pagerduty" "0.5.0-next.1" + "@backstage/plugin-catalog-graph" "^0.2.19-next.2" + "@backstage/plugin-catalog-import" "^0.8.10-next.2" + "@backstage/plugin-catalog-react" "^1.1.2-next.2" + "@backstage/plugin-circleci" "^0.3.7-next.2" + "@backstage/plugin-cloudbuild" "^0.3.7-next.2" + "@backstage/plugin-code-coverage" "^0.1.34-next.2" + "@backstage/plugin-cost-insights" "^0.11.29-next.2" + "@backstage/plugin-dynatrace" "^0.1.1-next.2" + "@backstage/plugin-explore" "^0.3.38-next.2" + "@backstage/plugin-gcalendar" "^0.3.3-next.2" + "@backstage/plugin-gcp-projects" "^0.3.26-next.2" + "@backstage/plugin-github-actions" "^0.5.7-next.2" + "@backstage/plugin-gocd" "^0.1.13-next.2" + "@backstage/plugin-graphiql" "^0.2.39-next.2" + "@backstage/plugin-home" "^0.4.23-next.2" + "@backstage/plugin-jenkins" "^0.7.6-next.2" + "@backstage/plugin-kafka" "^0.3.7-next.2" + "@backstage/plugin-kubernetes" "^0.6.7-next.2" + "@backstage/plugin-lighthouse" "^0.3.7-next.2" + "@backstage/plugin-newrelic" "^0.3.25-next.2" + "@backstage/plugin-newrelic-dashboard" "^0.1.15-next.2" + "@backstage/plugin-org" "^0.5.7-next.2" + "@backstage/plugin-pagerduty" "0.5.0-next.2" "@backstage/plugin-permission-react" "^0.4.3-next.0" - "@backstage/plugin-rollbar" "^0.4.7-next.1" - "@backstage/plugin-scaffolder" "^1.4.0-next.1" - "@backstage/plugin-search" "^0.9.1-next.1" + "@backstage/plugin-rollbar" "^0.4.7-next.2" + "@backstage/plugin-scaffolder" "^1.4.0-next.2" + "@backstage/plugin-search" "^0.9.1-next.2" "@backstage/plugin-search-common" "^0.3.6-next.0" - "@backstage/plugin-search-react" "^0.2.2-next.1" - "@backstage/plugin-sentry" "^0.3.45-next.1" - "@backstage/plugin-shortcuts" "^0.2.8-next.1" - "@backstage/plugin-stack-overflow" "^0.1.3-next.1" - "@backstage/plugin-tech-insights" "^0.2.3-next.1" - "@backstage/plugin-tech-radar" "^0.5.14-next.1" - "@backstage/plugin-techdocs" "^1.2.1-next.1" - "@backstage/plugin-techdocs-module-addons-contrib" "^1.0.2-next.1" - "@backstage/plugin-techdocs-react" "^1.0.2-next.0" - "@backstage/plugin-todo" "^0.2.9-next.1" - "@backstage/plugin-user-settings" "^0.4.6-next.1" - "@backstage/theme" "^0.2.16-next.0" + "@backstage/plugin-search-react" "^0.2.2-next.2" + "@backstage/plugin-sentry" "^0.3.45-next.2" + "@backstage/plugin-shortcuts" "^0.2.8-next.2" + "@backstage/plugin-stack-overflow" "^0.1.3-next.2" + "@backstage/plugin-tech-insights" "^0.2.3-next.2" + "@backstage/plugin-tech-radar" "^0.5.14-next.2" + "@backstage/plugin-techdocs" "^1.2.1-next.2" + "@backstage/plugin-techdocs-module-addons-contrib" "^1.0.2-next.2" + "@backstage/plugin-techdocs-react" "^1.0.2-next.1" + "@backstage/plugin-todo" "^0.2.9-next.2" + "@backstage/plugin-user-settings" "^0.4.6-next.2" + "@backstage/theme" "^0.2.16-next.1" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@material-ui/lab" "4.0.0-alpha.57" @@ -24695,21 +24695,21 @@ tdigest@^0.1.1: bintrees "1.0.1" "techdocs-cli-embedded-app@link:packages/techdocs-cli-embedded-app": - version "0.2.72-next.1" + version "0.2.72-next.2" dependencies: - "@backstage/app-defaults" "^1.0.4-next.1" - "@backstage/catalog-model" "^1.1.0-next.1" - "@backstage/cli" "^0.18.0-next.1" + "@backstage/app-defaults" "^1.0.4-next.2" + "@backstage/catalog-model" "^1.1.0-next.2" + "@backstage/cli" "^0.18.0-next.2" "@backstage/config" "^1.0.1" "@backstage/core-app-api" "^1.0.4-next.0" - "@backstage/core-components" "^0.9.6-next.1" + "@backstage/core-components" "^0.10.0-next.2" "@backstage/core-plugin-api" "^1.0.3" - "@backstage/integration-react" "^1.1.2-next.1" - "@backstage/plugin-catalog" "^1.3.1-next.1" - "@backstage/plugin-techdocs" "^1.2.1-next.1" - "@backstage/plugin-techdocs-react" "^1.0.2-next.0" + "@backstage/integration-react" "^1.1.2-next.2" + "@backstage/plugin-catalog" "^1.4.0-next.2" + "@backstage/plugin-techdocs" "^1.2.1-next.2" + "@backstage/plugin-techdocs-react" "^1.0.2-next.1" "@backstage/test-utils" "^1.1.2-next.1" - "@backstage/theme" "^0.2.16-next.0" + "@backstage/theme" "^0.2.16-next.1" "@material-ui/core" "^4.11.0" "@material-ui/icons" "^4.9.1" history "^5.0.0" From 49d98640c1257ce0cc4b93192d72965027e1d6dd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Jul 2022 12:23:56 +0000 Subject: [PATCH 197/231] chore(deps): update backstage/actions action to v0.5.0 Signed-off-by: Renovate Bot --- .github/workflows/ci.yml | 6 +++--- .github/workflows/cron.yml | 2 +- .github/workflows/deploy_nightly.yml | 2 +- .github/workflows/deploy_packages.yml | 4 ++-- .github/workflows/issue.yaml | 2 +- .github/workflows/sync_code-formatting.yml | 2 +- .github/workflows/sync_snyk-github-issues.yml | 2 +- .github/workflows/verify_e2e-linux.yml | 2 +- .github/workflows/verify_storybook.yml | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 14e46ca5ce..e38df375b6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,7 +32,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.2 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -61,7 +61,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.2 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -178,7 +178,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.4.0 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml index 306f91b637..5b5c8b63c8 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -8,7 +8,7 @@ jobs: cron: runs-on: ubuntu-latest steps: - - uses: backstage/actions/cron@v0.4.0 + - uses: backstage/actions/cron@v0.5.0 with: app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} diff --git a/.github/workflows/deploy_nightly.yml b/.github/workflows/deploy_nightly.yml index 15d1d48816..427a7139a0 100644 --- a/.github/workflows/deploy_nightly.yml +++ b/.github/workflows/deploy_nightly.yml @@ -26,7 +26,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.4.0 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml index 78a6d3bb8a..30d4bf9ee2 100644 --- a/.github/workflows/deploy_packages.yml +++ b/.github/workflows/deploy_packages.yml @@ -67,7 +67,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.4.0 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -145,7 +145,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.4.0 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml index c6f62a059d..bc0dd15617 100644 --- a/.github/workflows/issue.yaml +++ b/.github/workflows/issue.yaml @@ -10,4 +10,4 @@ jobs: if: github.repository == 'backstage/backstage' steps: - name: Issue sync - uses: backstage/actions/issue-sync@v0.4.0 + uses: backstage/actions/issue-sync@v0.5.0 diff --git a/.github/workflows/sync_code-formatting.yml b/.github/workflows/sync_code-formatting.yml index f4dbc122cc..0d3add5f12 100644 --- a/.github/workflows/sync_code-formatting.yml +++ b/.github/workflows/sync_code-formatting.yml @@ -20,7 +20,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.4.0 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml index 3d84c18322..9d0726e915 100644 --- a/.github/workflows/sync_snyk-github-issues.yml +++ b/.github/workflows/sync_snyk-github-issues.yml @@ -22,7 +22,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.4.0 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml index 1f7cbb5339..126670b67f 100644 --- a/.github/workflows/verify_e2e-linux.yml +++ b/.github/workflows/verify_e2e-linux.yml @@ -46,7 +46,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.4.0 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml index 9468c9bf68..89679b530a 100644 --- a/.github/workflows/verify_storybook.yml +++ b/.github/workflows/verify_storybook.yml @@ -35,7 +35,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.4.0 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} - name: storybook yarn install From d70aaa76228b1ef3fb3ca369d87e002ce709bf86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 5 Jul 2022 14:38:30 +0200 Subject: [PATCH 198/231] code-coverage: clean up exports MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/beige-carpets-double.md | 9 ++++++++ .changeset/beige-carpets-triple.md | 7 +++++++ plugins/code-coverage-backend/api-report.md | 21 ++----------------- plugins/code-coverage-backend/src/index.ts | 3 ++- .../src/service/router.ts | 10 +++++++++ plugins/code-coverage/api-report.md | 20 +++++------------- .../components/FileExplorer/Highlighter.ts | 1 + .../code-coverage/src/components/Router.tsx | 17 ++++++++++++--- plugins/code-coverage/src/index.ts | 14 ++++++++----- plugins/code-coverage/src/plugin.ts | 8 +++++++ scripts/api-extractor.ts | 2 -- 11 files changed, 67 insertions(+), 45 deletions(-) create mode 100644 .changeset/beige-carpets-double.md create mode 100644 .changeset/beige-carpets-triple.md diff --git a/.changeset/beige-carpets-double.md b/.changeset/beige-carpets-double.md new file mode 100644 index 0000000000..98e0d8d69a --- /dev/null +++ b/.changeset/beige-carpets-double.md @@ -0,0 +1,9 @@ +--- +'@backstage/plugin-code-coverage': minor +--- + +Cleaned up API exports. + +The `Router` export has been removed; users are expected to use `EntityCodeCoverageContent` instead. + +The `isPluginApplicableToEntity` helper has been deprecated, in favor of the `isCodeCoverageAvailable` helper. diff --git a/.changeset/beige-carpets-triple.md b/.changeset/beige-carpets-triple.md new file mode 100644 index 0000000000..5eda26fb02 --- /dev/null +++ b/.changeset/beige-carpets-triple.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-code-coverage-backend': minor +--- + +Cleaned up API exports. + +The `CodeCoverageApi` and `makeRouter` exports have been removed from the backend, since they were not meant to be exported in the first place. diff --git a/plugins/code-coverage-backend/api-report.md b/plugins/code-coverage-backend/api-report.md index 437c48227f..c33874064b 100644 --- a/plugins/code-coverage-backend/api-report.md +++ b/plugins/code-coverage-backend/api-report.md @@ -10,27 +10,10 @@ import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { UrlReader } from '@backstage/backend-common'; -// Warning: (ae-missing-release-tag) "CodeCoverageApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export interface CodeCoverageApi { - // (undocumented) - name: string; -} - -// Warning: (ae-missing-release-tag) "createRouter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) +// @public export function createRouter(options: RouterOptions): Promise; -// Warning: (ae-missing-release-tag) "makeRouter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const makeRouter: (options: RouterOptions) => Promise; - -// Warning: (ae-missing-release-tag) "RouterOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) +// @public export interface RouterOptions { // (undocumented) config: Config; diff --git a/plugins/code-coverage-backend/src/index.ts b/plugins/code-coverage-backend/src/index.ts index 3b1b536ac7..8511c9b71e 100644 --- a/plugins/code-coverage-backend/src/index.ts +++ b/plugins/code-coverage-backend/src/index.ts @@ -20,4 +20,5 @@ * @packageDocumentation */ -export * from './service/router'; +export { createRouter } from './service/router'; +export type { RouterOptions } from './service/router'; diff --git a/plugins/code-coverage-backend/src/service/router.ts b/plugins/code-coverage-backend/src/service/router.ts index 488103c835..37279b549f 100644 --- a/plugins/code-coverage-backend/src/service/router.ts +++ b/plugins/code-coverage-backend/src/service/router.ts @@ -35,6 +35,11 @@ import { Jacoco } from './converter/jacoco'; import { Converter } from './converter'; import { getEntitySourceLocation } from '@backstage/catalog-model'; +/** + * Options for {@link createRouter}. + * + * @public + */ export interface RouterOptions { config: Config; discovery: PluginEndpointDiscovery; @@ -211,6 +216,11 @@ export const makeRouter = async ( return router; }; +/** + * Creates a code-coverage plugin backend router. + * + * @public + */ export async function createRouter( options: RouterOptions, ): Promise { diff --git a/plugins/code-coverage/api-report.md b/plugins/code-coverage/api-report.md index 0e675dec04..152cc93103 100644 --- a/plugins/code-coverage/api-report.md +++ b/plugins/code-coverage/api-report.md @@ -9,8 +9,6 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; import { RouteRef } from '@backstage/core-plugin-api'; -// Warning: (ae-missing-release-tag) "codeCoveragePlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const codeCoveragePlugin: BackstagePlugin< { @@ -19,20 +17,12 @@ export const codeCoveragePlugin: BackstagePlugin< {} >; -// Warning: (ae-missing-release-tag) "EntityCodeCoverageContent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) +// @public export const EntityCodeCoverageContent: () => JSX.Element; -// Warning: (ae-missing-release-tag) "isCodeCoverageAvailable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -const isCodeCoverageAvailable: (entity: Entity) => boolean; -export { isCodeCoverageAvailable }; -export { isCodeCoverageAvailable as isPluginApplicableToEntity }; +// @public +export function isCodeCoverageAvailable(entity: Entity): boolean; -// Warning: (ae-missing-release-tag) "Router" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const Router: () => JSX.Element; +// @public @deprecated (undocumented) +export const isPluginApplicableToEntity: typeof isCodeCoverageAvailable; ``` diff --git a/plugins/code-coverage/src/components/FileExplorer/Highlighter.ts b/plugins/code-coverage/src/components/FileExplorer/Highlighter.ts index 225ca96175..d97d147da3 100644 --- a/plugins/code-coverage/src/components/FileExplorer/Highlighter.ts +++ b/plugins/code-coverage/src/components/FileExplorer/Highlighter.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import 'highlight.js/styles/atom-one-dark.css'; import highlight from 'highlight.js'; diff --git a/plugins/code-coverage/src/components/Router.tsx b/plugins/code-coverage/src/components/Router.tsx index d3342b86eb..190b441c7a 100644 --- a/plugins/code-coverage/src/components/Router.tsx +++ b/plugins/code-coverage/src/components/Router.tsx @@ -13,16 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import React from 'react'; import { Entity } from '@backstage/catalog-model'; import { useEntity } from '@backstage/plugin-catalog-react'; import { CodeCoveragePage } from './CodeCoveragePage'; import { MissingAnnotationEmptyState } from '@backstage/core-components'; -export const isCodeCoverageAvailable = (entity: Entity) => - Boolean(entity.metadata.annotations?.['backstage.io/code-coverage']); +/** + * Returns true if the given entity has code coverage enabled. + * + * @public + */ +export function isCodeCoverageAvailable(entity: Entity) { + return Boolean(entity.metadata.annotations?.['backstage.io/code-coverage']); +} -export const Router = () => { +/** + * @public + */ +export const Router = (): JSX.Element => { const { entity } = useEntity(); if (!isCodeCoverageAvailable(entity)) { @@ -30,5 +40,6 @@ export const Router = () => { ); } + return ; }; diff --git a/plugins/code-coverage/src/index.ts b/plugins/code-coverage/src/index.ts index 2ece7ed1e8..06c10026ff 100644 --- a/plugins/code-coverage/src/index.ts +++ b/plugins/code-coverage/src/index.ts @@ -20,9 +20,13 @@ * @packageDocumentation */ +import { isCodeCoverageAvailable } from './components/Router'; + export { codeCoveragePlugin, EntityCodeCoverageContent } from './plugin'; -export { - Router, - isCodeCoverageAvailable, - isCodeCoverageAvailable as isPluginApplicableToEntity, -} from './components/Router'; +export { isCodeCoverageAvailable }; + +/** + * @public + * @deprecated Use `isPluginApplicableToEntity` instead. + */ +export const isPluginApplicableToEntity = isCodeCoverageAvailable; diff --git a/plugins/code-coverage/src/plugin.ts b/plugins/code-coverage/src/plugin.ts index 1202c4e4b3..f137e9d488 100644 --- a/plugins/code-coverage/src/plugin.ts +++ b/plugins/code-coverage/src/plugin.ts @@ -23,6 +23,9 @@ import { discoveryApiRef, } from '@backstage/core-plugin-api'; +/** + * @public + */ export const codeCoveragePlugin = createPlugin({ id: 'code-coverage', routes: { @@ -37,6 +40,11 @@ export const codeCoveragePlugin = createPlugin({ ], }); +/** + * An entity code coverage page. + * + * @public + */ export const EntityCodeCoverageContent = codeCoveragePlugin.provide( createRoutableExtension({ name: 'EntityCodeCoverageContent', diff --git a/scripts/api-extractor.ts b/scripts/api-extractor.ts index 0d40ebb60a..21a307b65a 100644 --- a/scripts/api-extractor.ts +++ b/scripts/api-extractor.ts @@ -219,8 +219,6 @@ const ALLOW_WARNINGS = [ 'plugins/circleci', 'plugins/cloudbuild', 'plugins/code-climate', - 'plugins/code-coverage', - 'plugins/code-coverage-backend', 'plugins/config-schema', 'plugins/cost-insights', 'plugins/dynatrace', From b76eea25ede71f1c90673c6d39e5615afcc4f7b8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Jul 2022 12:59:27 +0000 Subject: [PATCH 199/231] fix(deps): update dependency @asyncapi/react-component to v1.0.0-next.39 Signed-off-by: Renovate Bot --- .changeset/renovate-cbb545a.md | 5 +++++ plugins/api-docs/package.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 .changeset/renovate-cbb545a.md diff --git a/.changeset/renovate-cbb545a.md b/.changeset/renovate-cbb545a.md new file mode 100644 index 0000000000..be423e8252 --- /dev/null +++ b/.changeset/renovate-cbb545a.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-api-docs': patch +--- + +Updated dependency `@asyncapi/react-component` to `1.0.0-next.39`. diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index eb2e333e8e..b6d54ab952 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -33,7 +33,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@asyncapi/react-component": "1.0.0-next.38", + "@asyncapi/react-component": "1.0.0-next.39", "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/core-components": "^0.10.0-next.2", "@backstage/core-plugin-api": "^1.0.3", diff --git a/yarn.lock b/yarn.lock index b93b163686..8f09b76887 100644 --- a/yarn.lock +++ b/yarn.lock @@ -174,10 +174,10 @@ node-fetch "^2.6.0" tiny-merge-patch "^0.1.2" -"@asyncapi/react-component@1.0.0-next.38": - version "1.0.0-next.38" - resolved "https://registry.npmjs.org/@asyncapi/react-component/-/react-component-1.0.0-next.38.tgz#33909f556f18870faca8d8a9e9827a7e341a90ea" - integrity sha512-Uq0wcVHqmKXfvYCa74OiCEgNz3CbpVodeeIjrIsKWqyb9H6QjEA0pIJSLbvEwA+YKVGDXb48R3zsMSmRaqnmnA== +"@asyncapi/react-component@1.0.0-next.39": + version "1.0.0-next.39" + resolved "https://registry.npmjs.org/@asyncapi/react-component/-/react-component-1.0.0-next.39.tgz#2aa236b1783f36249752b3c30e0c7e0125af8c1f" + integrity sha512-UQYmzbvKwDm3HVGjLL1znK35bOKlWNiTUw29oSe6Xdil/Y7RODLctGQrbwKSCeP0VwtsokhwivQ3QHuL3byjVw== dependencies: "@asyncapi/avro-schema-parser" "^0.3.0" "@asyncapi/openapi-schema-parser" "^2.0.0" From fe8e025af5eec7bb04e036adf446e951a0fb1c56 Mon Sep 17 00:00:00 2001 From: Antonio Musolino Date: Tue, 5 Jul 2022 15:33:29 +0200 Subject: [PATCH 200/231] feat: allowing post method into auth refresh api Signed-off-by: Antonio Musolino --- .changeset/ten-cobras-wash.md | 5 +++++ docs/auth/add-auth-provider.md | 1 + plugins/auth-backend/src/service/router.ts | 1 + 3 files changed, 7 insertions(+) create mode 100644 .changeset/ten-cobras-wash.md diff --git a/.changeset/ten-cobras-wash.md b/.changeset/ten-cobras-wash.md new file mode 100644 index 0000000000..81915d958d --- /dev/null +++ b/.changeset/ten-cobras-wash.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': minor +--- + +Allowed post method on /refresh path diff --git a/docs/auth/add-auth-provider.md b/docs/auth/add-auth-provider.md index eb8973bec1..01c18f04cd 100644 --- a/docs/auth/add-auth-provider.md +++ b/docs/auth/add-auth-provider.md @@ -350,6 +350,7 @@ router.get('/auth/providerA/handler/frame'); router.post('/auth/providerA/handler/frame'); router.post('/auth/providerA/logout'); router.get('/auth/providerA/refresh'); // if supported +router.post('/auth/providerA/refresh'); // if supported ``` As you can see each endpoint is prefixed with both `/auth` and its provider diff --git a/plugins/auth-backend/src/service/router.ts b/plugins/auth-backend/src/service/router.ts index 2232eeaa81..e4fa5eeea4 100644 --- a/plugins/auth-backend/src/service/router.ts +++ b/plugins/auth-backend/src/service/router.ts @@ -140,6 +140,7 @@ export async function createRouter( } if (provider.refresh) { r.get('/refresh', provider.refresh.bind(provider)); + r.post('/refresh', provider.refresh.bind(provider)); } router.use(`/${providerId}`, r); From 9a2c7262e4874f51e0473beb54c695084f1691d9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Jul 2022 13:52:46 +0000 Subject: [PATCH 201/231] fix(deps): update dependency vm2 to v3.9.10 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8f09b76887..e37f0e9320 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25995,9 +25995,9 @@ vm-browserify@^1.0.1: integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== vm2@^3.9.6: - version "3.9.9" - resolved "https://registry.npmjs.org/vm2/-/vm2-3.9.9.tgz#c0507bc5fbb99388fad837d228badaaeb499ddc5" - integrity sha512-xwTm7NLh/uOjARRBs8/95H0e8fT3Ukw5D/JJWhxMbhKzNh1Nu981jQKvkep9iKYNxzlVrdzD0mlBGkDKZWprlw== + version "3.9.10" + resolved "https://registry.npmjs.org/vm2/-/vm2-3.9.10.tgz#c66543096b5c44c8861a6465805c23c7cc996a44" + integrity sha512-AuECTSvwu2OHLAZYhG716YzwodKCIJxB6u1zG7PgSQwIgAlEaoXH52bxdcvT8GkGjnYK7r7yWDW0m0sOsPuBjQ== dependencies: acorn "^8.7.0" acorn-walk "^8.2.0" From a3acec8819aae041134c7b4a95a688e5ace17173 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Jul 2022 14:11:31 +0000 Subject: [PATCH 202/231] fix(deps): update dependency typescript-json-schema to ^0.54.0 Signed-off-by: Renovate Bot --- .changeset/renovate-913f3dc.md | 5 +++++ packages/config-loader/package.json | 2 +- yarn.lock | 18 +++++++++--------- 3 files changed, 15 insertions(+), 10 deletions(-) create mode 100644 .changeset/renovate-913f3dc.md diff --git a/.changeset/renovate-913f3dc.md b/.changeset/renovate-913f3dc.md new file mode 100644 index 0000000000..edb2f95356 --- /dev/null +++ b/.changeset/renovate-913f3dc.md @@ -0,0 +1,5 @@ +--- +'@backstage/config-loader': patch +--- + +Updated dependency `typescript-json-schema` to `^0.54.0`. diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json index 894e86ef27..3ca4b1455f 100644 --- a/packages/config-loader/package.json +++ b/packages/config-loader/package.json @@ -46,7 +46,7 @@ "json-schema-merge-allof": "^0.8.1", "json-schema-traverse": "^1.0.0", "node-fetch": "^2.6.7", - "typescript-json-schema": "^0.53.0", + "typescript-json-schema": "^0.54.0", "yaml": "^1.9.2", "yup": "^0.32.9" }, diff --git a/yarn.lock b/yarn.lock index 8f09b76887..0e22d659aa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -20535,10 +20535,10 @@ path-case@^3.0.4: dot-case "^3.0.4" tslib "^2.0.3" -path-equal@1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/path-equal/-/path-equal-1.1.2.tgz#260e7c449c4c2022f68cc5fa6e617e892858250d" - integrity sha512-p5kxPPwCdbf5AdXzT1bUBJomhgBlEjRBavYNr1XUpMFIE4Hnf2roueCMXudZK5tnaAu1tTmp3GPzqwJK45IHEA== +path-equal@^1.1.2: + version "1.2.2" + resolved "https://registry.npmjs.org/path-equal/-/path-equal-1.2.2.tgz#fa2997f0a829de22ec8f5f86461ca5590d49b832" + integrity sha512-AUJvbcle1Zgb1TgtftHYknlrgrSYyI1ytrYgSbKUHSybwqUDnbD2cw9PIWivuMvsN+GTXmr/DRN4VBXpHG6aGg== path-exists@^2.0.0: version "2.1.0" @@ -25349,15 +25349,15 @@ typedarray@^0.0.6: resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript-json-schema@^0.53.0: - version "0.53.1" - resolved "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.53.1.tgz#9204547f3e145169b40928998366ff6d28b81d32" - integrity sha512-Hg+RnOKUd38MOzC0rDft03a8xvwO+gCcj1F77smw2tCoZYQpFoLtrXWBGdvCX+REliko5WYel2kux17HPFqjLQ== +typescript-json-schema@^0.54.0: + version "0.54.0" + resolved "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.54.0.tgz#b3fc42ad90df6a0f6ab57571ebc8b4d41125df4f" + integrity sha512-/MNhm1pjdxXiVspjjyRCrQAA1B768cRzHU83aIqN5vQqQEW2NgyyKOfcguiRIMM64lseIZIelegnHOHEu7YDCg== dependencies: "@types/json-schema" "^7.0.9" "@types/node" "^16.9.2" glob "^7.1.7" - path-equal "1.1.2" + path-equal "^1.1.2" safe-stable-stringify "^2.2.0" ts-node "^10.2.1" typescript "~4.6.0" From ae6a4d7520c6cb8f2a07c3d66666c917ad7597f6 Mon Sep 17 00:00:00 2001 From: 7Hazard Date: Tue, 5 Jul 2022 16:16:53 +0200 Subject: [PATCH 203/231] Fixed broken link in docs GitHub Apps docs, the uppercase H really made it broken Signed-off-by: 7Hazard --- docs/integrations/github/github-apps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/integrations/github/github-apps.md b/docs/integrations/github/github-apps.md index 5725e67c7b..4f2c58bbec 100644 --- a/docs/integrations/github/github-apps.md +++ b/docs/integrations/github/github-apps.md @@ -79,7 +79,7 @@ privateKey: | ### Including in Integrations Config Once the credentials are stored in a YAML file generated by `create-github-app`, -or manually by following the [GitHub Enterprise](#gitHub-enterprise) +or manually by following the [GitHub Enterprise](#github-enterprise) instructions, they can be included in the `app-config.yaml` under the `integrations` section. From fc0e5758404714c64e1f6c0c9cdc1c0415226562 Mon Sep 17 00:00:00 2001 From: patrickalvesvv <74733982+patrickalvesvv@users.noreply.github.com> Date: Tue, 5 Jul 2022 12:15:53 -0300 Subject: [PATCH 204/231] Update architecture-overview.md Command to build docker image has been fixed Signed-off-by: patrickalvesvv <74733982+patrickalvesvv@users.noreply.github.com> --- docs/overview/architecture-overview.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/overview/architecture-overview.md b/docs/overview/architecture-overview.md index 382399e603..3c9417268b 100644 --- a/docs/overview/architecture-overview.md +++ b/docs/overview/architecture-overview.md @@ -341,7 +341,8 @@ separate Docker images. The backend container can be built by running the following command: ```bash -yarn run docker-build +yarn run build +yarn run build-image ``` This will create a container called `example-backend`. From ec728ccdc65ff809a2fa0fe16bc4996df69aa570 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 5 Jul 2022 18:29:23 +0200 Subject: [PATCH 205/231] workflows: migrate to triggered workflow for reacting to review comments Signed-off-by: Patrik Oldsberg --- .../workflows/pr-review-comment-trigger.yaml | 19 +++++++++++++++ .github/workflows/pr-review-comment.yaml | 24 +++++++++++++++++++ .github/workflows/pr.yaml | 3 --- 3 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/pr-review-comment-trigger.yaml create mode 100644 .github/workflows/pr-review-comment.yaml diff --git a/.github/workflows/pr-review-comment-trigger.yaml b/.github/workflows/pr-review-comment-trigger.yaml new file mode 100644 index 0000000000..25475a03dc --- /dev/null +++ b/.github/workflows/pr-review-comment-trigger.yaml @@ -0,0 +1,19 @@ +# This workflow is used to trigger the "PR Review Comment" workflow. This chaining is needed +# because workflows triggered by pull_request_review_comment do not have access to secrets. + +name: PR Review Comment Trigger +on: + pull_request_review_comment: + types: + - created + +jobs: + trigger: + runs-on: ubuntu-latest + + # The "PR Review Comment" workflow will check the success status of this workflow and only mark + # the PR for re-review if this workflow was successful, which is when the author leaves a review comment. + if: github.repository == 'backstage/backstage' && github.event.comment.user.id == github.event.pull_request.user.id + + steps: + - run: echo "This PR needs another review" diff --git a/.github/workflows/pr-review-comment.yaml b/.github/workflows/pr-review-comment.yaml new file mode 100644 index 0000000000..65252bae09 --- /dev/null +++ b/.github/workflows/pr-review-comment.yaml @@ -0,0 +1,24 @@ +# This workflow is triggered by "PR Review Comment Trigger" + +name: PR Review Comment +on: + workflow_run: + workflows: [PR Review Comment Trigger] + types: + - completed + +jobs: + re-review: + runs-on: ubuntu-latest + + # The triggering workflow will report success if the PR needs re-review + if: github.repository == 'backstage/backstage' && github.event.workflow_run.conclusion == 'success' + + steps: + - uses: backstage/actions/re-review@v0.5.2 + with: + app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} + private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} + installation-id: ${{ secrets.BACKSTAGE_GOALIE_INSTALLATION_ID }} + project-id: PVT_kwDOBFKqdc02LQ + issue-number: ${{ github.event.workflow_run.pull_requests[0].number }} diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index c8fe3e2d69..bfb5454a07 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -9,9 +9,6 @@ on: issue_comment: types: - created - pull_request_review_comment: - types: - - created jobs: sync: From 1454bf98e7a0e20cbcb7a42de7db96d0b80729ce Mon Sep 17 00:00:00 2001 From: Matthew Clarke Date: Tue, 5 Jul 2022 13:13:49 -0400 Subject: [PATCH 206/231] (feat): New kubernetes backend endpoints (#12393) * feat: add new kubernetes backend endpoints Signed-off-by: Matthew Clarke * add more tests Signed-off-by: Matthew Clarke * add eslint exceptions Signed-off-by: Matthew Clarke * register new endpoints Signed-off-by: Matthew Clarke * add changeset Signed-off-by: Matthew Clarke * add breaking change ot changeset Signed-off-by: Matthew Clarke * fix tsc in test Signed-off-by: Matthew Clarke * changeset typo Signed-off-by: Matthew Clarke * api report update Signed-off-by: Matthew Clarke --- .changeset/little-geckos-end.md | 18 + packages/backend/src/plugins/kubernetes.ts | 3 + plugins/kubernetes-backend/api-report.md | 6 + plugins/kubernetes-backend/package.json | 4 +- .../src/routes/resourceRoutes.test.ts | 545 ++++++++++++++++++ .../src/routes/resourcesRoutes.ts | 94 +++ .../src/service/KubernetesBuilder.test.ts | 11 +- .../src/service/KubernetesBuilder.ts | 14 +- .../kubernetes-backend/src/service/router.ts | 2 + .../src/service/standaloneApplication.ts | 8 +- 10 files changed, 701 insertions(+), 4 deletions(-) create mode 100644 .changeset/little-geckos-end.md create mode 100644 plugins/kubernetes-backend/src/routes/resourceRoutes.test.ts create mode 100644 plugins/kubernetes-backend/src/routes/resourcesRoutes.ts diff --git a/.changeset/little-geckos-end.md b/.changeset/little-geckos-end.md new file mode 100644 index 0000000000..328095aa44 --- /dev/null +++ b/.changeset/little-geckos-end.md @@ -0,0 +1,18 @@ +--- +'@backstage/plugin-kubernetes-backend': minor +--- + +Add new endpoints to Kubernetes backend plugin + +BREAKING: Kubernetes backend plugin now depends on CatalogApi + +```typescript +// Create new CatalogClient +const catalogApi = new CatalogClient({ discoveryApi: env.discovery }); +const { router } = await KubernetesBuilder.createBuilder({ + logger: env.logger, + config: env.config, + // Inject it into createBuilder params + catalogApi, +}).build(); +``` diff --git a/packages/backend/src/plugins/kubernetes.ts b/packages/backend/src/plugins/kubernetes.ts index 8023d549ff..3bc7a5dcbe 100644 --- a/packages/backend/src/plugins/kubernetes.ts +++ b/packages/backend/src/plugins/kubernetes.ts @@ -17,13 +17,16 @@ import { KubernetesBuilder } from '@backstage/plugin-kubernetes-backend'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; +import { CatalogClient } from '@backstage/catalog-client'; export default async function createPlugin( env: PluginEnvironment, ): Promise { + const catalogApi = new CatalogClient({ discoveryApi: env.discovery }); const { router } = await KubernetesBuilder.createBuilder({ logger: env.logger, config: env.config, + catalogApi, }).build(); return router; } diff --git a/plugins/kubernetes-backend/api-report.md b/plugins/kubernetes-backend/api-report.md index adc8fb503f..363af1b02f 100644 --- a/plugins/kubernetes-backend/api-report.md +++ b/plugins/kubernetes-backend/api-report.md @@ -3,6 +3,7 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { CatalogApi } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; import { Duration } from 'luxon'; import { Entity } from '@backstage/catalog-model'; @@ -108,6 +109,7 @@ export class KubernetesBuilder { protected buildRouter( objectsProvider: KubernetesObjectsProvider, clusterSupplier: KubernetesClustersSupplier, + catalogApi: CatalogApi, ): express.Router; // (undocumented) protected buildServiceLocator( @@ -155,6 +157,8 @@ export interface KubernetesClustersSupplier { // @alpha (undocumented) export interface KubernetesEnvironment { + // (undocumented) + catalogApi: CatalogApi; // (undocumented) config: Config; // (undocumented) @@ -268,6 +272,8 @@ export interface ObjectToFetch { // @alpha (undocumented) export interface RouterOptions { + // (undocumented) + catalogApi: CatalogApi; // (undocumented) clusterSupplier?: KubernetesClustersSupplier; // (undocumented) diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index e7d8d2c3c0..10eb6828f5 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -37,10 +37,12 @@ "dependencies": { "@azure/identity": "^2.0.4", "@backstage/backend-common": "^0.14.1-next.2", + "@backstage/catalog-client": "^1.0.4-next.1", "@backstage/catalog-model": "^1.1.0-next.2", "@backstage/config": "^1.0.1", "@backstage/errors": "^1.1.0-next.0", - "@backstage/plugin-kubernetes-common": "^0.4.0-next.1", + "@backstage/plugin-auth-node": "^0.2.3-next.1", + "@backstage/plugin-kubernetes-common": "^0.4.0-next.0", "@google-cloud/container": "^4.0.0", "@kubernetes/client-node": "^0.16.0", "@types/express": "^4.17.6", diff --git a/plugins/kubernetes-backend/src/routes/resourceRoutes.test.ts b/plugins/kubernetes-backend/src/routes/resourceRoutes.test.ts new file mode 100644 index 0000000000..57e6514a96 --- /dev/null +++ b/plugins/kubernetes-backend/src/routes/resourceRoutes.test.ts @@ -0,0 +1,545 @@ +/* + * 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 { errorHandler } from '@backstage/backend-common'; +import express from 'express'; +import request from 'supertest'; +import Router from 'express-promise-router'; +import { addResourceRoutesToRouter } from './resourcesRoutes'; +import { Entity } from '@backstage/catalog-model'; + +describe('resourcesRoutes', () => { + let app: express.Express; + + beforeAll(() => { + app = express(); + app.use(express.json()); + const router = Router(); + addResourceRoutesToRouter( + router, + { + getEntityByRef: jest.fn().mockImplementation(entityRef => { + if (entityRef.name === 'noentity') { + return Promise.resolve(undefined); + } + return Promise.resolve({ + kind: entityRef.kind, + metadata: { + name: entityRef.name, + namespace: entityRef.namespace, + }, + } as Entity); + }), + } as any, + { + getKubernetesObjectsByEntity: jest.fn().mockImplementation(args => { + if (args.entity.metadata.name === 'inject500') { + return Promise.reject(new Error('some internal error')); + } + + return Promise.resolve({ + items: [ + { + clusterOne: { + pods: [ + { + metadata: { + name: 'pod1', + }, + }, + ], + }, + }, + ], + }); + }), + getCustomResourcesByEntity: jest.fn().mockImplementation(args => { + if (args.entity.metadata.name === 'inject500') { + return Promise.reject(new Error('some internal error')); + } + + return Promise.resolve({ + items: [ + { + clusterOne: { + pods: [ + { + metadata: { + name: 'pod1', + }, + }, + ], + }, + }, + ], + }); + }), + } as any, + ); + app.use('/', router); + app.use(errorHandler()); + }); + + describe('POST /resources/workloads/query', () => { + // eslint-disable-next-line jest/expect-expect + it('200 happy path', async () => { + await request(app) + .post('/resources/workloads/query') + .send({ + entityRef: 'kind:namespacec/someComponent', + auth: { + google: 'something', + }, + }) + .set('Content-Type', 'application/json') + .set('Authorization', 'Bearer Zm9vYmFy') + .expect(200, { + items: [ + { + clusterOne: { + pods: [ + { + metadata: { + name: 'pod1', + }, + }, + ], + }, + }, + ], + }); + }); + // eslint-disable-next-line jest/expect-expect + it('400 when missing entity ref', async () => { + await request(app) + .post('/resources/workloads/query') + .send({ + auth: { + google: 'something', + }, + }) + .set('Content-Type', 'application/json') + .set('Authorization', 'Bearer Zm9vYmFy') + .expect(400, { + error: { name: 'InputError', message: 'entity is a required field' }, + request: { + method: 'POST', + url: '/resources/workloads/query', + }, + response: { statusCode: 400 }, + }); + }); + // eslint-disable-next-line jest/expect-expect + it('400 when bad entity ref', async () => { + await request(app) + .post('/resources/workloads/query') + .send({ + entityRef: 'ffff', + auth: { + google: 'something', + }, + }) + .set('Content-Type', 'application/json') + .set('Authorization', 'Bearer Zm9vYmFy') + .expect(400, { + error: { + name: 'InputError', + message: + 'Invalid entity ref, Error: Entity reference "ffff" had missing or empty kind (e.g. did not start with "component:" or similar)', + }, + request: { + method: 'POST', + url: '/resources/workloads/query', + }, + response: { statusCode: 400 }, + }); + }); + // eslint-disable-next-line jest/expect-expect + it('400 when no entity in catalog', async () => { + await request(app) + .post('/resources/workloads/query') + .send({ + entityRef: 'noentity:noentity', + auth: { + google: 'something', + }, + }) + .set('Content-Type', 'application/json') + .set('Authorization', 'Bearer Zm9vYmFy') + .expect(400, { + error: { + name: 'InputError', + message: 'Entity ref missing, noentity:default/noentity', + }, + request: { + method: 'POST', + url: '/resources/workloads/query', + }, + response: { statusCode: 400 }, + }); + }); + // eslint-disable-next-line jest/expect-expect + it('401 when no Auth header', async () => { + await request(app) + .post('/resources/workloads/query') + .send({ + entityRef: 'component:someComponent', + auth: { + google: 'something', + }, + }) + .set('Content-Type', 'application/json') + .expect(401, { + error: { name: 'AuthenticationError', message: 'No Backstage token' }, + request: { + method: 'POST', + url: '/resources/workloads/query', + }, + response: { statusCode: 401 }, + }); + }); + // eslint-disable-next-line jest/expect-expect + it('401 when invalid Auth header', async () => { + await request(app) + .post('/resources/workloads/query') + .send({ + entityRef: 'component:someComponent', + auth: { + google: 'something', + }, + }) + .set('Content-Type', 'application/json') + .set('Authorization', 'ffffff') + .expect(401, { + error: { name: 'AuthenticationError', message: 'No Backstage token' }, + request: { + method: 'POST', + url: '/resources/workloads/query', + }, + response: { statusCode: 401 }, + }); + }); + // eslint-disable-next-line jest/expect-expect + it('500 handle gracefully', async () => { + await request(app) + .post('/resources/workloads/query') + .send({ + entityRef: 'inject500:inject500/inject500', + auth: { + google: 'something', + }, + }) + .set('Content-Type', 'application/json') + .set('Authorization', 'Bearer Zm9vYmFy') + .expect(500, { + error: { + name: 'Error', + message: 'some internal error', + level: 'error', + service: 'backstage', + }, + request: { method: 'POST', url: '/resources/workloads/query' }, + response: { statusCode: 500 }, + }); + }); + }); + describe('POST /resources/custom/query', () => { + // eslint-disable-next-line jest/expect-expect + it('200 happy path', async () => { + await request(app) + .post('/resources/custom/query') + .send({ + entityRef: 'component:someComponent', + auth: { + google: 'something', + }, + customResources: [ + { + group: 'someGroup', + apiVersion: 'someApiVersion', + plural: 'somePlural', + }, + ], + }) + .set('Content-Type', 'application/json') + .set('Authorization', 'Bearer Zm9vYmFy') + .expect(200, { + items: [ + { + clusterOne: { + pods: [ + { + metadata: { + name: 'pod1', + }, + }, + ], + }, + }, + ], + }); + }); + // eslint-disable-next-line jest/expect-expect + it('400 when missing custom resources', async () => { + await request(app) + .post('/resources/custom/query') + .send({ + entityRef: 'component:someComponent', + auth: { + google: 'something', + }, + }) + .set('Content-Type', 'application/json') + .set('Authorization', 'Bearer Zm9vYmFy') + .expect(400, { + error: { + name: 'InputError', + message: 'customResources is a required field', + }, + request: { + method: 'POST', + url: '/resources/custom/query', + }, + response: { statusCode: 400 }, + }); + }); + // eslint-disable-next-line jest/expect-expect + it('400 when custom resources not array', async () => { + await request(app) + .post('/resources/custom/query') + .send({ + entityRef: 'component:someComponent', + auth: { + google: 'something', + }, + customResources: 'somestring', + }) + .set('Content-Type', 'application/json') + .set('Authorization', 'Bearer Zm9vYmFy') + .expect(400, { + error: { + name: 'InputError', + message: 'customResources must be an array', + }, + request: { + method: 'POST', + url: '/resources/custom/query', + }, + response: { statusCode: 400 }, + }); + }); + // eslint-disable-next-line jest/expect-expect + it('400 when custom resources empty', async () => { + await request(app) + .post('/resources/custom/query') + .send({ + entityRef: 'component:someComponent', + auth: { + google: 'something', + }, + customResources: [], + }) + .set('Content-Type', 'application/json') + .set('Authorization', 'Bearer Zm9vYmFy') + .expect(400, { + error: { + name: 'InputError', + message: 'at least 1 customResource is required', + }, + request: { + method: 'POST', + url: '/resources/custom/query', + }, + response: { statusCode: 400 }, + }); + }); + // eslint-disable-next-line jest/expect-expect + it('400 when missing entity ref', async () => { + await request(app) + .post('/resources/custom/query') + .send({ + auth: { + google: 'something', + }, + customResources: [ + { + group: 'someGroup', + apiVersion: 'someApiVersion', + plural: 'somePlural', + }, + ], + }) + .set('Content-Type', 'application/json') + .set('Authorization', 'Bearer Zm9vYmFy') + .expect(400, { + error: { name: 'InputError', message: 'entity is a required field' }, + request: { + method: 'POST', + url: '/resources/custom/query', + }, + response: { statusCode: 400 }, + }); + }); + // eslint-disable-next-line jest/expect-expect + it('400 when bad entity ref', async () => { + await request(app) + .post('/resources/custom/query') + .send({ + entityRef: 'ffff', + auth: { + google: 'something', + }, + customResources: [ + { + group: 'someGroup', + apiVersion: 'someApiVersion', + plural: 'somePlural', + }, + ], + }) + .set('Content-Type', 'application/json') + .set('Authorization', 'Bearer Zm9vYmFy') + .expect(400, { + error: { + name: 'InputError', + message: + 'Invalid entity ref, Error: Entity reference "ffff" had missing or empty kind (e.g. did not start with "component:" or similar)', + }, + request: { + method: 'POST', + url: '/resources/custom/query', + }, + response: { statusCode: 400 }, + }); + }); + // eslint-disable-next-line jest/expect-expect + it('400 when no entity in catalog', async () => { + await request(app) + .post('/resources/custom/query') + .send({ + entityRef: 'noentity:noentity', + auth: { + google: 'something', + }, + customResources: [ + { + group: 'someGroup', + apiVersion: 'someApiVersion', + plural: 'somePlural', + }, + ], + }) + .set('Content-Type', 'application/json') + .set('Authorization', 'Bearer Zm9vYmFy') + .expect(400, { + error: { + name: 'InputError', + message: 'Entity ref missing, noentity:default/noentity', + }, + request: { + method: 'POST', + url: '/resources/custom/query', + }, + response: { statusCode: 400 }, + }); + }); + // eslint-disable-next-line jest/expect-expect + it('401 when no Auth header', async () => { + await request(app) + .post('/resources/custom/query') + .send({ + entityRef: 'component:someComponent', + auth: { + google: 'something', + }, + customResources: [ + { + group: 'someGroup', + apiVersion: 'someApiVersion', + plural: 'somePlural', + }, + ], + }) + .set('Content-Type', 'application/json') + .expect(401, { + error: { name: 'AuthenticationError', message: 'No Backstage token' }, + request: { + method: 'POST', + url: '/resources/custom/query', + }, + response: { statusCode: 401 }, + }); + }); + // eslint-disable-next-line jest/expect-expect + it('401 when invalid Auth header', async () => { + await request(app) + .post('/resources/custom/query') + .send({ + entityRef: 'component:someComponent', + auth: { + google: 'something', + }, + customResources: [ + { + group: 'someGroup', + apiVersion: 'someApiVersion', + plural: 'somePlural', + }, + ], + }) + .set('Content-Type', 'application/json') + .set('Authorization', 'ffffff') + .expect(401, { + error: { name: 'AuthenticationError', message: 'No Backstage token' }, + request: { + method: 'POST', + url: '/resources/custom/query', + }, + response: { statusCode: 401 }, + }); + }); + // eslint-disable-next-line jest/expect-expect + it('500 handle gracefully', async () => { + await request(app) + .post('/resources/custom/query') + .send({ + entityRef: 'inject500:inject500/inject500', + auth: { + google: 'something', + }, + customResources: [ + { + group: 'someGroup', + apiVersion: 'someApiVersion', + plural: 'somePlural', + }, + ], + }) + .set('Content-Type', 'application/json') + .set('Authorization', 'Bearer Zm9vYmFy') + .expect(500, { + error: { + name: 'Error', + message: 'some internal error', + level: 'error', + service: 'backstage', + }, + request: { method: 'POST', url: '/resources/custom/query' }, + response: { statusCode: 500 }, + }); + }); + }); +}); diff --git a/plugins/kubernetes-backend/src/routes/resourcesRoutes.ts b/plugins/kubernetes-backend/src/routes/resourcesRoutes.ts new file mode 100644 index 0000000000..2b2a48f707 --- /dev/null +++ b/plugins/kubernetes-backend/src/routes/resourcesRoutes.ts @@ -0,0 +1,94 @@ +/* + * 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 { + CompoundEntityRef, + parseEntityRef, + stringifyEntityRef, +} from '@backstage/catalog-model'; +import { CatalogApi } from '@backstage/catalog-client'; +import { InputError, AuthenticationError } from '@backstage/errors'; +import express, { Request } from 'express'; +import { KubernetesObjectsProvider } from '../types/types'; +import { getBearerTokenFromAuthorizationHeader } from '@backstage/plugin-auth-node'; + +export const addResourceRoutesToRouter = ( + router: express.Router, + catalogApi: CatalogApi, + objectsProvider: KubernetesObjectsProvider, +) => { + const getEntityByReq = async (req: Request) => { + const rawEntityRef = req.body.entityRef; + if (rawEntityRef && typeof rawEntityRef !== 'string') { + throw new InputError(`entity query must be a string`); + } else if (!rawEntityRef) { + throw new InputError('entity is a required field'); + } + let entityRef: CompoundEntityRef | undefined = undefined; + + try { + entityRef = parseEntityRef(rawEntityRef); + } catch (error) { + throw new InputError(`Invalid entity ref, ${error}`); + } + + const token = getBearerTokenFromAuthorizationHeader( + req.headers.authorization, + ); + + if (!token) { + throw new AuthenticationError('No Backstage token'); + } + + const entity = await catalogApi.getEntityByRef(entityRef, { + token: token, + }); + + if (!entity) { + throw new InputError( + `Entity ref missing, ${stringifyEntityRef(entityRef)}`, + ); + } + return entity; + }; + + router.post('/resources/workloads/query', async (req, res) => { + const entity = await getEntityByReq(req); + const response = await objectsProvider.getKubernetesObjectsByEntity({ + entity, + auth: req.body.auth, + }); + res.json(response); + }); + + router.post('/resources/custom/query', async (req, res) => { + const entity = await getEntityByReq(req); + + if (!req.body.customResources) { + throw new InputError('customResources is a required field'); + } else if (!Array.isArray(req.body.customResources)) { + throw new InputError('customResources must be an array'); + } else if (req.body.customResources.length === 0) { + throw new InputError('at least 1 customResource is required'); + } + + const response = await objectsProvider.getCustomResourcesByEntity({ + entity, + customResources: req.body.customResources, + auth: req.body.auth, + }); + res.json(response); + }); +}; diff --git a/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts b/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts index ecaf9f3095..309141ec0e 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts @@ -31,11 +31,13 @@ import { import { KubernetesBuilder } from './KubernetesBuilder'; import { KubernetesFanOutHandler } from './KubernetesFanOutHandler'; import { PodStatus } from '@kubernetes/client-node'; +import { CatalogApi } from '@backstage/catalog-client'; describe('KubernetesBuilder', () => { let app: express.Express; let kubernetesFanOutHandler: jest.Mocked; let config: Config; + let catalogApi: CatalogApi; beforeAll(async () => { const logger = getVoidLogger(); @@ -69,7 +71,13 @@ describe('KubernetesBuilder', () => { getKubernetesObjectsByEntity: jest.fn(), } as any; - const { router } = await KubernetesBuilder.createBuilder({ config, logger }) + catalogApi = {} as CatalogApi; + + const { router } = await KubernetesBuilder.createBuilder({ + config, + logger, + catalogApi, + }) .setObjectsProvider(kubernetesFanOutHandler) .setClusterSupplier(clusterSupplier) .build(); @@ -240,6 +248,7 @@ describe('KubernetesBuilder', () => { const { router } = await KubernetesBuilder.createBuilder({ logger, config, + catalogApi, }) .setClusterSupplier(clusterSupplier) .setServiceLocator(serviceLocator) diff --git a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts index 1b058752c9..59bac4f30a 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts @@ -37,6 +37,8 @@ import { KubernetesFanOutHandler, } from './KubernetesFanOutHandler'; import { KubernetesClientBasedFetcher } from './KubernetesFetcher'; +import { addResourceRoutesToRouter } from '../routes/resourcesRoutes'; +import { CatalogApi } from '@backstage/catalog-client'; /** * @@ -45,6 +47,7 @@ import { KubernetesClientBasedFetcher } from './KubernetesFetcher'; export interface KubernetesEnvironment { logger: Logger; config: Config; + catalogApi: CatalogApi; } /** @@ -119,7 +122,11 @@ export class KubernetesBuilder { objectTypesToFetch: this.getObjectTypesToFetch(), }); - const router = this.buildRouter(objectsProvider, clusterSupplier); + const router = this.buildRouter( + objectsProvider, + clusterSupplier, + this.env.catalogApi, + ); return { clusterSupplier, @@ -226,11 +233,13 @@ export class KubernetesBuilder { protected buildRouter( objectsProvider: KubernetesObjectsProvider, clusterSupplier: KubernetesClustersSupplier, + catalogApi: CatalogApi, ): express.Router { const logger = this.env.logger; const router = Router(); router.use(express.json()); + // @deprecated router.post('/services/:serviceId', async (req, res) => { const serviceId = req.params.serviceId; const requestBody: ObjectsByEntityRequest = req.body; @@ -259,6 +268,9 @@ export class KubernetesBuilder { })), }); }); + + addResourceRoutesToRouter(router, catalogApi, objectsProvider); + return router; } diff --git a/plugins/kubernetes-backend/src/service/router.ts b/plugins/kubernetes-backend/src/service/router.ts index 7bd7cca8a9..6c26175058 100644 --- a/plugins/kubernetes-backend/src/service/router.ts +++ b/plugins/kubernetes-backend/src/service/router.ts @@ -19,6 +19,7 @@ import { Logger } from 'winston'; import { KubernetesClustersSupplier } from '../types/types'; import express from 'express'; import { KubernetesBuilder } from './KubernetesBuilder'; +import { CatalogApi } from '@backstage/catalog-client'; /** * @@ -27,6 +28,7 @@ import { KubernetesBuilder } from './KubernetesBuilder'; export interface RouterOptions { logger: Logger; config: Config; + catalogApi: CatalogApi; clusterSupplier?: KubernetesClustersSupplier; } diff --git a/plugins/kubernetes-backend/src/service/standaloneApplication.ts b/plugins/kubernetes-backend/src/service/standaloneApplication.ts index 29262744e5..c12d7be2bb 100644 --- a/plugins/kubernetes-backend/src/service/standaloneApplication.ts +++ b/plugins/kubernetes-backend/src/service/standaloneApplication.ts @@ -18,6 +18,7 @@ import { errorHandler, notFoundHandler, requestLoggingHandler, + SingleHostDiscovery, } from '@backstage/backend-common'; import compression from 'compression'; import cors from 'cors'; @@ -26,6 +27,7 @@ import helmet from 'helmet'; import { Logger } from 'winston'; import { createRouter } from './router'; import { ConfigReader } from '@backstage/config'; +import { CatalogClient } from '@backstage/catalog-client'; export interface ApplicationOptions { enableCors: boolean; @@ -39,6 +41,10 @@ export async function createStandaloneApplication( const config = new ConfigReader({}); const app = express(); + const catalogApi = new CatalogClient({ + discoveryApi: SingleHostDiscovery.fromConfig(config), + }); + app.use(helmet()); if (enableCors) { app.use(cors()); @@ -46,7 +52,7 @@ export async function createStandaloneApplication( app.use(compression()); app.use(express.json()); app.use(requestLoggingHandler()); - app.use('/', await createRouter({ logger, config })); + app.use('/', await createRouter({ logger, config, catalogApi })); app.use(notFoundHandler()); app.use(errorHandler()); From b6543c85589417fa0aeb9fc6fad880e5a5bd5a1f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Jul 2022 17:19:20 +0000 Subject: [PATCH 207/231] chore(deps): update backstage/actions action to v0.5.2 Signed-off-by: Renovate Bot --- .github/workflows/ci.yml | 6 +++--- .github/workflows/cron.yml | 2 +- .github/workflows/deploy_nightly.yml | 2 +- .github/workflows/deploy_packages.yml | 4 ++-- .github/workflows/issue.yaml | 2 +- .github/workflows/pr.yaml | 2 +- .github/workflows/sync_code-formatting.yml | 2 +- .github/workflows/sync_snyk-github-issues.yml | 2 +- .github/workflows/verify_e2e-linux.yml | 2 +- .github/workflows/verify_storybook.yml | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e38df375b6..06f89b06d3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,7 +32,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.0 + uses: backstage/actions/yarn-install@v0.5.2 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -61,7 +61,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.0 + uses: backstage/actions/yarn-install@v0.5.2 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -178,7 +178,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.0 + uses: backstage/actions/yarn-install@v0.5.2 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml index 5b5c8b63c8..228d4c62ac 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -8,7 +8,7 @@ jobs: cron: runs-on: ubuntu-latest steps: - - uses: backstage/actions/cron@v0.5.0 + - uses: backstage/actions/cron@v0.5.2 with: app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} diff --git a/.github/workflows/deploy_nightly.yml b/.github/workflows/deploy_nightly.yml index 427a7139a0..719b5ea94b 100644 --- a/.github/workflows/deploy_nightly.yml +++ b/.github/workflows/deploy_nightly.yml @@ -26,7 +26,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.0 + uses: backstage/actions/yarn-install@v0.5.2 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml index 30d4bf9ee2..371712fedb 100644 --- a/.github/workflows/deploy_packages.yml +++ b/.github/workflows/deploy_packages.yml @@ -67,7 +67,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.0 + uses: backstage/actions/yarn-install@v0.5.2 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -145,7 +145,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.0 + uses: backstage/actions/yarn-install@v0.5.2 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml index bc0dd15617..de02e45e76 100644 --- a/.github/workflows/issue.yaml +++ b/.github/workflows/issue.yaml @@ -10,4 +10,4 @@ jobs: if: github.repository == 'backstage/backstage' steps: - name: Issue sync - uses: backstage/actions/issue-sync@v0.5.0 + uses: backstage/actions/issue-sync@v0.5.2 diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index c8fe3e2d69..93ec7fe2d1 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -21,7 +21,7 @@ jobs: if: github.repository == 'backstage/backstage' && ( github.event.pull_request || github.event.issue.pull_request ) steps: - name: PR sync - uses: backstage/actions/pr-sync@v0.5.0 + uses: backstage/actions/pr-sync@v0.5.2 with: github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }} app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} diff --git a/.github/workflows/sync_code-formatting.yml b/.github/workflows/sync_code-formatting.yml index 0d3add5f12..b04a0a3de0 100644 --- a/.github/workflows/sync_code-formatting.yml +++ b/.github/workflows/sync_code-formatting.yml @@ -20,7 +20,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.0 + uses: backstage/actions/yarn-install@v0.5.2 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml index 9d0726e915..d2af1307b0 100644 --- a/.github/workflows/sync_snyk-github-issues.yml +++ b/.github/workflows/sync_snyk-github-issues.yml @@ -22,7 +22,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.0 + uses: backstage/actions/yarn-install@v0.5.2 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml index 126670b67f..811372d54d 100644 --- a/.github/workflows/verify_e2e-linux.yml +++ b/.github/workflows/verify_e2e-linux.yml @@ -46,7 +46,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.0 + uses: backstage/actions/yarn-install@v0.5.2 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml index 89679b530a..1aea51bec9 100644 --- a/.github/workflows/verify_storybook.yml +++ b/.github/workflows/verify_storybook.yml @@ -35,7 +35,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.0 + uses: backstage/actions/yarn-install@v0.5.2 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} - name: storybook yarn install From ea272616a3810906ff89368daa4c81aa6e3a6464 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Jul 2022 17:33:09 +0000 Subject: [PATCH 208/231] chore(deps): update dependency nodemon to v2.0.19 Signed-off-by: Renovate Bot --- yarn.lock | 162 ++++++------------------------------------------------ 1 file changed, 17 insertions(+), 145 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0e22d659aa..c70a755c54 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7853,13 +7853,6 @@ anafanafo@2.0.0: dependencies: char-width-table-consumer "^1.0.0" -ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== - dependencies: - string-width "^3.0.0" - ansi-colors@^4.1.1, ansi-colors@^4.1.3: version "4.1.3" resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" @@ -8946,20 +8939,6 @@ bottleneck@^2.15.3: resolved "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== -boxen@^5.0.0: - version "5.1.2" - resolved "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" - integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.2" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -9678,11 +9657,6 @@ clean-stack@^2.0.0: resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -10231,18 +10205,6 @@ config-chain@^1.1.12: ini "^1.3.4" proto-list "~1.2.1" -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" - connect-history-api-fallback@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" @@ -10674,11 +10636,6 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - css-box-model@^1.2.0: version "1.2.1" resolved "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz#59951d3b81fd6b2074a62d49444415b0d2b4d7c1" @@ -11779,7 +11736,7 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" -dot-prop@^5.1.0, dot-prop@^5.2.0: +dot-prop@^5.1.0: version "5.3.0" resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== @@ -11922,11 +11879,6 @@ emittery@^0.8.1: resolved "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -12299,11 +12251,6 @@ escalade@^3.1.1: resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -14517,11 +14464,6 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - has@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -15027,11 +14969,6 @@ import-from@^3.0.0: dependencies: resolve-from "^5.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - import-lazy@~4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" @@ -15553,7 +15490,7 @@ is-in-browser@^1.0.2, is-in-browser@^1.1.3: resolved "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= -is-installed-globally@^0.4.0, is-installed-globally@~0.4.0: +is-installed-globally@~0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== @@ -15593,11 +15530,6 @@ is-node-process@^1.0.1: resolved "https://registry.npmjs.org/is-node-process/-/is-node-process-1.0.1.tgz#4fc7ac3a91e8aac58175fe0578abbc56f2831b23" integrity sha512-5IcdXuf++TTNt3oGl9EBdkvndXA8gmc4bz/Y+mdEpWh3Mcn/+kOw6hI7LD5CocqJWMzeb0I0ClndRVNdEPuJXQ== -is-npm@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" - integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== - is-number-object@^1.0.4: version "1.0.7" resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" @@ -15880,11 +15812,6 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - isarray@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -17196,7 +17123,7 @@ language-tags@^1.0.5: dependencies: language-subtag-registry "~0.3.2" -latest-version@5.1.0, latest-version@^5.1.0: +latest-version@5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== @@ -19342,9 +19269,9 @@ node-releases@^2.0.1: integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== nodemon@^2.0.2: - version "2.0.18" - resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.18.tgz#0f5a3aa7b4587f2626e6f01369deba89cb0462a2" - integrity sha512-uAvrKipi2zAz8E7nkSz4qW4F4zd5fs2wNGsTx+xXlP8KXqd9ucE0vY9wankOsPboeDyuUGN9vsXGV1pLn80l/A== + version "2.0.19" + resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz#cac175f74b9cb8b57e770d47841995eebe4488bd" + integrity sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A== dependencies: chokidar "^3.5.2" debug "^3.2.7" @@ -19352,10 +19279,10 @@ nodemon@^2.0.2: minimatch "^3.0.4" pstree.remy "^1.1.8" semver "^5.7.1" + simple-update-notifier "^1.0.7" supports-color "^5.5.0" touch "^3.1.0" undefsafe "^2.0.5" - update-notifier "^5.1.0" nopt@1.0.10, nopt@~1.0.10: version "1.0.10" @@ -21581,13 +21508,6 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -pupa@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== - dependencies: - escape-goat "^2.0.0" - puppeteer@^15.0.0: version "15.2.0" resolved "https://registry.npmjs.org/puppeteer/-/puppeteer-15.2.0.tgz#9cd81334f9c6a2e1c972b5a7ecf3f18ab3bfb978" @@ -23227,13 +23147,6 @@ semver-compare@^1.0.0: resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - semver-store@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/semver-store/-/semver-store-0.3.0.tgz#ce602ff07df37080ec9f4fb40b29576547befbe9" @@ -23244,7 +23157,7 @@ semver-store@^0.3.0: resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.0.0: +semver@7.0.0, semver@~7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== @@ -23515,6 +23428,13 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" +simple-update-notifier@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz#7edf75c5bdd04f88828d632f762b2bc32996a9cc" + integrity sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew== + dependencies: + semver "~7.0.0" + sinon@^13.0.2: version "13.0.2" resolved "https://registry.npmjs.org/sinon/-/sinon-13.0.2.tgz#c6a8ddd655dc1415bbdc5ebf0e5b287806850c3a" @@ -24186,7 +24106,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -24203,15 +24123,6 @@ string-width@^2.1.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - string-width@^5.0.0: version "5.1.2" resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -24267,7 +24178,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@5.2.0, strip-ansi@^5.1.0: +strip-ansi@5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== @@ -25510,13 +25421,6 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - unist-builder@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.0.tgz#728baca4767c0e784e1e64bb44b5a5a753021a04" @@ -25664,26 +25568,6 @@ upath@^2.0.1: resolved "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== -update-notifier@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" - integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== - dependencies: - boxen "^5.0.0" - chalk "^4.1.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.4.0" - is-npm "^5.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.1.0" - pupa "^2.1.1" - semver "^7.3.4" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - upper-case-first@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324" @@ -26311,13 +26195,6 @@ wide-align@^1.1.0, wide-align@^1.1.2, wide-align@^1.1.5: dependencies: string-width "^1.0.2 || 2 || 3 || 4" -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - window-size@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" @@ -26489,11 +26366,6 @@ xcase@^2.0.1: resolved "https://registry.npmjs.org/xcase/-/xcase-2.0.1.tgz#c7fa72caa0f440db78fd5673432038ac984450b9" integrity sha1-x/pyyqD0QNt4/VZzQyA4rJhEULk= -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - xhr@^2.0.1: version "2.6.0" resolved "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" From 4c6a0c35406a98839bfb6db72bec8848589d7fc0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Jul 2022 19:52:15 +0000 Subject: [PATCH 209/231] fix(deps): update dependency logform to v2.4.2 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index ace2225c5e..64c0e6f203 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17802,9 +17802,9 @@ log-update@^4.0.0: wrap-ansi "^6.2.0" logform@^2.3.2, logform@^2.4.0: - version "2.4.1" - resolved "https://registry.npmjs.org/logform/-/logform-2.4.1.tgz#512c9eaef738044d1c619790ba0f806c80d9d3a9" - integrity sha512-7XB/tqc3VRbri9pRjU6E97mQ8vC27ivJ3lct4jhyT+n0JNDd4YKldFl0D75NqDp46hk8RC7Ma1Vjv/UPf67S+A== + version "2.4.2" + resolved "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz#a617983ac0334d0c3b942c34945380062795b47c" + integrity sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw== dependencies: "@colors/colors" "1.5.0" fecha "^4.2.0" From 57b19bbcc54f3b2dd04f54ca2e72bdbbb684e7d5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Jul 2022 20:04:46 +0000 Subject: [PATCH 210/231] fix(deps): update dependency aws-sdk to v2.1168.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 b138a8f9dd..d595536ba5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8423,9 +8423,9 @@ aws-sdk-mock@^5.2.1: traverse "^0.6.6" aws-sdk@^2.1122.0, aws-sdk@^2.840.0, aws-sdk@^2.948.0: - version "2.1167.0" - resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1167.0.tgz#e8614bce1a7355782734b6928792f14d11b39231" - integrity sha512-hUJzAqWVfNYpct1S+GjyPIc2s+GZcAhbWVqIG4qbLYZ3+sBTcjv3lLH5zx7K+qcTGINDU0g4EsMi6hIrAU+blg== + version "2.1168.0" + resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1168.0.tgz#7936459edee0c999065f1ecf2ef0bea89ea056c1" + integrity sha512-9+WYoYTHHjLqeWdSSLbNpmc/NgnZpX4LGiyYjXenh4WNRBXshXI0XioTK8BQgDscVzB978EJV8kG1nZGE3USzw== dependencies: buffer "4.9.2" events "1.1.1" From 3688ba7ddd30f13b7a7d8dbdc994876411dafa60 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Jul 2022 20:05:06 +0000 Subject: [PATCH 211/231] chore(deps): update docker/build-push-action action to v3 Signed-off-by: Renovate Bot --- .github/workflows/deploy_docker-image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy_docker-image.yml b/.github/workflows/deploy_docker-image.yml index 6cb97d1a9e..7c42505b3e 100644 --- a/.github/workflows/deploy_docker-image.yml +++ b/.github/workflows/deploy_docker-image.yml @@ -79,7 +79,7 @@ jobs: uses: docker/setup-buildx-action@v1 - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v3 with: context: './example-app' file: ./example-app/packages/backend/Dockerfile From df9dab74402016b6ad93cee64134f6994db092b1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 00:40:50 +0000 Subject: [PATCH 212/231] fix(deps): update dependency @azure/msal-node to v1.11.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 6ef48ae610..918316164a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -344,17 +344,17 @@ dependencies: debug "^4.1.1" -"@azure/msal-common@^7.0.0": - version "7.0.0" - resolved "https://registry.npmjs.org/@azure/msal-common/-/msal-common-7.0.0.tgz#f4b52c6d9591cf8720dcb24c1d21fce2d186f871" - integrity sha512-EkaHGjv0kw1RljhboeffM91b+v9d5VtmyG+0a/gvdqjbLu3kDzEfoaS5BNM9QqMzbxgZylsjAjQDtxdHLX/ziA== +"@azure/msal-common@^7.1.0": + version "7.1.0" + resolved "https://registry.npmjs.org/@azure/msal-common/-/msal-common-7.1.0.tgz#b77dbf9ae581f1ed254f81d56422e3cdd6664b32" + integrity sha512-WyfqE5mY/rggjqvq0Q5DxLnA33KSb0vfsUjxa95rycFknI03L5GPYI4HTU9D+g0PL5TtsQGnV3xzAGq9BFCVJQ== "@azure/msal-node@^1.1.0", "@azure/msal-node@^1.3.0": - version "1.10.0" - resolved "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.10.0.tgz#ee3a26201c4899cc6928cc331c31d3568d3cb728" - integrity sha512-oSv9mg199FpRTe+fZ3o9NDYpKShOHqeceaNcCHJcKUaAaCojAbfbxD1Cvsti8BEsLKE6x0HcnjilnM1MKmZekA== + version "1.11.0" + resolved "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.11.0.tgz#d8bd3f15c1f05bf806ba6f9479c48c2eddd6a98d" + integrity sha512-KW/XEexfCrPzdYbjY7NVmhq9okZT3Jvck55CGXpz9W5asxeq3EtrP45p+ZXtQVEfko0YJdolpCNqWUyXvanWZg== dependencies: - "@azure/msal-common" "^7.0.0" + "@azure/msal-common" "^7.1.0" jsonwebtoken "^8.5.1" uuid "^8.3.0" From 7ac8f14c143ee48a0a9c200649f2657c4b6c4e65 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 01:06:12 +0000 Subject: [PATCH 213/231] chore(deps): update docker/login-action action to v2 Signed-off-by: Renovate Bot --- .github/workflows/deploy_docker-image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy_docker-image.yml b/.github/workflows/deploy_docker-image.yml index 6cb97d1a9e..117271810a 100644 --- a/.github/workflows/deploy_docker-image.yml +++ b/.github/workflows/deploy_docker-image.yml @@ -69,7 +69,7 @@ jobs: working-directory: ./example-app - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.actor }} From 3fd33bb96013f06592fd9feb805e9b5fcf0dadf7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 01:41:10 +0000 Subject: [PATCH 214/231] chore(deps): update docker/setup-buildx-action action to v2 Signed-off-by: Renovate Bot --- .github/workflows/deploy_docker-image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy_docker-image.yml b/.github/workflows/deploy_docker-image.yml index 6cb97d1a9e..5917fdaa3b 100644 --- a/.github/workflows/deploy_docker-image.yml +++ b/.github/workflows/deploy_docker-image.yml @@ -76,7 +76,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Build and push uses: docker/build-push-action@v2 From 51454b762eadd0a9cf8428210129a1248fb0a78a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 08:45:30 +0000 Subject: [PATCH 215/231] chore(deps): update dependency puppeteer to v15.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 4393aedfb8..ceb7e164bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21509,9 +21509,9 @@ punycode@^2.1.0, punycode@^2.1.1: integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== puppeteer@^15.0.0: - version "15.3.0" - resolved "https://registry.npmjs.org/puppeteer/-/puppeteer-15.3.0.tgz#2d79200cb72d938dfc7af4fdedaa03c04e7ace14" - integrity sha512-PYZwL0DjGeUOauSie6n9Pf+vDUod+vFnC1uHa1Uj3ex1PhRI6DOheau6oJxxj9oyEPWy8SS19KfZDwln4v4LTg== + version "15.3.1" + resolved "https://registry.npmjs.org/puppeteer/-/puppeteer-15.3.1.tgz#0ff9b433a8fc3798f5ec82ea4b31ec47857219cf" + integrity sha512-Z+SpYBiS1zUzMXV7Wnhe2pyuVCFAFRTq1UrUWHB2CkLos5v7bXvXYuZ3Fn5pSN5IObxijyx4opNYKTCRnGni6Q== dependencies: cross-fetch "3.1.5" debug "4.3.4" From f2c557538d078a72fc2ce49f83d6aaa6edbe7389 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 09:26:24 +0000 Subject: [PATCH 216/231] fix(deps): update dependency @maxim_mazurok/gapi.client.calendar to v3.0.20220701 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4393aedfb8..3402886f0e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4438,9 +4438,9 @@ react-is "^16.8.0 || ^17.0.0" "@maxim_mazurok/gapi.client.calendar@^3.0.20220408": - version "3.0.20220624" - resolved "https://registry.npmjs.org/@maxim_mazurok/gapi.client.calendar/-/gapi.client.calendar-3.0.20220624.tgz#17817142e348ce811415dfb111299fbdac2450a0" - integrity sha512-5+x4A6l8GY+dojvXUBQGc0Y4JOm9lBY1YZfCAEEZPjBcXkx0vs/CenPnmAu/fwQgGSrQLipxFV+pS6RL3L28mg== + version "3.0.20220701" + resolved "https://registry.npmjs.org/@maxim_mazurok/gapi.client.calendar/-/gapi.client.calendar-3.0.20220701.tgz#4ee9089e8164269743e61ec36e79e095aa0926b6" + integrity sha512-3CjbVZysFdUmGWZwjYGsV3z+kViaVpiWvgR7/DX5nUtb1YWIaS0jNUCch1YVN9aDFaCWuI3UV/STveSPvUspgw== dependencies: "@types/gapi.client" "*" From 17bb338c2ccfbcef1b721ec98f902f9a033c3f19 Mon Sep 17 00:00:00 2001 From: Joost Hofman Date: Wed, 6 Jul 2022 11:39:02 +0200 Subject: [PATCH 217/231] Simplify the return statement Signed-off-by: Joost Hofman --- plugins/tech-radar/README.md | 45 +++++++++--------------------------- 1 file changed, 11 insertions(+), 34 deletions(-) diff --git a/plugins/tech-radar/README.md b/plugins/tech-radar/README.md index 824f098104..d2d5e99486 100644 --- a/plugins/tech-radar/README.md +++ b/plugins/tech-radar/README.md @@ -77,43 +77,12 @@ When defining the radar entries you can see the available properties on the file The `TechRadar` plugin uses the `techRadarApiRef` to get a client which implements the `TechRadarApi` interface. The default sample one is located [here](https://github.com/backstage/backstage/blob/master/plugins/tech-radar/src/sample.ts). To load your own data, you'll need to provide a class that implements the `TechRadarApi` and override the `techRadarApiRef` in the `app/src/apis.ts`. -```ts -// app/src/lib/DataConverter.ts -import { TechRadarLoaderResponse } from '@backstage/plugin-tech-radar'; - -export function convertTechRadarData(json: any): TechRadarLoaderResponse { - const { entries, rings, quadrants } = json; - - const normalizedEntries = entries.map(entry => { - // convert date of timeline - const timelineEntries = entry.timeline.map(timeline => { - return { - ...timeline, - date: new Date(timeline.date), - }; - }); - - return { - ...entry, - timeline: timelineEntries, - }; - }); - - return { - entries: normalizedEntries, - rings, - quadrants, - }; -} -``` - ```ts // app/src/lib/MyClient.ts import { TechRadarApi, TechRadarLoaderResponse, } from '@backstage/plugin-tech-radar'; -import { convertTechRadarData } from './DataConverter'; export class MyOwnClient implements TechRadarApi { async load(id: string | undefined): Promise { @@ -121,9 +90,17 @@ export class MyOwnClient implements TechRadarApi { const data = await fetch('https://mydata.json').then(res => res.json()); - // maybe you'll need to do some data transformation here to make it look like TechRadarLoaderResponse - // Need a converter for the Date object - return convertTechRadarData(data); + // For example, this converts the timeline dates into date objects + return { + ...data, + entries: data.entries.map(entry => ({ + ...entry, + timeline: entry.timeline.map(timeline => ({ + ...timeline, + date: new Date(timeline.date), + })) + })) + } } } From e7d66249bd89a2862d9a279a507fb5381d59f627 Mon Sep 17 00:00:00 2001 From: Joost Hofman Date: Wed, 6 Jul 2022 11:40:56 +0200 Subject: [PATCH 218/231] Simplify the return statement Signed-off-by: Joost Hofman --- plugins/tech-radar/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/tech-radar/README.md b/plugins/tech-radar/README.md index d2d5e99486..5c99541c2a 100644 --- a/plugins/tech-radar/README.md +++ b/plugins/tech-radar/README.md @@ -98,9 +98,9 @@ export class MyOwnClient implements TechRadarApi { timeline: entry.timeline.map(timeline => ({ ...timeline, date: new Date(timeline.date), - })) - })) - } + })), + })), + }; } } From 693990d4fe7ef154b2db3f36fe3b3bdb7dcd7852 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 10:09:06 +0000 Subject: [PATCH 219/231] fix(deps): update dependency @react-hookz/web to v15 Signed-off-by: Renovate Bot --- .changeset/renovate-4338117.md | 8 ++++++++ packages/core-components/package.json | 2 +- plugins/gcp-projects/package.json | 2 +- plugins/scaffolder/package.json | 2 +- .../techdocs-module-addons-contrib/package.json | 2 +- yarn.lock | 16 ++++++++-------- 6 files changed, 20 insertions(+), 12 deletions(-) create mode 100644 .changeset/renovate-4338117.md diff --git a/.changeset/renovate-4338117.md b/.changeset/renovate-4338117.md new file mode 100644 index 0000000000..199073c599 --- /dev/null +++ b/.changeset/renovate-4338117.md @@ -0,0 +1,8 @@ +--- +'@backstage/core-components': patch +'@backstage/plugin-gcp-projects': patch +'@backstage/plugin-scaffolder': patch +'@backstage/plugin-techdocs-module-addons-contrib': patch +--- + +Updated dependency `@react-hookz/web` to `^15.0.0`. diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 0d27c6419d..a6dff88333 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -66,7 +66,7 @@ "react-syntax-highlighter": "^15.4.5", "react-text-truncate": "^0.19.0", "react-use": "^17.3.2", - "@react-hookz/web": "^14.0.0", + "@react-hookz/web": "^15.0.0", "react-virtualized-auto-sizer": "^1.0.6", "react-window": "^1.8.6", "remark-gfm": "^3.0.1", diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index c3809ffaac..85cda09e86 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -40,7 +40,7 @@ "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", - "@react-hookz/web": "^14.0.0", + "@react-hookz/web": "^15.0.0", "react-router-dom": "6.0.0-beta.0" }, "peerDependencies": { diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index c371c47907..e6223d1952 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -55,7 +55,7 @@ "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", - "@react-hookz/web": "^13.0.0", + "@react-hookz/web": "^15.0.0", "@rjsf/core": "^3.2.1", "@rjsf/material-ui": "^3.2.1", "@types/json-schema": "^7.0.9", diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index e089428dbe..7668143599 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -43,7 +43,7 @@ "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", - "@react-hookz/web": "^14.0.0", + "@react-hookz/web": "^15.0.0", "git-url-parse": "^12.0.0", "react-use": "^17.2.4" }, diff --git a/yarn.lock b/yarn.lock index cbd3c41f34..ebd6888d95 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5324,18 +5324,11 @@ resolved "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= -"@react-hookz/deep-equal@^1.0.1", "@react-hookz/deep-equal@^1.0.2": +"@react-hookz/deep-equal@^1.0.2": version "1.0.2" resolved "https://registry.npmjs.org/@react-hookz/deep-equal/-/deep-equal-1.0.2.tgz#4e8bdeda027379dcf8b62a42e5f75f0351b11b35" integrity sha512-cM5kPFb6EFH5q52WzRxfRX9+8g5kq78McWOYs6e1seo+nK6NpfLupT5uOCIJp37jU8ayd4Su8ni3HRFTN2C2kg== -"@react-hookz/web@^13.0.0": - version "13.3.0" - resolved "https://registry.npmjs.org/@react-hookz/web/-/web-13.3.0.tgz#257e31049e92a121912fe1e67bdd01dbec5a203b" - integrity sha512-KswgkmqBVVDo6UnBFfssrojmDisogxC4jGZmd976R8YHoS3zdQJxjqICpOBSRohbRyYhYS9Cprw7BuV/CZcMaw== - dependencies: - "@react-hookz/deep-equal" "^1.0.1" - "@react-hookz/web@^14.0.0": version "14.7.1" resolved "https://registry.npmjs.org/@react-hookz/web/-/web-14.7.1.tgz#5e39e6fc21331cc4ae95f36e8135ad763e6c29fb" @@ -5343,6 +5336,13 @@ dependencies: "@react-hookz/deep-equal" "^1.0.2" +"@react-hookz/web@^15.0.0": + version "15.0.1" + resolved "https://registry.npmjs.org/@react-hookz/web/-/web-15.0.1.tgz#a6e5460dd16e54ccc0b899e1eed4ae29e871060f" + integrity sha512-nvVLUsDFv3fpZcINoy3I4MeaX8+yoKU21m2Ey2g0VAVqOMp+0GBBC6OHkzT2lRa2fiPIVuJwlmboSKQt7segfQ== + dependencies: + "@react-hookz/deep-equal" "^1.0.2" + "@repeaterjs/repeater@^3.0.4": version "3.0.4" resolved "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz#a04d63f4d1bf5540a41b01a921c9a7fddc3bd1ca" From b7ef3ec2f619f5fd0ccc7ec0d9cee12c3952852b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Jul 2022 12:23:56 +0000 Subject: [PATCH 220/231] chore(deps): update backstage/actions action to v0.5.0 Signed-off-by: Renovate Bot Signed-off-by: sblausten --- .github/workflows/ci.yml | 6 +++--- .github/workflows/cron.yml | 2 +- .github/workflows/deploy_nightly.yml | 2 +- .github/workflows/deploy_packages.yml | 4 ++-- .github/workflows/issue.yaml | 2 +- .github/workflows/sync_code-formatting.yml | 2 +- .github/workflows/sync_snyk-github-issues.yml | 2 +- .github/workflows/verify_e2e-linux.yml | 2 +- .github/workflows/verify_storybook.yml | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 14e46ca5ce..e38df375b6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,7 +32,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.2 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -61,7 +61,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.2.2 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -178,7 +178,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.4.0 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml index 306f91b637..5b5c8b63c8 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -8,7 +8,7 @@ jobs: cron: runs-on: ubuntu-latest steps: - - uses: backstage/actions/cron@v0.4.0 + - uses: backstage/actions/cron@v0.5.0 with: app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} diff --git a/.github/workflows/deploy_nightly.yml b/.github/workflows/deploy_nightly.yml index 15d1d48816..427a7139a0 100644 --- a/.github/workflows/deploy_nightly.yml +++ b/.github/workflows/deploy_nightly.yml @@ -26,7 +26,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.4.0 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml index 78a6d3bb8a..30d4bf9ee2 100644 --- a/.github/workflows/deploy_packages.yml +++ b/.github/workflows/deploy_packages.yml @@ -67,7 +67,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.4.0 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -145,7 +145,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.4.0 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml index c6f62a059d..bc0dd15617 100644 --- a/.github/workflows/issue.yaml +++ b/.github/workflows/issue.yaml @@ -10,4 +10,4 @@ jobs: if: github.repository == 'backstage/backstage' steps: - name: Issue sync - uses: backstage/actions/issue-sync@v0.4.0 + uses: backstage/actions/issue-sync@v0.5.0 diff --git a/.github/workflows/sync_code-formatting.yml b/.github/workflows/sync_code-formatting.yml index f4dbc122cc..0d3add5f12 100644 --- a/.github/workflows/sync_code-formatting.yml +++ b/.github/workflows/sync_code-formatting.yml @@ -20,7 +20,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.4.0 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml index 3d84c18322..9d0726e915 100644 --- a/.github/workflows/sync_snyk-github-issues.yml +++ b/.github/workflows/sync_snyk-github-issues.yml @@ -22,7 +22,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.4.0 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml index 1f7cbb5339..126670b67f 100644 --- a/.github/workflows/verify_e2e-linux.yml +++ b/.github/workflows/verify_e2e-linux.yml @@ -46,7 +46,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.4.0 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml index 9468c9bf68..89679b530a 100644 --- a/.github/workflows/verify_storybook.yml +++ b/.github/workflows/verify_storybook.yml @@ -35,7 +35,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.4.0 + uses: backstage/actions/yarn-install@v0.5.0 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} - name: storybook yarn install From 6c194b58eb2987a5196ecfd36d4425f4b613683d Mon Sep 17 00:00:00 2001 From: sblausten Date: Tue, 5 Jul 2022 17:39:26 +0200 Subject: [PATCH 221/231] Make FactRetrieverRegistry async so that a db backed implementation can be used Signed-off-by: sblausten --- .../service/fact/FactRetrieverEngine.test.ts | 4 +- .../src/service/fact/FactRetrieverEngine.ts | 11 ++---- .../src/service/fact/FactRetrieverRegistry.ts | 39 ++++++++++++------- 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.test.ts b/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.test.ts index 454711171f..44ffa6587f 100644 --- a/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.test.ts +++ b/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.test.ts @@ -206,9 +206,7 @@ describe('FactRetrieverEngine', () => { { ...testFactRetriever, handler }, ); await engine.schedule(); - const job: FactRetrieverRegistration = engine.getJobRegistration( - testFactRetriever.id, - ); + const job = await engine.getJobRegistration(testFactRetriever.id); expect(job.cadence!!).toEqual(defaultCadence); await engine.triggerJob(job.factRetriever.id); diff --git a/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.ts b/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.ts index 25e7610809..f8ff3762dd 100644 --- a/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.ts +++ b/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.ts @@ -66,11 +66,8 @@ export class FactRetrieverEngine { defaultTimeout, } = options; - await Promise.all( - factRetrieverRegistry - .listRetrievers() - .map(it => repository.insertFactSchema(it)), - ); + const retrievers = await factRetrieverRegistry.listRetrievers(); + await Promise.all(retrievers.map(it => repository.insertFactSchema(it))); return new FactRetrieverEngine( repository, @@ -84,7 +81,7 @@ export class FactRetrieverEngine { } async schedule() { - const registrations = this.factRetrieverRegistry.listRegistrations(); + const registrations = await this.factRetrieverRegistry.listRegistrations(); const newRegs: string[] = []; await Promise.all( @@ -115,7 +112,7 @@ export class FactRetrieverEngine { ); } - getJobRegistration(ref: string): FactRetrieverRegistration { + getJobRegistration(ref: string): Promise { return this.factRetrieverRegistry.get(ref); } diff --git a/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts b/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts index 504d561f17..1ad7626e8e 100644 --- a/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts +++ b/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts @@ -26,16 +26,21 @@ import { ConflictError, NotFoundError } from '@backstage/errors'; * */ export interface FactRetrieverRegistry { - readonly retrievers: Map; - register(registration: FactRetrieverRegistration): void; - get(retrieverReference: string): FactRetrieverRegistration; - listRetrievers(): FactRetriever[]; - listRegistrations(): FactRetrieverRegistration[]; - getSchemas(): FactSchema[]; + register(registration: FactRetrieverRegistration): Promise; + get(retrieverReference: string): Promise; + listRetrievers(): Promise; + listRegistrations(): Promise; + getSchemas(): Promise; } +/** + * A basic in memory fact retriever registry. + * + * You can replace this with a persistance based version using the FactRetrieverRegistry interface. + * + */ export class DefaultFactRetrieverRegistry implements FactRetrieverRegistry { - readonly retrievers = new Map(); + private readonly retrievers = new Map(); constructor(retrievers: FactRetrieverRegistration[]) { retrievers.forEach(it => { @@ -50,27 +55,31 @@ export class DefaultFactRetrieverRegistry implements FactRetrieverRegistry { ); } this.retrievers.set(registration.factRetriever.id, registration); + return Promise.resolve(); } - get(retrieverReference: string): FactRetrieverRegistration { + get(retrieverReference: string): Promise { const registration = this.retrievers.get(retrieverReference); if (!registration) { throw new NotFoundError( `Tech insight fact retriever with identifier '${retrieverReference}' is not registered.`, ); } - return registration; + return Promise.resolve(registration); } - listRetrievers(): FactRetriever[] { - return [...this.retrievers.values()].map(it => it.factRetriever); + listRetrievers(): Promise { + return Promise.resolve( + [...this.retrievers.values()].map(it => it.factRetriever), + ); } - listRegistrations(): FactRetrieverRegistration[] { - return [...this.retrievers.values()]; + listRegistrations(): Promise { + return Promise.resolve([...this.retrievers.values()]); } - getSchemas(): FactSchema[] { - return this.listRetrievers().map(it => it.schema); + async getSchemas(): Promise { + const retrievers = await this.listRetrievers(); + return Promise.resolve(retrievers.map(it => it.schema)); } } From 46cfda58aa2a685a2d48a4709f6f8dee0122d7c7 Mon Sep 17 00:00:00 2001 From: sblausten Date: Tue, 5 Jul 2022 17:41:58 +0200 Subject: [PATCH 222/231] Add changeset Signed-off-by: sblausten --- .changeset/rich-goats-breathe.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/rich-goats-breathe.md diff --git a/.changeset/rich-goats-breathe.md b/.changeset/rich-goats-breathe.md new file mode 100644 index 0000000000..6391cad0d1 --- /dev/null +++ b/.changeset/rich-goats-breathe.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-tech-insights-backend': patch +--- + +Update FactRetrieverRegistry interface to be async so that db backed implementations can be passed through to the FactRetrieverEngine. From 7001ee13d846accaa0f6958052ebe6b262a4e71d Mon Sep 17 00:00:00 2001 From: sblausten Date: Tue, 5 Jul 2022 17:59:35 +0200 Subject: [PATCH 223/231] Api report Signed-off-by: sblausten --- plugins/tech-insights-backend/api-report.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/plugins/tech-insights-backend/api-report.md b/plugins/tech-insights-backend/api-report.md index 32d45f8afd..dc90d76107 100644 --- a/plugins/tech-insights-backend/api-report.md +++ b/plugins/tech-insights-backend/api-report.md @@ -55,17 +55,15 @@ export type FactRetrieverRegistrationOptions = { // @public (undocumented) export interface FactRetrieverRegistry { // (undocumented) - get(retrieverReference: string): FactRetrieverRegistration; + get(retrieverReference: string): Promise; // (undocumented) - getSchemas(): FactSchema[]; + getSchemas(): Promise; // (undocumented) - listRegistrations(): FactRetrieverRegistration[]; + listRegistrations(): Promise; // (undocumented) - listRetrievers(): FactRetriever[]; + listRetrievers(): Promise; // (undocumented) - register(registration: FactRetrieverRegistration): void; - // (undocumented) - readonly retrievers: Map; + register(registration: FactRetrieverRegistration): Promise; } // @public From c3fe64b2c4035f12c36f41346d8c367187ba6b13 Mon Sep 17 00:00:00 2001 From: sblausten Date: Wed, 6 Jul 2022 10:11:07 +0200 Subject: [PATCH 224/231] PR comments Signed-off-by: sblausten --- .changeset/rich-goats-breathe.md | 4 ++-- .../src/service/fact/FactRetrieverRegistry.ts | 16 ++++++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/.changeset/rich-goats-breathe.md b/.changeset/rich-goats-breathe.md index 6391cad0d1..de8942c248 100644 --- a/.changeset/rich-goats-breathe.md +++ b/.changeset/rich-goats-breathe.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-tech-insights-backend': patch +'@backstage/plugin-tech-insights-backend': minor --- -Update FactRetrieverRegistry interface to be async so that db backed implementations can be passed through to the FactRetrieverEngine. +**BREAKING**: Update FactRetrieverRegistry interface to be async so that db backed implementations can be passed through to the FactRetrieverEngine. diff --git a/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts b/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts index 1ad7626e8e..4690ef9f09 100644 --- a/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts +++ b/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts @@ -42,13 +42,17 @@ export interface FactRetrieverRegistry { export class DefaultFactRetrieverRegistry implements FactRetrieverRegistry { private readonly retrievers = new Map(); - constructor(retrievers: FactRetrieverRegistration[]) { + static create( + retrievers: FactRetrieverRegistration[], + ): FactRetrieverRegistry { + const registry = new DefaultFactRetrieverRegistry(); retrievers.forEach(it => { - this.register(it); + registry.register(it); }); + return registry; } - register(registration: FactRetrieverRegistration) { + async register(registration: FactRetrieverRegistration) { if (this.retrievers.has(registration.factRetriever.id)) { throw new ConflictError( `Tech insight fact retriever with identifier '${registration.factRetriever.id}' has already been registered`, @@ -58,7 +62,7 @@ export class DefaultFactRetrieverRegistry implements FactRetrieverRegistry { return Promise.resolve(); } - get(retrieverReference: string): Promise { + async get(retrieverReference: string): Promise { const registration = this.retrievers.get(retrieverReference); if (!registration) { throw new NotFoundError( @@ -68,13 +72,13 @@ export class DefaultFactRetrieverRegistry implements FactRetrieverRegistry { return Promise.resolve(registration); } - listRetrievers(): Promise { + async listRetrievers(): Promise { return Promise.resolve( [...this.retrievers.values()].map(it => it.factRetriever), ); } - listRegistrations(): Promise { + async listRegistrations(): Promise { return Promise.resolve([...this.retrievers.values()]); } From d790943cd9d8a487c5e251d034e8c4c6dfc64830 Mon Sep 17 00:00:00 2001 From: Sam Blausten Date: Wed, 6 Jul 2022 11:44:47 +0200 Subject: [PATCH 225/231] Update .changeset/rich-goats-breathe.md Co-authored-by: Patrik Oldsberg Signed-off-by: sblausten --- .changeset/rich-goats-breathe.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.changeset/rich-goats-breathe.md b/.changeset/rich-goats-breathe.md index de8942c248..2888c2f9a7 100644 --- a/.changeset/rich-goats-breathe.md +++ b/.changeset/rich-goats-breathe.md @@ -3,3 +3,5 @@ --- **BREAKING**: Update FactRetrieverRegistry interface to be async so that db backed implementations can be passed through to the FactRetrieverEngine. + +If you have existing custom `FactRetrieverRegistry` implementations, you'll need to remove the `retrievers` member and make all the methods async. From 37174365ce50756cc76f419714cfe2527526f358 Mon Sep 17 00:00:00 2001 From: sblausten Date: Wed, 6 Jul 2022 13:05:52 +0200 Subject: [PATCH 226/231] Change constructor of default implementation Signed-off-by: sblausten --- .../src/service/fact/FactRetrieverRegistry.ts | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts b/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts index 4690ef9f09..2ee5afac04 100644 --- a/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts +++ b/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts @@ -42,14 +42,10 @@ export interface FactRetrieverRegistry { export class DefaultFactRetrieverRegistry implements FactRetrieverRegistry { private readonly retrievers = new Map(); - static create( - retrievers: FactRetrieverRegistration[], - ): FactRetrieverRegistry { - const registry = new DefaultFactRetrieverRegistry(); - retrievers.forEach(it => { - registry.register(it); + constructor(retrievers: FactRetrieverRegistration[]) { + retrievers.forEach(r => { + this.retrievers.set(r.factRetriever.id, r); }); - return registry; } async register(registration: FactRetrieverRegistration) { @@ -59,7 +55,6 @@ export class DefaultFactRetrieverRegistry implements FactRetrieverRegistry { ); } this.retrievers.set(registration.factRetriever.id, registration); - return Promise.resolve(); } async get(retrieverReference: string): Promise { @@ -69,21 +64,19 @@ export class DefaultFactRetrieverRegistry implements FactRetrieverRegistry { `Tech insight fact retriever with identifier '${retrieverReference}' is not registered.`, ); } - return Promise.resolve(registration); + return registration; } async listRetrievers(): Promise { - return Promise.resolve( - [...this.retrievers.values()].map(it => it.factRetriever), - ); + return [...this.retrievers.values()].map(it => it.factRetriever); } async listRegistrations(): Promise { - return Promise.resolve([...this.retrievers.values()]); + return [...this.retrievers.values()]; } async getSchemas(): Promise { const retrievers = await this.listRetrievers(); - return Promise.resolve(retrievers.map(it => it.schema)); + return retrievers.map(it => it.schema); } } From 339e6ea4ef6a9bd9bd99425eda6cb2520a27f533 Mon Sep 17 00:00:00 2001 From: sblausten Date: Wed, 6 Jul 2022 13:10:04 +0200 Subject: [PATCH 227/231] Register sync Signed-off-by: sblausten --- .../src/service/fact/FactRetrieverRegistry.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts b/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts index 2ee5afac04..9f4be11bec 100644 --- a/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts +++ b/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts @@ -44,11 +44,11 @@ export class DefaultFactRetrieverRegistry implements FactRetrieverRegistry { constructor(retrievers: FactRetrieverRegistration[]) { retrievers.forEach(r => { - this.retrievers.set(r.factRetriever.id, r); + this.registerSync(r); }); } - async register(registration: FactRetrieverRegistration) { + registerSync(registration: FactRetrieverRegistration) { if (this.retrievers.has(registration.factRetriever.id)) { throw new ConflictError( `Tech insight fact retriever with identifier '${registration.factRetriever.id}' has already been registered`, @@ -57,6 +57,10 @@ export class DefaultFactRetrieverRegistry implements FactRetrieverRegistry { this.retrievers.set(registration.factRetriever.id, registration); } + async register(registration: FactRetrieverRegistration) { + this.registerSync(registration); + } + async get(retrieverReference: string): Promise { const registration = this.retrievers.get(retrieverReference); if (!registration) { From 631bd9c91656107df9dc902b18cdcb923394812c Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 6 Jul 2022 14:05:29 +0200 Subject: [PATCH 228/231] ADOPTERS.md: add new adopters Signed-off-by: Patrik Oldsberg --- ADOPTERS.md | 382 +++++++++++++++++++++++++++------------------------- 1 file changed, 195 insertions(+), 187 deletions(-) diff --git a/ADOPTERS.md b/ADOPTERS.md index 6bf1f482bf..b3e27472f9 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -3,190 +3,198 @@ _If you're using Backstage in your organization, please try to add your company name to this list. It really helps the project to gain momentum and credibility. It's a small contribution back to the project with a big impact._ _You can do this by using the [Adopter form](https://form.typeform.com/to/zcOaKikB) or by editing this file after following the [CONTRIBUTING.md](./CONTRIBUTING.md)._ - -| Organization | Contact | Description of Use | -|-----------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [Spotify](https://www.spotify.com) | [@leemills83](https://github.com/leemills83) | Main interface towards all of Spotify's infrastructure and technical documentation. | -| [bol.com](https://www.bol.com) | [@sagacity](https://github.com/sagacity) | Initial work being done to unify platform tooling. | -| [DFDS](https://www.dfds.com) | [@carlsendk](https://github.com/carlsendk) | V2 self-service platform. | -| [Roadie](https://roadie.io) | [@dtuite](https://github.com/dtuite) | Hosted, managed Backstage with easy set-up | -| [Roku](https://www.roku.com) | [@timurista](https://github.com/timurista) | Initial work on Cloud engineering service platform. | -| [SDA SE](https://sda.se) | [@dschwank](https://github.com/dschwank), [@iammnils](https://github.com/iammnils) | Central place for developing and sharing services in our insurance ecosystem. | -| [H-E-B](https://www.heb.com) | [@german-j-rodriguez](https://github.com/german-j-rodriguez) | Initial work on Engineering Portal service platform. | -| [American Airlines](https://www.aa.com) | [@paulpach](https://github.com/paulpach) | Central place for developers to develop and maintain applications | -| [Kiwi.com](https://kiwi.com) | [@aexvir](https://github.com/aexvir) | Replacing the frontend of [The Zoo](https://github.com/kiwicom/the-zoo), their service registry. | -| [Voi](https://www.voiscooters.com/) | [@K-Phoen](https://github.com/K-Phoen) | Developer portal, main gateway to our infrastructure, documentation and internal tooling. | -| [Talkdesk](https://www.talkdesk.com) | [@jaime-talkdesk](https://github.com/jaime-talkdesk) | Initial work for Engineering Portal and Self Provisioning to R&D | -| [Wealthsimple](https://www.wealthsimple.com) | [@andrewthauer](https://github.com/andrewthauer) | Developer portal, service catalog, documentation and tooling | -| [Grab](https://www.grab.com) | [@althafh](https://github.com/althafh) | Initial work as a unified interface for all of Grab's internal tooling | -| [Telenor Sweden](https://www.telenor.se) | [@O5ten](https://github.com/O5ten) | Building a developer portal for scaffolding projects towards our unified build environment and microservice stacks | -| [Fiverr](https://www.fiverr.com) | [@nirga](https://github.com/nirga) | Unifying separate tools that developers are using today (i.e. monitoring, dead letter queues management, etc.) into a single platform. | -| [Zalando SE](https://www.zalando.de) | [@leviferreira](https://github.com/leviferreira) | Building V2 of the Internal Development Portal. | -| [LegalZoom](https://legalzoom.com) | [@backjo](https://github.com/backjo) | Developer portal - hub for all engineering projects and metadata. | -| [Expedia Group](https://www.expediagroup.com) | [@guillermomanzo](https://github.com/guillermomanzo), [Sheena Sharma](mailto:shesharma@expediagroup.com), [@ajbw](https://github.com/ajbw) | EG Common Developer Toolkit | -| [Paddle.com](https://paddle.com) | [Ioannis Georgoulas](https://github.com/geototti21) | Developer portal (Tech Docs, Service Catalog, Internal Tooling), we use vanilla Backstage FE and custom BE implementation in Go | -| [Acast.com](https://acast.com) | [Olle Lundberg](https://github.com/lndbrg) | Developer portal with tech docs, service catalog and a bunch of other internal tooling | -| [Lunar](https://lunar.app) | [Jacob Valdemar](https://github.com/JacobValdemar) | Internal developer portal for service overview and insights, API documentation, technical guides, onboarding guides and RFC's. | -| [Trendyol](https://trendyol.com) | [Gamze Senturk](https://github.com/gmzsenturk), [Mert Can Bilgic](https://github.com/mertcb) | The Developer Portal has been called `Pandora`. Provides an overview of Trendyol tech ecosystem. TechDocs, Catalog, Custom Plugins and Theme. | -| [Peloton](https://www.onepeloton.com/) | [Matt Waldron](https://github.com/daftgopher) | Creating our first developer portal and tech-docs. Exploring Service Catalog, Tech Insights and Cost Insights as well. | -| [TELUS](https://telus.com) | [Seb Barre](https://github.com/sbarre) | The Go-to place to find answers about development and delivery at TELUS. | -| [Brex](https://www.brex.com/) | [Vamsi Chitters](https://github.com/vamsikc) | A centralized UI to understand how a service fits in the whole Brex architecture and manage a team’s engineering dependencies. | -| [Oriflame](https://www.oriflame.com/) | [Oriflame](https://github.com/oriflame) | Internal developer portal for services, single page apps and packages overview, API documentation, technical guides, tech-radar and more. | -| [Booz Allen Hamilton](https://www.boozallen.com/) | [Jason Miller](https://github.com/JasonMiller-BAH) | Developer portal for a full-stack software development ecosystem that accelerates consistent and repeatable Modern Software Development practices for internal innovation and investments. | -| [Netflix](https://www.netflix.com/) | [bleathem](https://github.com/bleathem) | Our Backstage implementation will be the front door to a unified experience connecting our internal platform products across important workflows with integrated knowledge and support. | -| [b.well](https://www.icanbwell.com/) | [Jacob Rosales](https://github.com/jrosales) | Foundation for our engineering portal and cloud insights. | -| [PagerDuty](https://www.pagerduty.com/) | [Mark Shaw](https://github.com/markshawtoronto) | Developer portal, initially focused on software templates and tech-docs. | -| [MoonShiner](https://moonshiner.at) | [Fabian Hippmann](https://github.com/FabianHippmann) | Developer portal - helps us keep track of our customer projects, onboard new developers & improve our development process 🌕🚀🧑‍🚀 | -| [FundApps](https://www.fundapps.co/) | [Elliot Greenwood](https://github.com/egnwd) | Developer Portal - A place for us to keep track of our projects and documentation for all services and processes | -| [DAZN](https://dazn.com/) | [David Rubio Vidal](https://github.com/davidrv87), [Marco Crivellaro](https://github.com/crivetechie), [Alex Hollerith](mailto:alex.hollerith@dazn.com), [Kamil Wolny](https://github.com/mrwolny) | Ingesting all of DAZN's repos for the catalog, migrating our internal platform apps (pull request boards, release information, inner source marketplace etc) to Backstage plugins (where applicable). | -| [HelloFresh](https://www.hellofresh.de/) | [@iammuho](https://github.com/iammuho), [@ElenaForester](https://github.com/ElenaForester), [@diegomarangoni](https://github.com/diegomarangoni) | Our developer portal at HelloFresh - Spread across an organisation of 500+ engineers globally. | -| [FactSet](https://www.factset.com/) | [@kuangp](https://github.com/kuangp) | Developer portal to provide discoverability to all internal components, APIs, documentation, and scaffold templates with integrations to our internal infrastructure tools. | -| [Workrise](https://www.workrise.com/) | [Michael Rode](https://github.com/michaelrode) | Developer portal, main gateway to our infrastructure, documentation and internal tooling. | -| [RedVentures](https://www.redventures.com/) | [Chris Diaz](https://github.com/codingdiaz) | Developer portal that brings everything an engineer needs to provide value into a single pane of glass. | -| [MavTek](https://www.mavtek.com/) | [@fgascon](https://github.com/fgascon) | Developer portal focused on standardizing practices, centralizing documentation and streamlining developer practices. | -| [QuintoAndar](https://www.quintoandar.com.br/) | [@quintoandar](https://github.com/quintoandar) | Developer portal, services catalog and centralization of service metrics. | -| [empathy.co](https://empathy.co/) | [@guillermotti](https://github.com/guillermotti) | Developer portal for tech docs, service catalog, plugin discovery and much more. | -| [creditas.com](https://creditas.com/) | [@aureliosaraiva](https://github.com/aureliosaraiva) [@Creditas](https://github.com/creditas) | Centralization of all services, standards, documentation, etc. We started the deployment process. | -| [Prisjakt](https://www.prisjakt.nu) / [PriceSpy](https://pricespy.co.uk) | [@kennylindahl](https://github.com/kennylindahl) | Internal developer portal - Documentation, scaffolding, software catalog, TechRadar, Gitlab org data integration | -| [Powerspike](https://powerspike.tv/) | [@trelore](https://github.com/trelore) | Developer portal for documentation of core libraries and repositories. | -| [2U](https://2u.com) | [@danielleEriksen](https://github.com/danielleEriksen), [@sbhatia](https://github.com/sbhatia) | Development team home-base, promoting service discoverability, resource dependencies, and tech radar | -| [Taxfix](https://taxfix.de/) | [Sami Ur Rehman](https://github.com/samiurrehman92) | Developer's portal with software catalog at it's core. Hosts API Specs, Tech Docs, Tech Radar and some custom plugins. | -| [Busuu](https://busuu.com/) | [Adam Tester](https://github.com/adamtester) | Developer portal with service catalog, API docs, Event docs, service templating, and cost insights. | -| [Loadsmart](https://loadsmart.com/) | [Loadsmart](https://github.com/loadsmart) | Improve services visibility and operations for service owners and developers. | -| [Monzo](https://monzo.com/) | [@WillSewell](https://github.com/WillSewell), [@joechrisellis](https://github.com/joechrisellis) | Developer portal showing metadata and docs for over 2000 microservices. We have built a number of plugins such as a UI for our system to measure [software excellence](https://monzo.com/blog/2021/09/15/how-we-measure-software-excellence), and a UI to show deployment and config change events. | -| [Vaimo](https://www.vaimo.com) | [@vaimo-magnus](https://github.com/vaimo-magnus) | Developer Portal for our developers at Vaimo, currently docs and self-service towards our internal PaaS based on k8s. Plans to extend the catalog into Projects, Environments etc | -| [Wayfair](https://www.wayfair.com) | [@fransan](https://github.com/fransan), [@errskipower](https://github.com/errskipower), [@hrrs](https://github.com/hrrs) | Developer portal for service catalog, technical documentation, and APIs. | -| [CircleHD](https://www.circlehd.com) | [@circlehddev](https://github.com/circlehddev) | Developer Portal for internal dev team across the globe | -| [CastDesk](https://castdesk.com) | [@circlehddev](https://github.com/circlehddev) | Developer Portal for internal dev team across the globe | -| [Santagostino](https://santagostino.it) | [@santagostino](https://github.com/santagostino) | Developer portal, gateway to our infrastructure, documentation, service catalog and internal tooling. | -| [Peak](https://peak.ai) | [Luke Beamish](https://github.com/lukebeamish-peak) | Developer portal for all internal engineers to access documentation and tooling. | -| [Gelato](https://gelato.com/) | [Dmitry Makarenko](https://github.com/dmitry-makarenko-gelato) | Developer portal: documentation, service templates, org structure, service catalog, plugins for integration with internal and third-party systems🚀. | -| [GoCardless](https://gocardless.com/) | [James Turley](https://github.com/tragiclifestories) | Developer portal: documentation, service templates, org structure, service catalog, plugins for integration with internal systems. | -| [Box](https://www.box.com) | [@kielosz](https://github.com/kielosz), [@jluk-box](https://github.com/jluk-box), [@ptychu](https://github.com/ptychu), [@alexrybch](https://github.com/alexrybch), [@szubster](https://github.com/szubster) | Developer portal for service catalog, integration with internal systems, new service onboarding. | -| [Bazaarvoice](https://www.bazaarvoice.com) | [@niallmccullagh](https://github.com/niallmccullagh) | Developer portal for service catalog and scaffolds, publishing Github docs and API documentation, visualising our internal tech radar and our product engineering org structure. | -| [Krateo PlatformOps](https://www.krateo.io) | [@projectkerberus](https://github.com/projectkerberus) | A multi-cloud control plane to create, manage and deploy any kind of resource easily and centrally via a Developer Portal that centralizes via a self-service catalog the templating and ownership of services, the available documentation, the overview of the components that compose an entire domain and all the data of the service lifecycle. | -| [Adevinta](https://www.adevinta.com) | [Ray Sinnema](https://github.com/RemonSinnema) | Showcase shared services to our internal customers. | -| [Splunk](https://www.splunk.com) | [@tonytamsf](https://github.com/tonytamsf) | Developer portal as a centralized place to find people, services, documentation, escalation policies and give bravos. This portal is also being used as a centralized search engine for engineering specific documentation. | -| [SoundCloud](https://www.soundcloud.com) | [Julio Zynger](https://github.com/julioz) | Developer portal as a [humane registry](https://martinfowler.com/bliki/HumaneRegistry.html) for the organization: catalog of people, services, documentation, feature toggles, escalation policies, etc. | -| [Volvofinans Bank](https://www.volvofinans.se) | [Johan Hammar](https://github.com/johanhammar) | Developer portal enabling engineers to manage and explore software and documentation. | -| [Palo Alto Networks](https://www.paloaltonetworks.com) | [Jeremy Guarini](https://github.com/jeremyguarini), [Brian Lomeland](https://github.com/bbbmmmlll), [Palo Alto Networks](https://github.com/PaloAltoNetworks) | Developer portal, service catalog, documentation and tooling | -| [Signal Iduna Group](https://www.signal-iduna.de/) | [Jonas Thomsen](https://github.com/JoThomsen) | Developer Portal, documentation, monitoring, service catalog for our insurance ecosystem | -| [Tradeshift](https://www.tradeshift.com/) | [Soren Mathiasen](https://github.com/sorenmat) | Developer Portal: documentation, monitoring, service templates, service catalog for our micro services | -| [Unity](https://unity.com) | [Ted Cordery](https://github.com/TeddyBallGame) | A centralized service catalog with documentation for our service engineers. | -| [PicPay](https://www.picpay.com) | [Luis Baroni](https://github.com/lcsbaroni), [Renata Poluceno](https://github.com/renatapoluceno), [PicPay](https://github.com/picpay) | Developer portal for building services through templates, service catalog with ownership of services, documentation and metrics providing autonomy and visibility for all. | -| [Epic Games](https://www.epicgames.com) | [Brian Jung](https://github.com/brian-at-epic), [Jeff Goldian](https://github.com/jeffgoldian-Epic) | Developer Portal: Service Catalog, Documentation, Software Templates and more making our internal teams' lives easier! | -| [Globo](https://globo.com) | [Carlos Gusmão](https://github.com/caeugusmao), [Guilherme Vierno](https://github.com/vierno), [Denis Aoki](https://github.com/dnsaoki2), [Maycon Dionisio](https://github.com/MayconDionisio), | Reduce the friction of accessing the information engineers need about Globo's digital services through a coherent and centralized experience. | -| [QBE](https://www.qbe.com/) | [Daniel Steel](https://github.com/danielsteelqbe), [Pete Jespers](https://github.com/petejespersqbe) | Developer portal allowing our global teams to explore and create applications, documentation and cloud infrastructure easily and quickly 🚀 | -| [GoTo](https://www.goto.com) | [Lorenzo Orsatti](https://github.com/lorsatti) | Improve onboarding experience of new developers. Discover faster and painlessly developer documentation, API definitions and team information. Provide useful dev metrics in a central place. Provide easy-to-use templates for new services. | -| [Telstra](https://www.telstra.com.au) | [@kiranpatel11](https://github.com/kiranpatel11), [JasonC](https://github.com/JasonC17) | Primary usage: software catalog and templates
Emerging usage : TechDocs, Explore Ecosystem, TechRadar, etc | -| [Mosaico](https://www.mosaico.com.br/) | [Wédney Yuri](https://github.com/wedneyyuri),[@tino.milton](https://github.com/miltonjacomini) | A centralized service catalog of our documentation for our service engineers. | -| [Mox Bank](https://www.mox.com/) | [Nick Laqua](https://github.com/nick-laqua-dragon) | "Single pane of glass" developer portal for providing a best-in-class developer experience to our product teams and making Mox the best tech environment in Hongkong 🥰🚀 | -| [Keyloop](https://www.keyloop.com/) | [Andre Wanlin](https://github.com/awanlin) | Future-motive Developer Portal to help our teams create technology to make everything about buying and owning a car better. 🚗 | -| [Simply Business](https://sbtech.simplybusiness.co.uk/) | [@addersuk](https://github.com/addersuk), [@LightningStairs](https://github.com/LightningStairs), [@punitcse](https://github.com/punitcse), [@moltenice](https://github.com/moltenice) | Central developer portal to access everything a developer needs such as docs, internal service catalog, and the ability to quickly create a new service from a template. Internally developed Backstage plugins allow us to customise the experience to how we work. | -| [Overwolf](https://www.overwolf.com) | [@tomwolfgang](https://github.com/tomwolfgang) | Dev portal - software catalog, tech-docs, scaffolding | -| [Hotmart](https://www.hotmart.com) | [@fabioviana-hotmart](https://github.com/fabioviana-hotmart) | The main Developers Portal to centralize docs, applications and technical metrics. | -| [EF Education First](https://www.ef.com) | [Daan Boerlage](https://github.com/runebaas), [Rafał Nowosielski](https://github.com/rnowosielski) | Our developer portal - primarily used for cataloging and scaffolding with the ambition to expand with more feature adoptions over time | -| [Power Home Remodeling](https://www.techatpower.com) | [Ben Langfeld](https://github.com/benlangfeld) | Developer portal to our internal services, build on open-source software (including Kubernetes) in our own datacenters. Our Portal allows our team members to navigate inherant complexity and standardise. | -| [Livspace](https://www.livspace.com) | [Praveen Kumar](https://github.com/praveen-livspace) | Developer portal, service catalog, tech docs, API docs and plugins | -| [Just Eat Takeaway](https://www.justeattakeaway.com) | [Kim Wilson](https://github.com/kwilson541) | Our developer portal which centralises applications, reduces cognitive load and provides teams insights. | -| [Hopin](https://hopin.com) | [Vladimir Glafirov](https://github.com/vglafirov), [Chloe Lee](https://github.com/msfuko) | Developer portal to streamline the development practices. Integrated with service catalog, software templates, application monitoring, tech docs and plugins. | -| [HBO Max](https://hbomax.com) | [@mdb](https://github.com/mdb), [@nesta219](https://github.com/nesta219), [@nmische](https://github.com/nmische), [@hbomark](https://github.com/hbomark) | Developer portal hosting service catalog and API documentation, as well as cloud infrastructure details, operational visibility tools, and a custom plugin for browsing notable platform change events, such as deployments and configuration updates. | -| [RCHLO](https://www.riachuelo.com.br) & [MIDWAY](https://www.midway.com.br) | [@marcosborges](https://github.com/marcosborges), [@defaultbr](https://github.com/defaultbr) | Self-Service Platform | -| [HP Inc](https://www.hp.com) | [Damon Kaswell](https://github.com/dekoding) | DevEx engagement hub (dev portal: docs, standards, Q&A) and extensive assets catalog (APIs, services, code, data, etc.) for the pan-HP internal developer community. | -| [VMware](https://www.vmware.com) | [@mpriamo](https://github.com/mpriamo), [@krisapplegate](https://github.com/krisapplegate) | Part of [Tanzu Application Platform](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/index.html) offering; internal developer portal | -| [Ualá](https://www.uala.com.ar/) | [Santiago Bernal](https://github.com/sabernal) | Initial work being done to centralize documentation for all our microservices and APIs, as well as scaffolding new services and tracking code quality | -| [IKEA IT AB](https://www.ingka.com) | [@bjornramberg](https://github.com/bjornramberg), [@supriyachitale](https://github.com/supriyachitale) | Supporting engineers at scale with self serve access and connecting the dots of our engineering platform and services, enabling product teams to move faster and go further, and unleashing innovation, reuse and co-creation across the organisation. | -| [Invitae](https://www.invitae.com/en) | [@ryan-hanchett](https://github.com/ryan-hanchett), [@gmandler42](https://github.com/gmandler42) | Centralized Developer Experience portal, putting all of our tooling behind a single pane of glass and creating a living service catalog. | -| [Fortum](https://www.fortum.com/) | [@brunoamaroalmeida](https://github.com/brunoamaroalmeida), [@dhaval-vithalani](https://github.com/dhaval-vithalani), [@sunilkumarmohanty](https://github.com/sunilkumarmohanty) | A central portal containing information about our applications, services, processes and other software assets to be used by Fortum software engineering community. | -| [Procore](https://www.procore.com/jobs/engineering) | [@shayon](https://github.com/Shayon), [@jamesdabbs-procore](https://github.com/jamesdabbs-procore) | Developer portal - centralized software catalog and templates to enable self serve and reduce cognitive load. | -| [Bradesco](https://banco.bradesco/html/classic/sobre/index.shtm) | [@danilosoarescardoso](https://github.com/danilosoarescardoso) | Centralized developer portal with software catalog, software templates, techdocs and some plugins from community and by our own. | -| [SeatGeek](https://seatgeek.com) | [@zhammer](https://github.com/zhammer) | Software catalog and documentation platform | -| [Grupo Boticário](https://www.grupoboticario.com.br/) | [@chicoribas](https://github.com/chicoribas), [@fndiaz](https://github.com/fndiaz), [@digogid](https://github.com/digogid), [@manumbs](https://github.com/manumbs), [@haooliveira84](https://github.com/haooliveira84), [@Rhullyam](https://github.com/Rhullyam) | Centralized developer portal with catalog, documentation, and software templates to build a ready to go application, including pipelines (CI/CD) and cloud services provisioning | -| [Snyk](https://snyk.io/) | [@robcresswell](https://github.com/robcresswell) | Developer portal for software discovery, API documentation and templating | -| [Stilingue](https://www.stilingue.com.br/) | [@stilingue-inteligencia-artificial](https://github.com/Stilingue-IA), [@bbviana](https://github.com/bbviana) | Developer portal, services catalog and centralization of metrics from Grafana, Sentry and GCP. Furthermore, centralization of documentation and infra details like DNS, Network services, SSL and so on. | -| [TUI Group](https://www.tuigroup.com/) | [Simon Stamm](https://github.com/simonstamm), [Christian Rudolph](https://github.com/ChrisRu82) | Developer portal for all engineer to provide discoverability to all internal components, APIs, documentation and to scaffold templates with integrations to our internal tools extended by plugins from our community. | -| [Alliander](https://www.alliander.com/) | [@leon-vg](https://github.com/leon-vg), [@gieljl](https://github.com/gieljl), [@niekteg](https://github.com/niekteg) | Developer portal - software catalog, technical documentation, software templates, tech radar and exploration of used tools/services | -| [VIA](https://www.via.com.br) | [@vagnerguedes](https://github.com/vagnerguedes) | Centralized Developer Experience portal - Software catalog and documentation platform, software templates, techdocs, scaffolding, self-service infrastructure | -| [Surevine](https://www.surevine.com/) | [@DJDANNY123](https://github.com/djdanny123) | Developer portal for software catalog, discovery and a view of the technologies we are using across the organisation, we are looking to explore how we can enrich our entities in Backstage by integrating a software bill of materials. | -| [Bonial International GmbH](https://www.bonial.com/) | [@pjungermann](https://github.com/pjungermann) | Centralized developer portal with software catalog, tech docs, templates, and more. | -| [Beez Innovation Labs Pvt. Ltd](https://www.beezlabs.com/) | [Karthikeyan Venkatesan](https://github.com/karthikeyan23) | Developer portal with software catalog, scaffolding, tech docs, templates, and infra. | -| [Agorapulse](https://www.agorapulse.com/) | [@jvdrean](https://github.com/jvdrean) | Developer portal with software catalog, documentation, monitoring, runbooks, tech radar and more. | -| [Wistia](https://wistia.com/) | [@qrush](https://github.com/qrush), [@okize](https://github.com/okize) | Internal Developer Portal, service catalog, tech docs and more | -| [SIX](https://www.six-group.com/) | [@jbadeau](https://github.com/jbadeau), [@tomassatka](https://github.com/tomassatka) | Internal DevOps portal hosting our software and dataset catalog, as well as custom plugins for observability, service virtualization, deployments, incident managment and quality metrics. | -| [Raiffeisen Bank International](https://www.rbinternational.com/) | [Daniel Baumgartner](https://github.com/dabarbi) | From developers for developers: software catalog, techdocs and heavy use of scaffolder to drive reuse on engineering level forward. Part of inner source initiative. Multi national setup coming. | -| [Spread Group](https://www.spreadgroup.com/) | [Luna Stadler](https://github.com/heyLu), [Iván González](https://github.com/ivangonzalezacuna) | Internal Developer Portal, an overview of all running software, architecture documentation and more; replacing and unifying a variety of internal tools. | -| [RD Station](https://rdstation.com) | [Rogerio Angeliski](https://github.com/angeliski), [Paula Assis](https://github.com/paulassis), [Guilherme Eric](https://github.com/guilhermeeric), [Daniela Adamatti](https://github.com/daniadamatti), [Luana Negreiros](https://github.com/luananegreiros) | Developer portal, scaffolding, services catalog. We are looking to centralize automations and information for the whole engineering team . | -| [Resuelve Tu Deuda](https://resuelve.mx) | [Iván Álvarez](https://github.com/ivanhoe), [Jorge Medina](https://github.com/jorgearma1982) | Internal developer portal, service catalog, tech docs, api doc | -| [Pachama](https://pachama.com/) | [Aron Gates](https://github.com/agates4) | Internal Developer Portal, a catalog of all microservices, architecture documentation, and templates to generate developer resources. | -| [SEEK](https://www.seek.com.au) | [Jahred Hope](https://github.com/jahredhope) | Developer portal for developer tooling and technical documentation. | -| [Marks & Spencer](https://www.marksandspencer.com/) | [Kamal Cheriyath](https://github.com/kcheriyath) | Centralised discovery, adoption and devops automation hub for Engineering & Architecture. | -| [McKesson](https://www.mckesson.com/) | [Agnel Antony](https://github.com/aantony2) | Internal Developer Platform for developer gated CI/CD templates, technical documentation, cloud automation service catalog, etc. | -| [World Fuel Services](https://www.wfscorp.com/) | [Anirudh Kurapathi](https://github.com/anirudhkurapati), [Alex Kwon](https://github.com/alexkwon), [Lester Hernandez](https://github.com/lhernandez-wfscorp), [Avi Boru](https://github.com/aviboru), [Vardhan Annapureddy](https://github.com/harshaaws) | Internal Developer Portal, service catalog product, API's, Software Templates, tech docs and more. | -| [leboncoin](https://www.leboncoin.fr/) | [Andy Ladjadj](https://github.com/aladjadj) | Centralize our multiple UI in a single portal. Simplify onbording, new features and harmonize how people search information. Core features (catalog,api,docs,scafolder) are good to start the adoption. status: internal beta. | -| [Contentful](https://www.contentful.com) | [James Bourne](https://github.com/jamesmbourne) | Centralized documentation of service ownership, APIs, and documentation, and new service creation with a custom scaffolder - [full case study with Roadie](https://roadie.io/case-studies/maintaining-velocity-through-hypergrowth-contentful/). | -| [Back Market](https://www.backmarket.com) | [Sami Farhat](https://github.com/skfarhat) | Internal Developer Portal featuring catalog, tech-radar, ownership management, component creation (scaffolder) and centralized infrastructure management -- probably more to come. | -| [Avalia Systems](https://avalia.io) | [Olivier Liechti](https://github.com/wasadigi), [Fabio Velloso](https://github.com/fabiovelloso) | Innersource, software analytics, knowledge base for 360 software assessments, collaborative applications, hub for tracking and sharing IP assets. | -| [Albert Heijn](https://ah.technology) | [Joost Hofman](https://github.com/joosthofman), [Reindrich Geerman](https://github.com/reinst) | Single point of entry for all our engineers (Developer portal), Tech radar, catalog, templates (paved roads) and tech documentation. | -| [Wise, formerly TransferWise](https://wise.com) | [Andrew Beveridge](https://github.com/beveradb) | It's early days for us, we're trying to start small with catalog, tech docs and unified search. Future ambitious vision includes scaffolder for one-click component addition, building out integrations with CI/CD tooling, kubernetes clusters, monitoring/alerting tooling etc. and aiming for a frictionless "golden path" for engineers! 🚀 | -| [Happy Money](http://happymoney.com/) | [Akshit Lomash](mailto:alomash@happymoney.com) | We are moving from a monolith to microservices-based architecture. We are developing a developer portal based on Backstage to create a service catalog for our new services. All the services created are onboarded Backstage and engineering teams are using a cookie-cutter-based template from backstage to initiate a new service. | -| [Lightspeed](http://lightspeedhq.com/) | [Marcus Crane](mailto:marcus.crane@lightspeedhq.com) | We use it within our X-Series division (https://vendhq.com) to catalog ~100+ systems and ~350 components! | -| [Siemens](https://www.siemens.com/global/en.html) | [Nizar Chaouch](mailto:nizar.chaouch@siemens.com) | We are using Backstage as our Developer portal | -| [The Warehouse Group](https://www.thewarehouse.co.nz) | [Matt Law](mailto:matt.law@thewarehouse.co.nz) | Backstage enables us to bootstrap our middleware environment of new services for our Dev teams in a matter of seconds. CI, CD, testing, logging, deployments are all taken care of to get them up and running in less than 60 seconds. | -| [Tink](https://tink.com/) | [Sebastian Olsson](https://github.com/Sebelino), [Błażej Szum](https://github.com/blazejszumtink), [Anders Eurenius Runvald](https://github.com/anders-er-at-tink) | Internal developer portal which provides templates for creating new Java or Go microservices seamlessly. Also includes a tech radar and a visualization of our CD pipeline. | -| [Brandwatch](https://brandwatch.com) | [Stefan Buck](https://github.com/stefanbuck) | Our primary focus is on the service catalog. Backstage is replacing our homemade service catalog. The switch was quite simple due to the catalog processor API. | -| [Laybuy](https://www.laybuy.com) | [Chris Simmons](https://github.com/contrarianchris) | Backstage is the heart of Laybuy’s new centralised Development Platform, bringing disparate development tools and experiences into a single easy-to-use portal. It simplifies software and API discovery, project scaffolding, and technical documentation, enabling us to embrace golden path development and automate software standards. | -| [Sendinblue](https://engineering.sendinblue.com/) | [Tanguy Antoine](mailto:antoine.tanguy@sendinblue.com) | Helps us drive the change at scale. Puts light on services, resources, and dependencies. One tool that rules them all through plugins we created for that purpose. We are aiming to put Backstage at the center of every developer's work (Actionable items, Debugging, Monitoring, Provisioning, etc...) to improve their happiness | -| [SafetyCulture](https://safetyculture.com/) | [@R-cen](https://github.com/R-cen), [@lachlancooper](https://github.com/lachlancooper), [@hkf57](https://github.com/hkf57) | Internal developer portal to provide a centralized place for engineers to see an overview of their team's services and information related to the service from other systems. Initially focused on the software catalog, techdocs and search. | -| [Sana Life Science](https://sanalifescience.com) | [Joe Hillyard](mailto:joe@sanalifescience.com) | API Catalog, Tools Management & Control Hub | -| [Ndustrial](https://ndustrial.io) | [Jonathan Skubic](mailto:jonathan@ndustrial.io) | Software Project Catalog | -| [TUI Musement](https://www.musement.com/uk/) | [Simone Fumagalli](mailto:simone.fumagalli@musement.com) | We are importing our catalog into it to keep it under control. The next step is start using templates | -| [Kambi AB](https://www.kambi.com) | [Martin Norum](mailto:martin.norum@kambi.com) | We want to kick ass at speed, so we're currently building up a catalog of our existing software, and looking into how Backstage can support us in our journey towards autonomous product teams. Both to improve speed to market and operational awareness. | -| [ANZ](https://www.anz.com.au/personal/) | [Elliot Jackson](mailto:elliot.jackson@anz.com) | Catalog, tech docs and automation | -| [Genie Solutions](https://www.geniesolutionssoftware.com.au) | [Zainab Bagasrawala](mailto:zainabbagasrawala@geniesolutions.com.au) | Developer Portal to track our projects, documentation, observability tools and more | -| [MadeiraMadeira](https://www.madeiramadeira.com.br) | [Paulo Eduardo Peixoto](mailto:paulo.peixoto@madeiramadeira.com.br) | As a support tool for developers, following the principles of "Developer Experience". In order to make the developer's day to day more practical, efficient and, why not, happy. | -| [Sonatype](https://www.sonatype.com) | [Srikar Ananthula](mailto:sananthula@sonatype.com) | Centralize services used internally with many plugins | -| [CVS Health](https://www.cvshealth.com) | [Ari Ben-Elazar](mailto:abenelazar@gmail.com) | Cataloging and documenting our service offerings to offer our internal developers a better operational journey | -| [Yatra.com](https://www.yatra.com) | [Matiur Rahman Maitur](mailto:arifrahman4u@gmail.com) | Easy to find out Project details, ownership, dependent services, Documentation, it is very useful for developer. | -| [Yotpo](https://www.yotpo.com) | [Liran Yogev](mailto:lyogev@yotpo.com) | Services exploration, documentation and project generator | -| [Mainsail Industries](https://www.mainsailindustries.com) | [Brad Sollar](mailto:brad@mainsailindustries.com) | Internal tool management and docs | -| [Prisma](https://prismamp.com) | [Sebastian Gravina](mailto:sgravina@prismamp.com) | Is part of our IDP | -| [Syndetic](https://syndetic.io) | [John Feminella](mailto:robots+swag@syndetic.io) | We're working with multiple F100 clients for digital transformation and Backstage is a key part of our landing and acceleration strategy. | -| [Imagine Learning](https://www.imaginelearning.com/en/us) | [Jared Stehler](mailto:jared.stehler@imaginelearning.com) | Software catalog, product dependency visualization | -| [Alef Education](https://www.alefeducation.com) | [Belal Juma](mailto:belal.juma@alefeducation.com) | We use backstage as a Service Catalog and rely on the TechDocs feature | -| [Zego](https://www.zego.com) | [Sean Kenny](mailto:sean.kenny@zego.com) | Single pane of glass for organisational and operational information for all services across our systems. | -| [Absa Group Limited](https://www.absa.africa/absaafrica/) | [Chris Kieser](mailto:chris.kieser@absa.africa) | Developer portal for all development needs - security, AWS, k8s, build and deployment pipelines and more | -| [Nutrien Ag Solutions](https://www.nutrienagsolutions.com.au) | [Jan Quijano](mailto:jan.quijano@nutrien.com.au) | Software Project Catalog | -| [Lendingkart](https://www.lendingkart.com/) | [Dinesh Rajpoot](mailto:dinesh.rajpoot@lendingkart.com) | Service catalog, Software templates to enforce best practices and tech insights to track mandates & migrations. | -| [Meltwater](https://underthehood.meltwater.com) | [@spier](https://github.com/spier), [@remen](https://github.com/remen) | Improving developer experience by centralizing documentation and internal APIs. Goal: Foster InnerSource collaboration and speed up onboarding time in our 500+ people Product & Engineering org. | -| [Doctolib](https://doctolib.engineering/) | [@djiit](https://github.com/djiit) | Rails modularization effort awareness, tech organization discoverability. Improving the daily workflows and collaboration processes of our engineers. | -| [Twilio](https://www.twilio.com) | [Kyle Smith](https://github.com/knksmith57) | Developer portal, universal software catalog, and centralized taxonomy platform. | -| [OVHcloud](https://www.ovhcloud.com/fr/) | [Jean-Philippe Blary](https://github.com/blaryjp), [Arnaud Bauer](mailto:arnaud.bauer@ovhcloud.com), [Flavien Chantelot](https://github.com/Dorn-) | We're providing Backstage to our collaborators to ease their daily jobs, and let them extends it using plugins. | -| [Procter & Gamble](https://us.pg.com/) | [Binita Nayak](https://github.com/binitan), [Josh Rose](https://github.com/joshuarose), [RJ Winkler](https://github.com/rjwink) | P&G leverages Backstage to build internal developer portal to ensure developers' happiness. This developer portal shall act as single source of information needed by development teams to seamlessly create, find and maintain their software components/resources/documentation. | -| [SANS Institute](https://www.sans.org) | [Christopher Klewin](mailto:cklewin@sans.org) | Developer portal for centralized visibility, reporting, and tooling across multiple organizations. | -| [Okay](https://www.okayhq.com/) | [Tomas Barreto](mailto:tomas@okayhq.com) | Service catalog, developer portal, and technical documentation | -| [Kaluza](https://www.kaluza.com) | [James Condren](mailto:james.condron@kaluza.com) | To provide an automated golden path to developers, with a focus on discovery and documentation | -| [LinkedIn](https://linkedin.com) | [Joshua Lawrence](mailto:jlawrence@linkedin.com) | We are building a platform for internal web tools | -| [Forto](https://forto.com) | [Rodolfo Matos](mailto:rodolfo.matos@forto.com) | Still in a experimental phase/assessing the organisational fit. We will be using it mostly a developer portal -- pretty standard use case. | -| [BetterUp](https://betterup.com) | [Jordan Hochenbaum](mailto:jordan.hochenbaum@betterup.co) | We're starting to use Backstage as the central hub for service discovery, documentation, and develop experience. | -| [warung pintar](https://warungpintar.co.id/) | [Muhammad Rafly Andrianza](mailto:rafly.andrianza@warungpintar.co) | Initial Work Developer Portal with TechRadar, Service Catalogue, TechDocs, anything about platform & infrastructure resources. | -| [RD](https://rd.com.br/) | [Michael Silva](mailto:midsilva@rd.com.br) | We are building our developer portal. Software catalog, Tech Radar and Scaffolding are among the initial features. | -| [AEB](https://www.aeb.com/) | [David Fankhänel](mailto:dfl@aeb.com) | Central developer platform for creating new apps via templates, getting an overview via software catalog, etc | -| [SALTO Systems](https://saltosystems.com) | [Ian Cowley](mailto:i.cowley@saltosystems.com) | Currently using Backstage as an internal documentation portal. | -| [Lummo](https://lummo.com) | [Anjul Sahu](mailto:anjul@lummo.com) | We are building the internal developer portal using Backstage and bringing up all integrations and service information at one place. | -| [Frontside](https://frontside.com) | [Taras Mankovski](mailto:taras@frontside.com) | | -| [Stepstone](https://www.stepstone.com/en/) | [Neil Kennedy](mailto:neil.kennedy@stepstone.com) | StepStone is using Backstage to solve problems around ownership and visibility of our applications. We have thousands of repos, multiple legacy systems and a growing platform that is hard to maintain. Backstage is forming the centre of our push to embrace the chaos. | -| [idwall](https://idwall.co) | [Rodrigo Catão Araujo](mailto:rodrigo@idwall.co) | Developer Portal for internal engineers to access service catalog, documentation, observability, infrastructure and internal tooling. | -| [Jaguar Land Rover](https://www.jaguarlandrover.com) | [Josh Walker](mailto:jwalke18@jaguarlandrover.com) | Users can request a Gitlab user, which creates a commit with the Terraform code. | -| [Glovo](http://glovoapp.com/) | [Yaser Toutah](mailto:yaser.toutah@glovoapp.com) | Developer Portal to improve our Developer Experience, identify ownership and track metadata for our services and tools. It's our Service Catalog. In addition to that, we use it for Service Creation, and much more. | -| [Dixa](https://dixa.com) | [Jens Møller](https://github.com/jensamoller) | We are in early stages, but using it to get overview of our repositories and ownership of these. We want among many things to use it for compliance and easier access to key metrics for our repos. | -| [Notino](https://notino.com) | [Jan Remunda](mailto:jan.remunda@notino.com) | Backstage is our developer portal. We use it as service catalog and for technical documentation. | -| [Polarpoint](https://polarpoint.io/) | [Surj Bains](https://github.com/polarpoint-io) | We are using Backstage as our Developer portal as well as for hosting our DevOps portal for software catalog. | -| [Niche](https://niche.com) | [Zach Romitz](mailto:zach.romitz@niche.com) | We are using the Software Catalog, Software Templates, API documentation, and Techdocs to try and centralize service information. | -| [Mercedes-Benz.io](https://www.mercedes-benz.io/) | [Manuel Santos](https://github.com/manusant) | At Mercedes-Benz we use it as a developer portal with software catalog, TechDocs, Scaffolding and custom plugins. It provides an overview of our tech ecosystem to our product development teams. The portal also serves as a way to foster collaboration among the numerous companies of the Mercedes-Benz Group. | -| [Funding Circle](https://www.fundingcircle.com/) | [Ariel Pacciaroni](https://github.com/arielpacciaroni) | We are building the internal developer portal using Backstage project and centralizing all services information at one place. The portal helps us track down repositories ownership as well as direct access to key information on every component. | -| [Clarivate](https://www.clarivate.com) | [Gabriele Carteni](mailto:gabriele.carteni@clarivate.com) | We are building our Developer Portal using Backstage to have a better control over our software ecosystem, integrate SDLC tools and promote best practices | -| [Cho Tot](https://www.chotot.com) | [Chotot Team](mailto:sre@chotot.vn) | Internal developer portal, service catalog with CI/CD tools. | -| [William Hill](https://www.williamhillgroup.com/) | [Pat Mills](mailto:pat.mills@williamhill.com), [Nathan Flynn](mailto:nflynn@williamhill.co.uk), and [Nishkarsh Raj](mailto:nishkarsh.raj@williamhill.co.uk) | William Hill are leveraging Backstage to build our Engineering Portal. Our mission is to centralize the software catalog inventory to enable service discoverability, reduce the onboarding time for new Engineers, provide a single pane of glass to accelerate Developer Productivity and Save Engineers time. Our aspiration is to create an InnerSource community focussed on organization-wide patterns that are re-usable and can be self-served with the Scaffolder. | -| [Vodafone NewZealand Limited](https://vodafone.co.nz) | [Ankit Gupta](mailto:ankit.gupta@vodafone.nz), [DevOps COE](mailto:devopstooling@vodafone.nz) | Vodafone NZ are leveraging Backstage to build centralised and self service Engineering Portal. Our mission is to standardised Pipeline templates across the Engineering teams, One shop stop to create the pipelines and repository with a template approach which reduces creation part from days to minutes and no wait time for developers. A unified view for Azure DevOps pipeline, Azure Repo pull requests, Deployment status from Azure RedHat Openshift-ArgoCD and SonarQube Security and code quality scans report on a single pan to provide a streamlined view for all microservices across the app stack. | -| [Coamo](http://www.coamo.com.br) | [@holiiveira](https://github.com/holiiveira), [@gpxlnx](https://github.com/gpxlnx) | We're starting to use it as the main tool of a DevOps platform. Our goal is to provide software templates, centralize our software catalog enabling efficient service discovery, and make it easy to manage the entire software ecosystem in one place. - | +| Organization | Contact | Description of Use | +| --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [Spotify](https://www.spotify.com) | [@leemills83](https://github.com/leemills83) | Main interface towards all of Spotify's infrastructure and technical documentation. | +| [bol.com](https://www.bol.com) | [@sagacity](https://github.com/sagacity) | Initial work being done to unify platform tooling. | +| [DFDS](https://www.dfds.com) | [@carlsendk](https://github.com/carlsendk) | V2 self-service platform. | +| [Roadie](https://roadie.io) | [@dtuite](https://github.com/dtuite) | Hosted, managed Backstage with easy set-up | +| [Roku](https://www.roku.com) | [@timurista](https://github.com/timurista) | Initial work on Cloud engineering service platform. | +| [SDA SE](https://sda.se) | [@dschwank](https://github.com/dschwank), [@iammnils](https://github.com/iammnils) | Central place for developing and sharing services in our insurance ecosystem. | +| [H-E-B](https://www.heb.com) | [@german-j-rodriguez](https://github.com/german-j-rodriguez) | Initial work on Engineering Portal service platform. | +| [American Airlines](https://www.aa.com) | [@paulpach](https://github.com/paulpach) | Central place for developers to develop and maintain applications | +| [Kiwi.com](https://kiwi.com) | [@aexvir](https://github.com/aexvir) | Replacing the frontend of [The Zoo](https://github.com/kiwicom/the-zoo), their service registry. | +| [Voi](https://www.voiscooters.com/) | [@K-Phoen](https://github.com/K-Phoen) | Developer portal, main gateway to our infrastructure, documentation and internal tooling. | +| [Talkdesk](https://www.talkdesk.com) | [@jaime-talkdesk](https://github.com/jaime-talkdesk) | Initial work for Engineering Portal and Self Provisioning to R&D | +| [Wealthsimple](https://www.wealthsimple.com) | [@andrewthauer](https://github.com/andrewthauer) | Developer portal, service catalog, documentation and tooling | +| [Grab](https://www.grab.com) | [@althafh](https://github.com/althafh) | Initial work as a unified interface for all of Grab's internal tooling | +| [Telenor Sweden](https://www.telenor.se) | [@O5ten](https://github.com/O5ten) | Building a developer portal for scaffolding projects towards our unified build environment and microservice stacks | +| [Fiverr](https://www.fiverr.com) | [@nirga](https://github.com/nirga) | Unifying separate tools that developers are using today (i.e. monitoring, dead letter queues management, etc.) into a single platform. | +| [Zalando SE](https://www.zalando.de) | [@leviferreira](https://github.com/leviferreira) | Building V2 of the Internal Development Portal. | +| [LegalZoom](https://legalzoom.com) | [@backjo](https://github.com/backjo) | Developer portal - hub for all engineering projects and metadata. | +| [Expedia Group](https://www.expediagroup.com) | [@guillermomanzo](https://github.com/guillermomanzo), [Sheena Sharma](mailto:shesharma@expediagroup.com), [@ajbw](https://github.com/ajbw) | EG Common Developer Toolkit | +| [Paddle.com](https://paddle.com) | [Ioannis Georgoulas](https://github.com/geototti21) | Developer portal (Tech Docs, Service Catalog, Internal Tooling), we use vanilla Backstage FE and custom BE implementation in Go | +| [Acast.com](https://acast.com) | [Olle Lundberg](https://github.com/lndbrg) | Developer portal with tech docs, service catalog and a bunch of other internal tooling | +| [Lunar](https://lunar.app) | [Jacob Valdemar](https://github.com/JacobValdemar) | Internal developer portal for service overview and insights, API documentation, technical guides, onboarding guides and RFC's. | +| [Trendyol](https://trendyol.com) | [Gamze Senturk](https://github.com/gmzsenturk), [Mert Can Bilgic](https://github.com/mertcb) | The Developer Portal has been called `Pandora`. Provides an overview of Trendyol tech ecosystem. TechDocs, Catalog, Custom Plugins and Theme. | +| [Peloton](https://www.onepeloton.com/) | [Matt Waldron](https://github.com/daftgopher) | Creating our first developer portal and tech-docs. Exploring Service Catalog, Tech Insights and Cost Insights as well. | +| [TELUS](https://telus.com) | [Seb Barre](https://github.com/sbarre) | The Go-to place to find answers about development and delivery at TELUS. | +| [Brex](https://www.brex.com/) | [Vamsi Chitters](https://github.com/vamsikc) | A centralized UI to understand how a service fits in the whole Brex architecture and manage a team’s engineering dependencies. | +| [Oriflame](https://www.oriflame.com/) | [Oriflame](https://github.com/oriflame) | Internal developer portal for services, single page apps and packages overview, API documentation, technical guides, tech-radar and more. | +| [Booz Allen Hamilton](https://www.boozallen.com/) | [Jason Miller](https://github.com/JasonMiller-BAH) | Developer portal for a full-stack software development ecosystem that accelerates consistent and repeatable Modern Software Development practices for internal innovation and investments. | +| [Netflix](https://www.netflix.com/) | [bleathem](https://github.com/bleathem) | Our Backstage implementation will be the front door to a unified experience connecting our internal platform products across important workflows with integrated knowledge and support. | +| [b.well](https://www.icanbwell.com/) | [Jacob Rosales](https://github.com/jrosales) | Foundation for our engineering portal and cloud insights. | +| [PagerDuty](https://www.pagerduty.com/) | [Mark Shaw](https://github.com/markshawtoronto) | Developer portal, initially focused on software templates and tech-docs. | +| [MoonShiner](https://moonshiner.at) | [Fabian Hippmann](https://github.com/FabianHippmann) | Developer portal - helps us keep track of our customer projects, onboard new developers & improve our development process 🌕🚀🧑‍🚀 | +| [FundApps](https://www.fundapps.co/) | [Elliot Greenwood](https://github.com/egnwd) | Developer Portal - A place for us to keep track of our projects and documentation for all services and processes | +| [DAZN](https://dazn.com/) | [David Rubio Vidal](https://github.com/davidrv87), [Marco Crivellaro](https://github.com/crivetechie), [Alex Hollerith](mailto:alex.hollerith@dazn.com), [Kamil Wolny](https://github.com/mrwolny) | Ingesting all of DAZN's repos for the catalog, migrating our internal platform apps (pull request boards, release information, inner source marketplace etc) to Backstage plugins (where applicable). | +| [HelloFresh](https://www.hellofresh.de/) | [@iammuho](https://github.com/iammuho), [@ElenaForester](https://github.com/ElenaForester), [@diegomarangoni](https://github.com/diegomarangoni) | Our developer portal at HelloFresh - Spread across an organisation of 500+ engineers globally. | +| [FactSet](https://www.factset.com/) | [@kuangp](https://github.com/kuangp) | Developer portal to provide discoverability to all internal components, APIs, documentation, and scaffold templates with integrations to our internal infrastructure tools. | +| [Workrise](https://www.workrise.com/) | [Michael Rode](https://github.com/michaelrode) | Developer portal, main gateway to our infrastructure, documentation and internal tooling. | +| [RedVentures](https://www.redventures.com/) | [Chris Diaz](https://github.com/codingdiaz) | Developer portal that brings everything an engineer needs to provide value into a single pane of glass. | +| [MavTek](https://www.mavtek.com/) | [@fgascon](https://github.com/fgascon) | Developer portal focused on standardizing practices, centralizing documentation and streamlining developer practices. | +| [QuintoAndar](https://www.quintoandar.com.br/) | [@quintoandar](https://github.com/quintoandar) | Developer portal, services catalog and centralization of service metrics. | +| [empathy.co](https://empathy.co/) | [@guillermotti](https://github.com/guillermotti) | Developer portal for tech docs, service catalog, plugin discovery and much more. | +| [creditas.com](https://creditas.com/) | [@aureliosaraiva](https://github.com/aureliosaraiva) [@Creditas](https://github.com/creditas) | Centralization of all services, standards, documentation, etc. We started the deployment process. | +| [Prisjakt](https://www.prisjakt.nu) / [PriceSpy](https://pricespy.co.uk) | [@kennylindahl](https://github.com/kennylindahl) | Internal developer portal - Documentation, scaffolding, software catalog, TechRadar, Gitlab org data integration | +| [Powerspike](https://powerspike.tv/) | [@trelore](https://github.com/trelore) | Developer portal for documentation of core libraries and repositories. | +| [2U](https://2u.com) | [@danielleEriksen](https://github.com/danielleEriksen), [@sbhatia](https://github.com/sbhatia) | Development team home-base, promoting service discoverability, resource dependencies, and tech radar | +| [Taxfix](https://taxfix.de/) | [Sami Ur Rehman](https://github.com/samiurrehman92) | Developer's portal with software catalog at it's core. Hosts API Specs, Tech Docs, Tech Radar and some custom plugins. | +| [Busuu](https://busuu.com/) | [Adam Tester](https://github.com/adamtester) | Developer portal with service catalog, API docs, Event docs, service templating, and cost insights. | +| [Loadsmart](https://loadsmart.com/) | [Loadsmart](https://github.com/loadsmart) | Improve services visibility and operations for service owners and developers. | +| [Monzo](https://monzo.com/) | [@WillSewell](https://github.com/WillSewell), [@joechrisellis](https://github.com/joechrisellis) | Developer portal showing metadata and docs for over 2000 microservices. We have built a number of plugins such as a UI for our system to measure [software excellence](https://monzo.com/blog/2021/09/15/how-we-measure-software-excellence), and a UI to show deployment and config change events. | +| [Vaimo](https://www.vaimo.com) | [@vaimo-magnus](https://github.com/vaimo-magnus) | Developer Portal for our developers at Vaimo, currently docs and self-service towards our internal PaaS based on k8s. Plans to extend the catalog into Projects, Environments etc | +| [Wayfair](https://www.wayfair.com) | [@fransan](https://github.com/fransan), [@errskipower](https://github.com/errskipower), [@hrrs](https://github.com/hrrs) | Developer portal for service catalog, technical documentation, and APIs. | +| [CircleHD](https://www.circlehd.com) | [@circlehddev](https://github.com/circlehddev) | Developer Portal for internal dev team across the globe | +| [CastDesk](https://castdesk.com) | [@circlehddev](https://github.com/circlehddev) | Developer Portal for internal dev team across the globe | +| [Santagostino](https://santagostino.it) | [@santagostino](https://github.com/santagostino) | Developer portal, gateway to our infrastructure, documentation, service catalog and internal tooling. | +| [Peak](https://peak.ai) | [Luke Beamish](https://github.com/lukebeamish-peak) | Developer portal for all internal engineers to access documentation and tooling. | +| [Gelato](https://gelato.com/) | [Dmitry Makarenko](https://github.com/dmitry-makarenko-gelato) | Developer portal: documentation, service templates, org structure, service catalog, plugins for integration with internal and third-party systems🚀. | +| [GoCardless](https://gocardless.com/) | [James Turley](https://github.com/tragiclifestories) | Developer portal: documentation, service templates, org structure, service catalog, plugins for integration with internal systems. | +| [Box](https://www.box.com) | [@kielosz](https://github.com/kielosz), [@jluk-box](https://github.com/jluk-box), [@ptychu](https://github.com/ptychu), [@alexrybch](https://github.com/alexrybch), [@szubster](https://github.com/szubster) | Developer portal for service catalog, integration with internal systems, new service onboarding. | +| [Bazaarvoice](https://www.bazaarvoice.com) | [@niallmccullagh](https://github.com/niallmccullagh) | Developer portal for service catalog and scaffolds, publishing Github docs and API documentation, visualising our internal tech radar and our product engineering org structure. | +| [Krateo PlatformOps](https://www.krateo.io) | [@projectkerberus](https://github.com/projectkerberus) | A multi-cloud control plane to create, manage and deploy any kind of resource easily and centrally via a Developer Portal that centralizes via a self-service catalog the templating and ownership of services, the available documentation, the overview of the components that compose an entire domain and all the data of the service lifecycle. | +| [Adevinta](https://www.adevinta.com) | [Ray Sinnema](https://github.com/RemonSinnema) | Showcase shared services to our internal customers. | +| [Splunk](https://www.splunk.com) | [@tonytamsf](https://github.com/tonytamsf) | Developer portal as a centralized place to find people, services, documentation, escalation policies and give bravos. This portal is also being used as a centralized search engine for engineering specific documentation. | +| [SoundCloud](https://www.soundcloud.com) | [Julio Zynger](https://github.com/julioz) | Developer portal as a [humane registry](https://martinfowler.com/bliki/HumaneRegistry.html) for the organization: catalog of people, services, documentation, feature toggles, escalation policies, etc. | +| [Volvofinans Bank](https://www.volvofinans.se) | [Johan Hammar](https://github.com/johanhammar) | Developer portal enabling engineers to manage and explore software and documentation. | +| [Palo Alto Networks](https://www.paloaltonetworks.com) | [Jeremy Guarini](https://github.com/jeremyguarini), [Brian Lomeland](https://github.com/bbbmmmlll), [Palo Alto Networks](https://github.com/PaloAltoNetworks) | Developer portal, service catalog, documentation and tooling | +| [Signal Iduna Group](https://www.signal-iduna.de/) | [Jonas Thomsen](https://github.com/JoThomsen) | Developer Portal, documentation, monitoring, service catalog for our insurance ecosystem | +| [Tradeshift](https://www.tradeshift.com/) | [Soren Mathiasen](https://github.com/sorenmat) | Developer Portal: documentation, monitoring, service templates, service catalog for our micro services | +| [Unity](https://unity.com) | [Ted Cordery](https://github.com/TeddyBallGame) | A centralized service catalog with documentation for our service engineers. | +| [PicPay](https://www.picpay.com) | [Luis Baroni](https://github.com/lcsbaroni), [Renata Poluceno](https://github.com/renatapoluceno), [PicPay](https://github.com/picpay) | Developer portal for building services through templates, service catalog with ownership of services, documentation and metrics providing autonomy and visibility for all. | +| [Epic Games](https://www.epicgames.com) | [Brian Jung](https://github.com/brian-at-epic), [Jeff Goldian](https://github.com/jeffgoldian-Epic) | Developer Portal: Service Catalog, Documentation, Software Templates and more making our internal teams' lives easier! | +| [Globo](https://globo.com) | [Carlos Gusmão](https://github.com/caeugusmao), [Guilherme Vierno](https://github.com/vierno), [Denis Aoki](https://github.com/dnsaoki2), [Maycon Dionisio](https://github.com/MayconDionisio), | Reduce the friction of accessing the information engineers need about Globo's digital services through a coherent and centralized experience. | +| [QBE](https://www.qbe.com/) | [Daniel Steel](https://github.com/danielsteelqbe), [Pete Jespers](https://github.com/petejespersqbe) | Developer portal allowing our global teams to explore and create applications, documentation and cloud infrastructure easily and quickly 🚀 | +| [GoTo](https://www.goto.com) | [Lorenzo Orsatti](https://github.com/lorsatti) | Improve onboarding experience of new developers. Discover faster and painlessly developer documentation, API definitions and team information. Provide useful dev metrics in a central place. Provide easy-to-use templates for new services. | +| [Telstra](https://www.telstra.com.au) | [@kiranpatel11](https://github.com/kiranpatel11), [JasonC](https://github.com/JasonC17) | Primary usage: software catalog and templates
Emerging usage : TechDocs, Explore Ecosystem, TechRadar, etc | +| [Mosaico](https://www.mosaico.com.br/) | [Wédney Yuri](https://github.com/wedneyyuri),[@tino.milton](https://github.com/miltonjacomini) | A centralized service catalog of our documentation for our service engineers. | +| [Mox Bank](https://www.mox.com/) | [Nick Laqua](https://github.com/nick-laqua-dragon) | "Single pane of glass" developer portal for providing a best-in-class developer experience to our product teams and making Mox the best tech environment in Hongkong 🥰🚀 | +| [Keyloop](https://www.keyloop.com/) | [Andre Wanlin](https://github.com/awanlin) | Future-motive Developer Portal to help our teams create technology to make everything about buying and owning a car better. 🚗 | +| [Simply Business](https://sbtech.simplybusiness.co.uk/) | [@addersuk](https://github.com/addersuk), [@LightningStairs](https://github.com/LightningStairs), [@punitcse](https://github.com/punitcse), [@moltenice](https://github.com/moltenice) | Central developer portal to access everything a developer needs such as docs, internal service catalog, and the ability to quickly create a new service from a template. Internally developed Backstage plugins allow us to customise the experience to how we work. | +| [Overwolf](https://www.overwolf.com) | [@tomwolfgang](https://github.com/tomwolfgang) | Dev portal - software catalog, tech-docs, scaffolding | +| [Hotmart](https://www.hotmart.com) | [@fabioviana-hotmart](https://github.com/fabioviana-hotmart) | The main Developers Portal to centralize docs, applications and technical metrics. | +| [EF Education First](https://www.ef.com) | [Daan Boerlage](https://github.com/runebaas), [Rafał Nowosielski](https://github.com/rnowosielski) | Our developer portal - primarily used for cataloging and scaffolding with the ambition to expand with more feature adoptions over time | +| [Power Home Remodeling](https://www.techatpower.com) | [Ben Langfeld](https://github.com/benlangfeld) | Developer portal to our internal services, build on open-source software (including Kubernetes) in our own datacenters. Our Portal allows our team members to navigate inherant complexity and standardise. | +| [Livspace](https://www.livspace.com) | [Praveen Kumar](https://github.com/praveen-livspace) | Developer portal, service catalog, tech docs, API docs and plugins | +| [Just Eat Takeaway](https://www.justeattakeaway.com) | [Kim Wilson](https://github.com/kwilson541) | Our developer portal which centralises applications, reduces cognitive load and provides teams insights. | +| [Hopin](https://hopin.com) | [Vladimir Glafirov](https://github.com/vglafirov), [Chloe Lee](https://github.com/msfuko) | Developer portal to streamline the development practices. Integrated with service catalog, software templates, application monitoring, tech docs and plugins. | +| [HBO Max](https://hbomax.com) | [@mdb](https://github.com/mdb), [@nesta219](https://github.com/nesta219), [@nmische](https://github.com/nmische), [@hbomark](https://github.com/hbomark) | Developer portal hosting service catalog and API documentation, as well as cloud infrastructure details, operational visibility tools, and a custom plugin for browsing notable platform change events, such as deployments and configuration updates. | +| [RCHLO](https://www.riachuelo.com.br) & [MIDWAY](https://www.midway.com.br) | [@marcosborges](https://github.com/marcosborges), [@defaultbr](https://github.com/defaultbr) | Self-Service Platform | +| [HP Inc](https://www.hp.com) | [Damon Kaswell](https://github.com/dekoding) | DevEx engagement hub (dev portal: docs, standards, Q&A) and extensive assets catalog (APIs, services, code, data, etc.) for the pan-HP internal developer community. | +| [VMware](https://www.vmware.com) | [@mpriamo](https://github.com/mpriamo), [@krisapplegate](https://github.com/krisapplegate) | Part of [Tanzu Application Platform](https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/index.html) offering; internal developer portal | +| [Ualá](https://www.uala.com.ar/) | [Santiago Bernal](https://github.com/sabernal) | Initial work being done to centralize documentation for all our microservices and APIs, as well as scaffolding new services and tracking code quality | +| [IKEA IT AB](https://www.ingka.com) | [@bjornramberg](https://github.com/bjornramberg), [@supriyachitale](https://github.com/supriyachitale) | Supporting engineers at scale with self serve access and connecting the dots of our engineering platform and services, enabling product teams to move faster and go further, and unleashing innovation, reuse and co-creation across the organisation. | +| [Invitae](https://www.invitae.com/en) | [@ryan-hanchett](https://github.com/ryan-hanchett), [@gmandler42](https://github.com/gmandler42) | Centralized Developer Experience portal, putting all of our tooling behind a single pane of glass and creating a living service catalog. | +| [Fortum](https://www.fortum.com/) | [@brunoamaroalmeida](https://github.com/brunoamaroalmeida), [@dhaval-vithalani](https://github.com/dhaval-vithalani), [@sunilkumarmohanty](https://github.com/sunilkumarmohanty) | A central portal containing information about our applications, services, processes and other software assets to be used by Fortum software engineering community. | +| [Procore](https://www.procore.com/jobs/engineering) | [@shayon](https://github.com/Shayon), [@jamesdabbs-procore](https://github.com/jamesdabbs-procore) | Developer portal - centralized software catalog and templates to enable self serve and reduce cognitive load. | +| [Bradesco](https://banco.bradesco/html/classic/sobre/index.shtm) | [@danilosoarescardoso](https://github.com/danilosoarescardoso) | Centralized developer portal with software catalog, software templates, techdocs and some plugins from community and by our own. | +| [SeatGeek](https://seatgeek.com) | [@zhammer](https://github.com/zhammer) | Software catalog and documentation platform | +| [Grupo Boticário](https://www.grupoboticario.com.br/) | [@chicoribas](https://github.com/chicoribas), [@fndiaz](https://github.com/fndiaz), [@digogid](https://github.com/digogid), [@manumbs](https://github.com/manumbs), [@haooliveira84](https://github.com/haooliveira84), [@Rhullyam](https://github.com/Rhullyam) | Centralized developer portal with catalog, documentation, and software templates to build a ready to go application, including pipelines (CI/CD) and cloud services provisioning | +| [Snyk](https://snyk.io/) | [@robcresswell](https://github.com/robcresswell) | Developer portal for software discovery, API documentation and templating | +| [Stilingue](https://www.stilingue.com.br/) | [@stilingue-inteligencia-artificial](https://github.com/Stilingue-IA), [@bbviana](https://github.com/bbviana) | Developer portal, services catalog and centralization of metrics from Grafana, Sentry and GCP. Furthermore, centralization of documentation and infra details like DNS, Network services, SSL and so on. | +| [TUI Group](https://www.tuigroup.com/) | [Simon Stamm](https://github.com/simonstamm), [Christian Rudolph](https://github.com/ChrisRu82) | Developer portal for all engineer to provide discoverability to all internal components, APIs, documentation and to scaffold templates with integrations to our internal tools extended by plugins from our community. | +| [Alliander](https://www.alliander.com/) | [@leon-vg](https://github.com/leon-vg), [@gieljl](https://github.com/gieljl), [@niekteg](https://github.com/niekteg) | Developer portal - software catalog, technical documentation, software templates, tech radar and exploration of used tools/services | +| [VIA](https://www.via.com.br) | [@vagnerguedes](https://github.com/vagnerguedes) | Centralized Developer Experience portal - Software catalog and documentation platform, software templates, techdocs, scaffolding, self-service infrastructure | +| [Surevine](https://www.surevine.com/) | [@DJDANNY123](https://github.com/djdanny123) | Developer portal for software catalog, discovery and a view of the technologies we are using across the organisation, we are looking to explore how we can enrich our entities in Backstage by integrating a software bill of materials. | +| [Bonial International GmbH](https://www.bonial.com/) | [@pjungermann](https://github.com/pjungermann) | Centralized developer portal with software catalog, tech docs, templates, and more. | +| [Beez Innovation Labs Pvt. Ltd](https://www.beezlabs.com/) | [Karthikeyan Venkatesan](https://github.com/karthikeyan23) | Developer portal with software catalog, scaffolding, tech docs, templates, and infra. | +| [Agorapulse](https://www.agorapulse.com/) | [@jvdrean](https://github.com/jvdrean) | Developer portal with software catalog, documentation, monitoring, runbooks, tech radar and more. | +| [Wistia](https://wistia.com/) | [@qrush](https://github.com/qrush), [@okize](https://github.com/okize) | Internal Developer Portal, service catalog, tech docs and more | +| [SIX](https://www.six-group.com/) | [@jbadeau](https://github.com/jbadeau), [@tomassatka](https://github.com/tomassatka) | Internal DevOps portal hosting our software and dataset catalog, as well as custom plugins for observability, service virtualization, deployments, incident managment and quality metrics. | +| [Raiffeisen Bank International](https://www.rbinternational.com/) | [Daniel Baumgartner](https://github.com/dabarbi) | From developers for developers: software catalog, techdocs and heavy use of scaffolder to drive reuse on engineering level forward. Part of inner source initiative. Multi national setup coming. | +| [Spread Group](https://www.spreadgroup.com/) | [Luna Stadler](https://github.com/heyLu), [Iván González](https://github.com/ivangonzalezacuna) | Internal Developer Portal, an overview of all running software, architecture documentation and more; replacing and unifying a variety of internal tools. | +| [RD Station](https://rdstation.com) | [Rogerio Angeliski](https://github.com/angeliski), [Paula Assis](https://github.com/paulassis), [Guilherme Eric](https://github.com/guilhermeeric), [Daniela Adamatti](https://github.com/daniadamatti), [Luana Negreiros](https://github.com/luananegreiros) | Developer portal, scaffolding, services catalog. We are looking to centralize automations and information for the whole engineering team . | +| [Resuelve Tu Deuda](https://resuelve.mx) | [Iván Álvarez](https://github.com/ivanhoe), [Jorge Medina](https://github.com/jorgearma1982) | Internal developer portal, service catalog, tech docs, api doc | +| [Pachama](https://pachama.com/) | [Aron Gates](https://github.com/agates4) | Internal Developer Portal, a catalog of all microservices, architecture documentation, and templates to generate developer resources. | +| [SEEK](https://www.seek.com.au) | [Jahred Hope](https://github.com/jahredhope) | Developer portal for developer tooling and technical documentation. | +| [Marks & Spencer](https://www.marksandspencer.com/) | [Kamal Cheriyath](https://github.com/kcheriyath) | Centralised discovery, adoption and devops automation hub for Engineering & Architecture. | +| [McKesson](https://www.mckesson.com/) | [Agnel Antony](https://github.com/aantony2) | Internal Developer Platform for developer gated CI/CD templates, technical documentation, cloud automation service catalog, etc. | +| [World Fuel Services](https://www.wfscorp.com/) | [Anirudh Kurapathi](https://github.com/anirudhkurapati), [Alex Kwon](https://github.com/alexkwon), [Lester Hernandez](https://github.com/lhernandez-wfscorp), [Avi Boru](https://github.com/aviboru), [Vardhan Annapureddy](https://github.com/harshaaws) | Internal Developer Portal, service catalog product, API's, Software Templates, tech docs and more. | +| [leboncoin](https://www.leboncoin.fr/) | [Andy Ladjadj](https://github.com/aladjadj) | Centralize our multiple UI in a single portal. Simplify onbording, new features and harmonize how people search information. Core features (catalog,api,docs,scafolder) are good to start the adoption. status: internal beta. | +| [Contentful](https://www.contentful.com) | [James Bourne](https://github.com/jamesmbourne) | Centralized documentation of service ownership, APIs, and documentation, and new service creation with a custom scaffolder - [full case study with Roadie](https://roadie.io/case-studies/maintaining-velocity-through-hypergrowth-contentful/). | +| [Back Market](https://www.backmarket.com) | [Sami Farhat](https://github.com/skfarhat) | Internal Developer Portal featuring catalog, tech-radar, ownership management, component creation (scaffolder) and centralized infrastructure management -- probably more to come. | +| [Avalia Systems](https://avalia.io) | [Olivier Liechti](https://github.com/wasadigi), [Fabio Velloso](https://github.com/fabiovelloso) | Innersource, software analytics, knowledge base for 360 software assessments, collaborative applications, hub for tracking and sharing IP assets. | +| [Albert Heijn](https://ah.technology) | [Joost Hofman](https://github.com/joosthofman), [Reindrich Geerman](https://github.com/reinst) | Single point of entry for all our engineers (Developer portal), Tech radar, catalog, templates (paved roads) and tech documentation. | +| [Wise, formerly TransferWise](https://wise.com) | [Andrew Beveridge](https://github.com/beveradb) | It's early days for us, we're trying to start small with catalog, tech docs and unified search. Future ambitious vision includes scaffolder for one-click component addition, building out integrations with CI/CD tooling, kubernetes clusters, monitoring/alerting tooling etc. and aiming for a frictionless "golden path" for engineers! 🚀 | +| [Happy Money](http://happymoney.com/) | [Akshit Lomash](mailto:alomash@happymoney.com) | We are moving from a monolith to microservices-based architecture. We are developing a developer portal based on Backstage to create a service catalog for our new services. All the services created are onboarded Backstage and engineering teams are using a cookie-cutter-based template from backstage to initiate a new service. | +| [Lightspeed](http://lightspeedhq.com/) | [Marcus Crane](mailto:marcus.crane@lightspeedhq.com) | We use it within our X-Series division (https://vendhq.com) to catalog ~100+ systems and ~350 components! | +| [Siemens](https://www.siemens.com/global/en.html) | [Nizar Chaouch](mailto:nizar.chaouch@siemens.com) | We are using Backstage as our Developer portal | +| [The Warehouse Group](https://www.thewarehouse.co.nz) | [Matt Law](mailto:matt.law@thewarehouse.co.nz) | Backstage enables us to bootstrap our middleware environment of new services for our Dev teams in a matter of seconds. CI, CD, testing, logging, deployments are all taken care of to get them up and running in less than 60 seconds. | +| [Tink](https://tink.com/) | [Sebastian Olsson](https://github.com/Sebelino), [Błażej Szum](https://github.com/blazejszumtink), [Anders Eurenius Runvald](https://github.com/anders-er-at-tink) | Internal developer portal which provides templates for creating new Java or Go microservices seamlessly. Also includes a tech radar and a visualization of our CD pipeline. | +| [Brandwatch](https://brandwatch.com) | [Stefan Buck](https://github.com/stefanbuck) | Our primary focus is on the service catalog. Backstage is replacing our homemade service catalog. The switch was quite simple due to the catalog processor API. | +| [Laybuy](https://www.laybuy.com) | [Chris Simmons](https://github.com/contrarianchris) | Backstage is the heart of Laybuy’s new centralised Development Platform, bringing disparate development tools and experiences into a single easy-to-use portal. It simplifies software and API discovery, project scaffolding, and technical documentation, enabling us to embrace golden path development and automate software standards. | +| [Sendinblue](https://engineering.sendinblue.com/) | [Tanguy Antoine](mailto:antoine.tanguy@sendinblue.com) | Helps us drive the change at scale. Puts light on services, resources, and dependencies. One tool that rules them all through plugins we created for that purpose. We are aiming to put Backstage at the center of every developer's work (Actionable items, Debugging, Monitoring, Provisioning, etc...) to improve their happiness | +| [SafetyCulture](https://safetyculture.com/) | [@R-cen](https://github.com/R-cen), [@lachlancooper](https://github.com/lachlancooper), [@hkf57](https://github.com/hkf57) | Internal developer portal to provide a centralized place for engineers to see an overview of their team's services and information related to the service from other systems. Initially focused on the software catalog, techdocs and search. | +| [Sana Life Science](https://sanalifescience.com) | [Joe Hillyard](mailto:joe@sanalifescience.com) | API Catalog, Tools Management & Control Hub | +| [Ndustrial](https://ndustrial.io) | [Jonathan Skubic](mailto:jonathan@ndustrial.io) | Software Project Catalog | +| [TUI Musement](https://www.musement.com/uk/) | [Simone Fumagalli](mailto:simone.fumagalli@musement.com) | We are importing our catalog into it to keep it under control. The next step is start using templates | +| [Kambi AB](https://www.kambi.com) | [Martin Norum](mailto:martin.norum@kambi.com) | We want to kick ass at speed, so we're currently building up a catalog of our existing software, and looking into how Backstage can support us in our journey towards autonomous product teams. Both to improve speed to market and operational awareness. | +| [ANZ](https://www.anz.com.au/personal/) | [Elliot Jackson](mailto:elliot.jackson@anz.com) | Catalog, tech docs and automation | +| [Genie Solutions](https://www.geniesolutionssoftware.com.au) | [Zainab Bagasrawala](mailto:zainabbagasrawala@geniesolutions.com.au) | Developer Portal to track our projects, documentation, observability tools and more | +| [MadeiraMadeira](https://www.madeiramadeira.com.br) | [Paulo Eduardo Peixoto](mailto:paulo.peixoto@madeiramadeira.com.br) | As a support tool for developers, following the principles of "Developer Experience". In order to make the developer's day to day more practical, efficient and, why not, happy. | +| [Sonatype](https://www.sonatype.com) | [Srikar Ananthula](mailto:sananthula@sonatype.com) | Centralize services used internally with many plugins | +| [CVS Health](https://www.cvshealth.com) | [Ari Ben-Elazar](mailto:abenelazar@gmail.com) | Cataloging and documenting our service offerings to offer our internal developers a better operational journey | +| [Yatra.com](https://www.yatra.com) | [Matiur Rahman Maitur](mailto:arifrahman4u@gmail.com) | Easy to find out Project details, ownership, dependent services, Documentation, it is very useful for developer. | +| [Yotpo](https://www.yotpo.com) | [Liran Yogev](mailto:lyogev@yotpo.com) | Services exploration, documentation and project generator | +| [Mainsail Industries](https://www.mainsailindustries.com) | [Brad Sollar](mailto:brad@mainsailindustries.com) | Internal tool management and docs | +| [Prisma](https://prismamp.com) | [Sebastian Gravina](mailto:sgravina@prismamp.com) | Is part of our IDP | +| [Syndetic](https://syndetic.io) | [John Feminella](mailto:robots+swag@syndetic.io) | We're working with multiple F100 clients for digital transformation and Backstage is a key part of our landing and acceleration strategy. | +| [Imagine Learning](https://www.imaginelearning.com/en/us) | [Jared Stehler](mailto:jared.stehler@imaginelearning.com) | Software catalog, product dependency visualization | +| [Alef Education](https://www.alefeducation.com) | [Belal Juma](mailto:belal.juma@alefeducation.com) | We use backstage as a Service Catalog and rely on the TechDocs feature | +| [Zego](https://www.zego.com) | [Sean Kenny](mailto:sean.kenny@zego.com) | Single pane of glass for organisational and operational information for all services across our systems. | +| [Absa Group Limited](https://www.absa.africa/absaafrica/) | [Chris Kieser](mailto:chris.kieser@absa.africa) | Developer portal for all development needs - security, AWS, k8s, build and deployment pipelines and more | +| [Nutrien Ag Solutions](https://www.nutrienagsolutions.com.au) | [Jan Quijano](mailto:jan.quijano@nutrien.com.au) | Software Project Catalog | +| [Lendingkart](https://www.lendingkart.com/) | [Dinesh Rajpoot](mailto:dinesh.rajpoot@lendingkart.com) | Service catalog, Software templates to enforce best practices and tech insights to track mandates & migrations. | +| [Meltwater](https://underthehood.meltwater.com) | [@spier](https://github.com/spier), [@remen](https://github.com/remen) | Improving developer experience by centralizing documentation and internal APIs. Goal: Foster InnerSource collaboration and speed up onboarding time in our 500+ people Product & Engineering org. | +| [Doctolib](https://doctolib.engineering/) | [@djiit](https://github.com/djiit) | Rails modularization effort awareness, tech organization discoverability. Improving the daily workflows and collaboration processes of our engineers. | +| [Twilio](https://www.twilio.com) | [Kyle Smith](https://github.com/knksmith57) | Developer portal, universal software catalog, and centralized taxonomy platform. | +| [OVHcloud](https://www.ovhcloud.com/fr/) | [Jean-Philippe Blary](https://github.com/blaryjp), [Arnaud Bauer](mailto:arnaud.bauer@ovhcloud.com), [Flavien Chantelot](https://github.com/Dorn-) | We're providing Backstage to our collaborators to ease their daily jobs, and let them extends it using plugins. | +| [Procter & Gamble](https://us.pg.com/) | [Binita Nayak](https://github.com/binitan), [Josh Rose](https://github.com/joshuarose), [RJ Winkler](https://github.com/rjwink) | P&G leverages Backstage to build internal developer portal to ensure developers' happiness. This developer portal shall act as single source of information needed by development teams to seamlessly create, find and maintain their software components/resources/documentation. | +| [SANS Institute](https://www.sans.org) | [Christopher Klewin](mailto:cklewin@sans.org) | Developer portal for centralized visibility, reporting, and tooling across multiple organizations. | +| [Okay](https://www.okayhq.com/) | [Tomas Barreto](mailto:tomas@okayhq.com) | Service catalog, developer portal, and technical documentation | +| [Kaluza](https://www.kaluza.com) | [James Condren](mailto:james.condron@kaluza.com) | To provide an automated golden path to developers, with a focus on discovery and documentation | +| [LinkedIn](https://linkedin.com) | [Joshua Lawrence](mailto:jlawrence@linkedin.com) | We are building a platform for internal web tools | +| [Forto](https://forto.com) | [Rodolfo Matos](mailto:rodolfo.matos@forto.com) | Still in a experimental phase/assessing the organisational fit. We will be using it mostly a developer portal -- pretty standard use case. | +| [BetterUp](https://betterup.com) | [Jordan Hochenbaum](mailto:jordan.hochenbaum@betterup.co) | We're starting to use Backstage as the central hub for service discovery, documentation, and develop experience. | +| [warung pintar](https://warungpintar.co.id/) | [Muhammad Rafly Andrianza](mailto:rafly.andrianza@warungpintar.co) | Initial Work Developer Portal with TechRadar, Service Catalogue, TechDocs, anything about platform & infrastructure resources. | +| [RD](https://rd.com.br/) | [Michael Silva](mailto:midsilva@rd.com.br) | We are building our developer portal. Software catalog, Tech Radar and Scaffolding are among the initial features. | +| [AEB](https://www.aeb.com/) | [David Fankhänel](mailto:dfl@aeb.com) | Central developer platform for creating new apps via templates, getting an overview via software catalog, etc | +| [SALTO Systems](https://saltosystems.com) | [Ian Cowley](mailto:i.cowley@saltosystems.com) | Currently using Backstage as an internal documentation portal. | +| [Lummo](https://lummo.com) | [Anjul Sahu](mailto:anjul@lummo.com) | We are building the internal developer portal using Backstage and bringing up all integrations and service information at one place. | +| [Frontside](https://frontside.com) | [Taras Mankovski](mailto:taras@frontside.com) | | +| [Stepstone](https://www.stepstone.com/en/) | [Neil Kennedy](mailto:neil.kennedy@stepstone.com) | StepStone is using Backstage to solve problems around ownership and visibility of our applications. We have thousands of repos, multiple legacy systems and a growing platform that is hard to maintain. Backstage is forming the centre of our push to embrace the chaos. | +| [idwall](https://idwall.co) | [Rodrigo Catão Araujo](mailto:rodrigo@idwall.co) | Developer Portal for internal engineers to access service catalog, documentation, observability, infrastructure and internal tooling. | +| [Jaguar Land Rover](https://www.jaguarlandrover.com) | [Josh Walker](mailto:jwalke18@jaguarlandrover.com) | Users can request a Gitlab user, which creates a commit with the Terraform code. | +| [Glovo](http://glovoapp.com/) | [Yaser Toutah](mailto:yaser.toutah@glovoapp.com) | Developer Portal to improve our Developer Experience, identify ownership and track metadata for our services and tools. It's our Service Catalog. In addition to that, we use it for Service Creation, and much more. | +| [Dixa](https://dixa.com) | [Jens Møller](https://github.com/jensamoller) | We are in early stages, but using it to get overview of our repositories and ownership of these. We want among many things to use it for compliance and easier access to key metrics for our repos. | +| [Notino](https://notino.com) | [Jan Remunda](mailto:jan.remunda@notino.com) | Backstage is our developer portal. We use it as service catalog and for technical documentation. | +| [Polarpoint](https://polarpoint.io/) | [Surj Bains](https://github.com/polarpoint-io) | We are using Backstage as our Developer portal as well as for hosting our DevOps portal for software catalog. | +| [Niche](https://niche.com) | [Zach Romitz](mailto:zach.romitz@niche.com) | We are using the Software Catalog, Software Templates, API documentation, and Techdocs to try and centralize service information. | +| [Mercedes-Benz.io](https://www.mercedes-benz.io/) | [Manuel Santos](https://github.com/manusant) | At Mercedes-Benz we use it as a developer portal with software catalog, TechDocs, Scaffolding and custom plugins. It provides an overview of our tech ecosystem to our product development teams. The portal also serves as a way to foster collaboration among the numerous companies of the Mercedes-Benz Group. | +| [Funding Circle](https://www.fundingcircle.com/) | [Ariel Pacciaroni](https://github.com/arielpacciaroni) | We are building the internal developer portal using Backstage project and centralizing all services information at one place. The portal helps us track down repositories ownership as well as direct access to key information on every component. | +| [Clarivate](https://www.clarivate.com) | [Gabriele Carteni](mailto:gabriele.carteni@clarivate.com) | We are building our Developer Portal using Backstage to have a better control over our software ecosystem, integrate SDLC tools and promote best practices | +| [Cho Tot](https://www.chotot.com) | [Chotot Team](mailto:sre@chotot.vn) | Internal developer portal, service catalog with CI/CD tools. | +| [William Hill](https://www.williamhillgroup.com/) | [Pat Mills](mailto:pat.mills@williamhill.com), [Nathan Flynn](mailto:nflynn@williamhill.co.uk), and [Nishkarsh Raj](mailto:nishkarsh.raj@williamhill.co.uk) | William Hill are leveraging Backstage to build our Engineering Portal. Our mission is to centralize the software catalog inventory to enable service discoverability, reduce the onboarding time for new Engineers, provide a single pane of glass to accelerate Developer Productivity and Save Engineers time. Our aspiration is to create an InnerSource community focussed on organization-wide patterns that are re-usable and can be self-served with the Scaffolder. | +| [Vodafone NewZealand Limited](https://vodafone.co.nz) | [Ankit Gupta](mailto:ankit.gupta@vodafone.nz), [DevOps COE](mailto:devopstooling@vodafone.nz) | Vodafone NZ are leveraging Backstage to build centralised and self service Engineering Portal. Our mission is to standardised Pipeline templates across the Engineering teams, One shop stop to create the pipelines and repository with a template approach which reduces creation part from days to minutes and no wait time for developers. A unified view for Azure DevOps pipeline, Azure Repo pull requests, Deployment status from Azure RedHat Openshift-ArgoCD and SonarQube Security and code quality scans report on a single pan to provide a streamlined view for all microservices across the app stack. | +| [Coamo](http://www.coamo.com.br) | [@holiiveira](https://github.com/holiiveira), [@gpxlnx](https://github.com/gpxlnx) | We're starting to use it as the main tool of a DevOps platform. Our goal is to provide software templates, centralize our software catalog enabling efficient service discovery, and make it easy to manage the entire software ecosystem in one place. | +| [Exclaimer](https://www.exclaimer.com/) | [Marley Powell](mailto:marley.powell@exclaimer.com) | Developer portal, service catalog and documentation | +| [Edge Consulting](https://egde.no/) | [Øyvind Brekkhus Sandåker](mailto:oyvindbs@egde.no) | Using it as a Software Catalog to get an overview of our systems, for ourselves and our customers. | +| [CRV](https://crv4all.com) | [Pepijn Schildkamp](mailto:pepijn.schildkamp@crv4all.com) | +| [uisee.com](https://uisee.com) | [Haili Zhang](mailto:haili.zhang@uisee.com) | In PoC stage, planning to land it for cloud platform dev team. | +| [Egencia](https://www.egencia.com) | [Micheal Gibbons](mailto:migibbons@egencia.com) | Developer Portal: Software Catalog, Software Templates and Techdocs. | +| [Adaptavist](https://adaptavist.com) | [Lilly Holden](mailto:lholden@adaptavist.com) | Developer portal, service catalog, documentation and self-service platform | +| [Shipshape](https://shipshape.io) | [Chuck Carpenter](mailto:chuck@shipshape.io) | We are a consultancy helping teams implement and customize Backstage. | +| [Backbase](https://backbase.com) | [Nicolas Torres](mailto:ntorres.dev@gmail.com) | To catalog components and teams | +| [https://www.clear.sale](https://www.clear.sale) | [Paulo Baima](mailto:paulo.filho@clear.sale) | Central Hub for all the company modules, enabling the track of ownership of components and resources and how they relate to each other. | +| [www.leroymerlin.com.br](https://www.leroymerlin.com.br) | [Rodrigo Franzoni](mailto:rfranzoni@leroymerlin.com.br) | Our engineers use the Backstage to solve problems around ownership and visibility of our applications, access service catalog, documentation, observability and infrastructure. | From 1b7c691a3b1d6b734c87340beec4a8654eb18f87 Mon Sep 17 00:00:00 2001 From: Antonio Musolino Date: Wed, 6 Jul 2022 12:36:02 +0200 Subject: [PATCH 229/231] feat(sentry): added possibility to specify organization per component Signed-off-by: Antonio Musolino --- .changeset/purple-cherries-fix.md | 22 +++++++ .../well-known-annotations.md | 9 +-- plugins/sentry/api-report.md | 16 +++-- plugins/sentry/dev/index.tsx | 9 ++- plugins/sentry/src/api/annotations.test.ts | 59 +++++++++++++++++++ plugins/sentry/src/api/annotations.ts | 36 +++++++++++ plugins/sentry/src/api/production-api.ts | 21 +++++-- plugins/sentry/src/api/sentry-api.ts | 9 ++- .../SentryIssuesWidget/SentryIssuesWidget.tsx | 7 +-- .../{useProjectSlug.ts => hooks.ts} | 14 +++-- .../src/components/isSentryAvailable.ts | 2 +- 11 files changed, 170 insertions(+), 34 deletions(-) create mode 100644 .changeset/purple-cherries-fix.md create mode 100644 plugins/sentry/src/api/annotations.test.ts create mode 100644 plugins/sentry/src/api/annotations.ts rename plugins/sentry/src/components/{useProjectSlug.ts => hooks.ts} (70%) diff --git a/.changeset/purple-cherries-fix.md b/.changeset/purple-cherries-fix.md new file mode 100644 index 0000000000..d29a107cf3 --- /dev/null +++ b/.changeset/purple-cherries-fix.md @@ -0,0 +1,22 @@ +--- +'@backstage/plugin-sentry': minor +--- + +Added the possibility to specify organization per component, now the annotation `sentry.io/project-slug` can have the format of `[organization]/[project-slug]` or just `[project-slug]`. + +**BREAKING**: The method `fetchIssue` changed the signature: + +```diff +export interface SentryApi { + fetchIssues( +- project: string, +- statsFor: string, +- query?: string, ++ entity: Entity, ++ options: { ++ statsFor: string; ++ query?: string; ++ }, + ): Promise; +} +``` diff --git a/docs/features/software-catalog/well-known-annotations.md b/docs/features/software-catalog/well-known-annotations.md index 24464dd700..46f28dcb01 100644 --- a/docs/features/software-catalog/well-known-annotations.md +++ b/docs/features/software-catalog/well-known-annotations.md @@ -242,13 +242,14 @@ that entity if the periskop plugin is installed. # Example: metadata: annotations: - sentry.io/project-slug: pump-station + sentry.io/project-slug: backstage/pump-station ``` The value of this annotation is the so-called slug (or alternatively, the ID) of -a [Sentry](https://sentry.io) project within your organization. The organization -slug is currently not configurable on a per-entity basis, but is assumed to be -the same for all entities in the catalog. +a [Sentry](https://sentry.io) project within your organization. The value can +be the format of `[organization]/[project-slug]` or just `[project-slug]`. When +the organization slug is omitted the `app-config.yaml` will be used as a +fallback (`sentry.organization`). Specifying this annotation may enable Sentry related features in Backstage for that entity. diff --git a/plugins/sentry/api-report.md b/plugins/sentry/api-report.md index 043fa7a1fd..625db39959 100644 --- a/plugins/sentry/api-report.md +++ b/plugins/sentry/api-report.md @@ -53,9 +53,11 @@ export class ProductionSentryApi implements SentryApi { ); // (undocumented) fetchIssues( - project: string, - statsFor: string, - query?: string, + entity: Entity, + options: { + statsFor: string; + query?: string; + }, ): Promise; } @@ -70,9 +72,11 @@ export const Router: ({ entity }: { entity: Entity }) => JSX.Element; export interface SentryApi { // (undocumented) fetchIssues( - project: string, - statsFor: string, - query?: string, + entity: Entity, + options: { + statsFor: string; + query?: string; + }, ): Promise; } diff --git a/plugins/sentry/dev/index.tsx b/plugins/sentry/dev/index.tsx index 346cb7563a..667f965354 100644 --- a/plugins/sentry/dev/index.tsx +++ b/plugins/sentry/dev/index.tsx @@ -26,7 +26,10 @@ import { SentryApi, sentryApiRef, } from '../src'; -import { SENTRY_PROJECT_SLUG_ANNOTATION } from '../src/components/useProjectSlug'; +import { + SENTRY_PROJECT_SLUG_ANNOTATION, + getProjectSlug, +} from '../src/api/annotations'; import { Content, Header, Page } from '@backstage/core-components'; const entity = (name?: string) => @@ -47,8 +50,8 @@ createDevApp() deps: {}, factory: () => ({ - fetchIssues: async (project: string) => { - switch (project) { + fetchIssues: async (e: Entity) => { + switch (getProjectSlug(e)) { case 'error': throw new Error('Error!'); diff --git a/plugins/sentry/src/api/annotations.test.ts b/plugins/sentry/src/api/annotations.test.ts new file mode 100644 index 0000000000..633966dc10 --- /dev/null +++ b/plugins/sentry/src/api/annotations.test.ts @@ -0,0 +1,59 @@ +/* + * 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 { Entity } from '@backstage/catalog-model'; +import { + getOrganization, + getProjectSlug, + SENTRY_PROJECT_SLUG_ANNOTATION, +} from './annotations'; + +const entity = (name?: string) => + ({ + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + annotations: { + [SENTRY_PROJECT_SLUG_ANNOTATION]: name, + }, + name: 'something', + }, + } as Entity); + +describe('sentry annotations', () => { + it('getOrganization should works', () => { + const data = [ + [entity('orgs/some'), 'orgs'], + [entity('spotify/some'), 'spotify'], + [entity('slug'), ''], + ]; + + data.map(([input, expected]) => + expect(getOrganization(input as Entity)).toBe(expected), + ); + }); + it('getProjectSlug should works', () => { + const data = [ + [entity('orgs/some'), 'some'], + [entity('spotify/some'), 'some'], + [entity('slug'), 'slug'], + [entity(''), ''], + ]; + + data.map(([input, expected]) => + expect(getProjectSlug(input as Entity)).toBe(expected), + ); + }); +}); diff --git a/plugins/sentry/src/api/annotations.ts b/plugins/sentry/src/api/annotations.ts new file mode 100644 index 0000000000..169dc59ca0 --- /dev/null +++ b/plugins/sentry/src/api/annotations.ts @@ -0,0 +1,36 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Entity } from '@backstage/catalog-model'; + +export const SENTRY_PROJECT_SLUG_ANNOTATION = 'sentry.io/project-slug'; + +// The value can be the format of `[organization]/[project-slug]` or just `[project-slug] +const parseAnnotation = (entity: Entity) => { + return (entity?.metadata.annotations?.[SENTRY_PROJECT_SLUG_ANNOTATION] ?? '') + .split('/') + .reverse(); +}; + +export const getProjectSlug = (entity: Entity) => { + const [projectSlug, _] = parseAnnotation(entity); + return projectSlug ?? ''; +}; + +export const getOrganization = (entity: Entity) => { + const [_, organization] = parseAnnotation(entity); + return organization ?? ''; +}; diff --git a/plugins/sentry/src/api/production-api.ts b/plugins/sentry/src/api/production-api.ts index 5062f67380..da77f8a47d 100644 --- a/plugins/sentry/src/api/production-api.ts +++ b/plugins/sentry/src/api/production-api.ts @@ -17,6 +17,8 @@ import { SentryIssue } from './sentry-issue'; import { SentryApi } from './sentry-api'; import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; +import { Entity } from '@backstage/catalog-model'; +import { getProjectSlug, getOrganization } from './annotations'; export class ProductionSentryApi implements SentryApi { constructor( @@ -26,22 +28,29 @@ export class ProductionSentryApi implements SentryApi { ) {} async fetchIssues( - project: string, - statsFor: string, - query?: string, + entity: Entity, + options: { + statsFor: string; + query?: string; + }, ): Promise { + const { query, statsFor } = options; + + const project = getProjectSlug(entity); + const organization = getOrganization(entity) || this.organization; + if (!project) { return []; } const apiUrl = `${await this.discoveryApi.getBaseUrl('proxy')}/sentry/api`; - const options = await this.authOptions(); + const authOpts = await this.authOptions(); const queryPart = query ? `&query=${query}` : ''; const response = await fetch( - `${apiUrl}/0/projects/${this.organization}/${project}/issues/?statsPeriod=${statsFor}${queryPart}`, - options, + `${apiUrl}/0/projects/${organization}/${project}/issues/?statsPeriod=${statsFor}${queryPart}`, + authOpts, ); if (response.status >= 400 && response.status < 600) { diff --git a/plugins/sentry/src/api/sentry-api.ts b/plugins/sentry/src/api/sentry-api.ts index 0c5b709508..507803804d 100644 --- a/plugins/sentry/src/api/sentry-api.ts +++ b/plugins/sentry/src/api/sentry-api.ts @@ -16,6 +16,7 @@ import { SentryIssue } from './sentry-issue'; import { createApiRef } from '@backstage/core-plugin-api'; +import { Entity } from '@backstage/catalog-model'; export const sentryApiRef = createApiRef({ id: 'plugin.sentry.service', @@ -23,8 +24,10 @@ export const sentryApiRef = createApiRef({ export interface SentryApi { fetchIssues( - project: string, - statsFor: string, - query?: string, + entity: Entity, + options: { + statsFor: string; + query?: string; + }, ): Promise; } diff --git a/plugins/sentry/src/components/SentryIssuesWidget/SentryIssuesWidget.tsx b/plugins/sentry/src/components/SentryIssuesWidget/SentryIssuesWidget.tsx index d9e481b067..089ba0f1d6 100644 --- a/plugins/sentry/src/components/SentryIssuesWidget/SentryIssuesWidget.tsx +++ b/plugins/sentry/src/components/SentryIssuesWidget/SentryIssuesWidget.tsx @@ -19,10 +19,7 @@ import React, { useEffect } from 'react'; import useAsync from 'react-use/lib/useAsync'; import { sentryApiRef } from '../../api'; import SentryIssuesTable from '../SentryIssuesTable/SentryIssuesTable'; -import { - SENTRY_PROJECT_SLUG_ANNOTATION, - useProjectSlug, -} from '../useProjectSlug'; +import { SENTRY_PROJECT_SLUG_ANNOTATION, useProjectSlug } from '../hooks'; import { EmptyState, @@ -54,7 +51,7 @@ export const SentryIssuesWidget = ({ const projectId = useProjectSlug(entity); const { loading, value, error } = useAsync( - () => sentryApi.fetchIssues(projectId, statsFor, query), + () => sentryApi.fetchIssues(entity, { statsFor, query }), [sentryApi, statsFor, projectId, query], ); diff --git a/plugins/sentry/src/components/useProjectSlug.ts b/plugins/sentry/src/components/hooks.ts similarity index 70% rename from plugins/sentry/src/components/useProjectSlug.ts rename to plugins/sentry/src/components/hooks.ts index 0796e9e8df..0f1cb08526 100644 --- a/plugins/sentry/src/components/useProjectSlug.ts +++ b/plugins/sentry/src/components/hooks.ts @@ -14,10 +14,12 @@ * limitations under the License. */ -import { Entity } from '@backstage/catalog-model'; +import { + getProjectSlug, + getOrganization, + SENTRY_PROJECT_SLUG_ANNOTATION, +} from '../api/annotations'; -export const SENTRY_PROJECT_SLUG_ANNOTATION = 'sentry.io/project-slug'; - -export const useProjectSlug = (entity: Entity) => { - return entity?.metadata.annotations?.[SENTRY_PROJECT_SLUG_ANNOTATION] ?? ''; -}; +export const useProjectSlug = getProjectSlug; +export const useOrganization = getOrganization; +export { SENTRY_PROJECT_SLUG_ANNOTATION }; diff --git a/plugins/sentry/src/components/isSentryAvailable.ts b/plugins/sentry/src/components/isSentryAvailable.ts index 1a7d26f97c..a0803f6b45 100644 --- a/plugins/sentry/src/components/isSentryAvailable.ts +++ b/plugins/sentry/src/components/isSentryAvailable.ts @@ -15,7 +15,7 @@ */ import { Entity } from '@backstage/catalog-model'; -import { SENTRY_PROJECT_SLUG_ANNOTATION } from './useProjectSlug'; +import { SENTRY_PROJECT_SLUG_ANNOTATION } from './hooks'; /** * @public From c5b5bd5a0fa84f86869a1fc3f5bce292830f8177 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 13:40:43 +0000 Subject: [PATCH 230/231] chore(deps): update backstage/actions action to v0.5.3 Signed-off-by: Renovate Bot --- .github/workflows/ci.yml | 6 +++--- .github/workflows/cron.yml | 2 +- .github/workflows/deploy_nightly.yml | 2 +- .github/workflows/deploy_packages.yml | 4 ++-- .github/workflows/issue.yaml | 2 +- .github/workflows/pr-review-comment.yaml | 2 +- .github/workflows/pr.yaml | 2 +- .github/workflows/sync_code-formatting.yml | 2 +- .github/workflows/sync_snyk-github-issues.yml | 2 +- .github/workflows/verify_e2e-linux.yml | 2 +- .github/workflows/verify_storybook.yml | 2 +- 11 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 06f89b06d3..2e134eaa71 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,7 +32,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.2 + uses: backstage/actions/yarn-install@v0.5.3 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -61,7 +61,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.2 + uses: backstage/actions/yarn-install@v0.5.3 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -178,7 +178,7 @@ jobs: registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.2 + uses: backstage/actions/yarn-install@v0.5.3 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml index 228d4c62ac..6fd9fe2814 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -8,7 +8,7 @@ jobs: cron: runs-on: ubuntu-latest steps: - - uses: backstage/actions/cron@v0.5.2 + - uses: backstage/actions/cron@v0.5.3 with: app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} diff --git a/.github/workflows/deploy_nightly.yml b/.github/workflows/deploy_nightly.yml index 719b5ea94b..fe234359dd 100644 --- a/.github/workflows/deploy_nightly.yml +++ b/.github/workflows/deploy_nightly.yml @@ -26,7 +26,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.2 + uses: backstage/actions/yarn-install@v0.5.3 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml index 371712fedb..6b505dfbf5 100644 --- a/.github/workflows/deploy_packages.yml +++ b/.github/workflows/deploy_packages.yml @@ -67,7 +67,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.2 + uses: backstage/actions/yarn-install@v0.5.3 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} @@ -145,7 +145,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.2 + uses: backstage/actions/yarn-install@v0.5.3 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml index de02e45e76..58b1f725ad 100644 --- a/.github/workflows/issue.yaml +++ b/.github/workflows/issue.yaml @@ -10,4 +10,4 @@ jobs: if: github.repository == 'backstage/backstage' steps: - name: Issue sync - uses: backstage/actions/issue-sync@v0.5.2 + uses: backstage/actions/issue-sync@v0.5.3 diff --git a/.github/workflows/pr-review-comment.yaml b/.github/workflows/pr-review-comment.yaml index 65252bae09..37cdea5aa9 100644 --- a/.github/workflows/pr-review-comment.yaml +++ b/.github/workflows/pr-review-comment.yaml @@ -15,7 +15,7 @@ jobs: if: github.repository == 'backstage/backstage' && github.event.workflow_run.conclusion == 'success' steps: - - uses: backstage/actions/re-review@v0.5.2 + - uses: backstage/actions/re-review@v0.5.3 with: app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }} diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index e5945f6f20..1444559a68 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -18,7 +18,7 @@ jobs: if: github.repository == 'backstage/backstage' && ( github.event.pull_request || github.event.issue.pull_request ) steps: - name: PR sync - uses: backstage/actions/pr-sync@v0.5.2 + uses: backstage/actions/pr-sync@v0.5.3 with: github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }} app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }} diff --git a/.github/workflows/sync_code-formatting.yml b/.github/workflows/sync_code-formatting.yml index b04a0a3de0..45cf6dca3d 100644 --- a/.github/workflows/sync_code-formatting.yml +++ b/.github/workflows/sync_code-formatting.yml @@ -20,7 +20,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.2 + uses: backstage/actions/yarn-install@v0.5.3 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml index d2af1307b0..1ac1ff3b2c 100644 --- a/.github/workflows/sync_snyk-github-issues.yml +++ b/.github/workflows/sync_snyk-github-issues.yml @@ -22,7 +22,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.2 + uses: backstage/actions/yarn-install@v0.5.3 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml index 811372d54d..ec3edb0dbe 100644 --- a/.github/workflows/verify_e2e-linux.yml +++ b/.github/workflows/verify_e2e-linux.yml @@ -46,7 +46,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.2 + uses: backstage/actions/yarn-install@v0.5.3 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml index 1aea51bec9..03a1b01c07 100644 --- a/.github/workflows/verify_storybook.yml +++ b/.github/workflows/verify_storybook.yml @@ -35,7 +35,7 @@ jobs: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install - uses: backstage/actions/yarn-install@v0.5.2 + uses: backstage/actions/yarn-install@v0.5.3 with: cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} - name: storybook yarn install From b309638d7af5917d877db646642fecc792e72f42 Mon Sep 17 00:00:00 2001 From: Cory Fisher Date: Wed, 6 Jul 2022 10:16:20 -0400 Subject: [PATCH 231/231] Fix patch version release typo. Signed-off-by: Cory Fisher --- docs/overview/versioning-policy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/overview/versioning-policy.md b/docs/overview/versioning-policy.md index 282906c580..885a599ed8 100644 --- a/docs/overview/versioning-policy.md +++ b/docs/overview/versioning-policy.md @@ -49,7 +49,7 @@ functionality, breaking changes, and bug fixes, according the [versioning policy](#release-versioning-policy). Patch versions will only be released to address critical bug fixes. They are not -bound to the regular cadence and are instead releases whenever needed. +bound to the regular cadence and are instead released whenever needed. ## Next Release Line