From af85d98bad67e336328ae71d8f16d94dc0ea2c52 Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 14 Nov 2022 15:28:08 +0100 Subject: [PATCH 01/34] fixed deprecation in some files backend-common Signed-off-by: Simon --- .../src/database/connectors/mysql.ts | 2 +- .../src/reading/AwsS3UrlReader.test.ts | 4 +-- .../src/reading/AzureUrlReader.test.ts | 4 +-- .../reading/BitbucketCloudUrlReader.test.ts | 2 +- .../src/reading/BitbucketUrlReader.test.ts | 28 +++++++++---------- 5 files changed, 19 insertions(+), 21 deletions(-) diff --git a/packages/backend-common/src/database/connectors/mysql.ts b/packages/backend-common/src/database/connectors/mysql.ts index b75dc3d99c..4283ff42bd 100644 --- a/packages/backend-common/src/database/connectors/mysql.ts +++ b/packages/backend-common/src/database/connectors/mysql.ts @@ -115,7 +115,7 @@ export function parseMysqlConnectionString( password, host: hostname, port: Number(port || 3306), - database: decodeURIComponent(pathname.substr(1)), + database: decodeURIComponent(pathname.substring(1)), }; const ssl = searchParams.get('ssl'); diff --git a/packages/backend-common/src/reading/AwsS3UrlReader.test.ts b/packages/backend-common/src/reading/AwsS3UrlReader.test.ts index 454b8a2c5a..9f81322eec 100644 --- a/packages/backend-common/src/reading/AwsS3UrlReader.test.ts +++ b/packages/backend-common/src/reading/AwsS3UrlReader.test.ts @@ -247,7 +247,7 @@ describe('AwsS3UrlReader', () => { }); it('returns contents of an object in a bucket', async () => { - const response = await reader.read( + const response = await reader.readUrl( 'https://test-bucket.s3.us-east-2.amazonaws.com/awsS3-mock-object.yaml', ); expect(response.toString().trim()).toBe('site_name: Test'); @@ -255,7 +255,7 @@ describe('AwsS3UrlReader', () => { it('rejects unknown targets', async () => { await expect( - reader.read( + reader.readUrl( 'https://test-bucket.s3.us-east-2.NOTamazonaws.com/file.yaml', ), ).rejects.toThrow( diff --git a/packages/backend-common/src/reading/AzureUrlReader.test.ts b/packages/backend-common/src/reading/AzureUrlReader.test.ts index bc088d8bc9..0ad1346c3c 100644 --- a/packages/backend-common/src/reading/AzureUrlReader.test.ts +++ b/packages/backend-common/src/reading/AzureUrlReader.test.ts @@ -116,7 +116,7 @@ describe('AzureUrlReader', () => { treeResponseFactory, }); - const data = await reader.read(url); + const data = await reader.readUrl(url); const res = await JSON.parse(data.toString('utf-8')); expect(res).toEqual(response); }); @@ -145,7 +145,7 @@ describe('AzureUrlReader', () => { logger, treeResponseFactory, }); - await reader.read(url); + await reader.readUrl(url); }).rejects.toThrow(error); }); }); diff --git a/packages/backend-common/src/reading/BitbucketCloudUrlReader.test.ts b/packages/backend-common/src/reading/BitbucketCloudUrlReader.test.ts index 12ace2755b..ca6e15a005 100644 --- a/packages/backend-common/src/reading/BitbucketCloudUrlReader.test.ts +++ b/packages/backend-common/src/reading/BitbucketCloudUrlReader.test.ts @@ -161,7 +161,7 @@ describe('BitbucketCloudUrlReader', () => { describe('read', () => { it('rejects unknown targets', async () => { await expect( - reader.read('https://not.bitbucket.com/apa'), + reader.readUrl('https://not.bitbucket.com/apa'), ).rejects.toThrow( 'Incorrect URL: https://not.bitbucket.com/apa, Error: Invalid Bitbucket Cloud URL or file path', ); diff --git a/packages/backend-common/src/reading/BitbucketUrlReader.test.ts b/packages/backend-common/src/reading/BitbucketUrlReader.test.ts index 922480f8e7..c18e779592 100644 --- a/packages/backend-common/src/reading/BitbucketUrlReader.test.ts +++ b/packages/backend-common/src/reading/BitbucketUrlReader.test.ts @@ -16,8 +16,8 @@ import { ConfigReader } from '@backstage/config'; import { - BitbucketIntegration, - readBitbucketIntegrationConfig, + BitbucketCloudIntegration, + readBitbucketCloudIntegrationConfig } from '@backstage/integration'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import fs from 'fs-extra'; @@ -27,14 +27,14 @@ import { setupServer } from 'msw/node'; import os from 'os'; import path from 'path'; import { NotModifiedError } from '@backstage/errors'; -import { BitbucketUrlReader } from './BitbucketUrlReader'; +import { BitbucketCloudUrlReader } from './BitbucketCloudUrlReader'; import { DefaultReadTreeResponseFactory } from './tree'; import { getVoidLogger } from '../logging'; import getRawBody from 'raw-body'; const logger = getVoidLogger(); -describe('BitbucketUrlReader.factory', () => { +describe('BitbucketCloudUrlReader.factory', () => { it('only apply integration configs not inherited from bitbucketCloud or bitbucketServer', () => { const config = new ConfigReader({ integrations: { @@ -57,7 +57,7 @@ describe('BitbucketUrlReader.factory', () => { config: config, }); - const tuples = BitbucketUrlReader.factory({ + const tuples = BitbucketCloudUrlReader.factory({ config, logger, treeResponseFactory, @@ -67,34 +67,32 @@ describe('BitbucketUrlReader.factory', () => { }); }); -describe('BitbucketUrlReader', () => { +describe('BitbucketCloudUrlReader', () => { const treeResponseFactory = DefaultReadTreeResponseFactory.create({ config: new ConfigReader({}), }); - const bitbucketProcessor = new BitbucketUrlReader( - new BitbucketIntegration( - readBitbucketIntegrationConfig( + const bitbucketProcessor = new BitbucketCloudUrlReader( + new BitbucketCloudIntegration( + readBitbucketCloudIntegrationConfig( new ConfigReader({ host: 'bitbucket.org', apiBaseUrl: 'https://api.bitbucket.org/2.0', }), ), ), - logger, { treeResponseFactory }, ); - const hostedBitbucketProcessor = new BitbucketUrlReader( - new BitbucketIntegration( - readBitbucketIntegrationConfig( + const hostedBitbucketProcessor = new BitbucketCloudUrlReader( + new BitbucketCloudIntegration( + readBitbucketCloudIntegrationConfig( new ConfigReader({ host: 'bitbucket.mycompany.net', apiBaseUrl: 'https://api.bitbucket.mycompany.net/rest/api/1.0', }), ), ), - logger, { treeResponseFactory }, ); @@ -209,7 +207,7 @@ describe('BitbucketUrlReader', () => { describe('read', () => { it('rejects unknown targets', async () => { await expect( - bitbucketProcessor.read('https://not.bitbucket.com/apa'), + bitbucketProcessor.readUrl('https://not.bitbucket.com/apa'), ).rejects.toThrow( 'Incorrect URL: https://not.bitbucket.com/apa, Error: Invalid Bitbucket URL or file path', ); From 4801c60746fab0825860886b8b6b4dbf8993d5c4 Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 14 Nov 2022 15:38:18 +0100 Subject: [PATCH 02/34] done with deprecations in backend except BitBucketUrl Signed-off-by: Simon --- .../backend-common/src/reading/FetchUrlReader.test.ts | 6 +++--- .../backend-common/src/reading/GithubUrlReader.test.ts | 4 ++-- .../backend-common/src/reading/GitlabUrlReader.test.ts | 4 ++-- .../src/reading/UrlReaderPredicateMux.test.ts | 4 ++-- .../backend-common/src/reading/UrlReaderPredicateMux.ts | 2 +- packages/backend-common/src/reading/integration.test.ts | 8 ++++---- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/backend-common/src/reading/FetchUrlReader.test.ts b/packages/backend-common/src/reading/FetchUrlReader.test.ts index 75172e83b0..d3e7ff840b 100644 --- a/packages/backend-common/src/reading/FetchUrlReader.test.ts +++ b/packages/backend-common/src/reading/FetchUrlReader.test.ts @@ -171,7 +171,7 @@ describe('FetchUrlReader', () => { describe('read', () => { it('should return etag from the response', async () => { - const buffer = await fetchUrlReader.read( + const buffer = await fetchUrlReader.readUrl( 'https://backstage.io/some-resource', ); expect(buffer.toString()).toBe('content foo'); @@ -179,13 +179,13 @@ describe('FetchUrlReader', () => { it('should throw NotFound if server responds with 404', async () => { await expect( - fetchUrlReader.read('https://backstage.io/not-exists'), + fetchUrlReader.readUrl('https://backstage.io/not-exists'), ).rejects.toThrow(NotFoundError); }); it('should throw Error if server responds with 500', async () => { await expect( - fetchUrlReader.read('https://backstage.io/error'), + fetchUrlReader.readUrl('https://backstage.io/error'), ).rejects.toThrow(Error); }); }); diff --git a/packages/backend-common/src/reading/GithubUrlReader.test.ts b/packages/backend-common/src/reading/GithubUrlReader.test.ts index a5f9d26de5..2315d1f9e8 100644 --- a/packages/backend-common/src/reading/GithubUrlReader.test.ts +++ b/packages/backend-common/src/reading/GithubUrlReader.test.ts @@ -92,7 +92,7 @@ describe('GithubUrlReader', () => { describe('implementation', () => { it('rejects unknown targets', async () => { await expect( - githubProcessor.read('https://not.github.com/apa'), + githubProcessor.readUrl('https://not.github.com/apa'), ).rejects.toThrow( 'Incorrect URL: https://not.github.com/apa, Error: Invalid GitHub URL or file path', ); @@ -135,7 +135,7 @@ describe('GithubUrlReader', () => { ), ); - await gheProcessor.read( + await gheProcessor.readUrl( 'https://github.com/backstage/mock/tree/blob/main', ); }); diff --git a/packages/backend-common/src/reading/GitlabUrlReader.test.ts b/packages/backend-common/src/reading/GitlabUrlReader.test.ts index 29ef3f4ce8..2e229f003c 100644 --- a/packages/backend-common/src/reading/GitlabUrlReader.test.ts +++ b/packages/backend-common/src/reading/GitlabUrlReader.test.ts @@ -150,7 +150,7 @@ describe('GitlabUrlReader', () => { treeResponseFactory, }); - const data = await reader.read(url); + const data = await reader.readUrl(url); const res = await JSON.parse(data.toString('utf-8')); expect(res).toEqual(response); }); @@ -169,7 +169,7 @@ describe('GitlabUrlReader', () => { logger, treeResponseFactory, }); - await reader.read(url); + await reader.readUrl(url); }).rejects.toThrow(error); }); }); diff --git a/packages/backend-common/src/reading/UrlReaderPredicateMux.test.ts b/packages/backend-common/src/reading/UrlReaderPredicateMux.test.ts index 5a11e068df..e3d412b9ab 100644 --- a/packages/backend-common/src/reading/UrlReaderPredicateMux.test.ts +++ b/packages/backend-common/src/reading/UrlReaderPredicateMux.test.ts @@ -41,7 +41,7 @@ describe('UrlReaderPredicateMux', () => { reader: barReader, }); - await mux.read('http://foo/1'); + await mux.readUrl('http://foo/1'); expect(fooReader.read).toHaveBeenCalledWith('http://foo/1'); await mux.readUrl('http://foo/2'); expect(fooReader.readUrl).toHaveBeenCalledWith('http://foo/2', undefined); @@ -50,7 +50,7 @@ describe('UrlReaderPredicateMux', () => { await mux.search('http://foo/4'); expect(fooReader.search).toHaveBeenCalledWith('http://foo/4', undefined); - await mux.read('http://bar/1'); + await mux.readUrl('http://bar/1'); expect(barReader.read).toHaveBeenCalledWith('http://bar/1'); await mux.readUrl('http://bar/2'); expect(barReader.readUrl).toHaveBeenCalledWith('http://bar/2', undefined); diff --git a/packages/backend-common/src/reading/UrlReaderPredicateMux.ts b/packages/backend-common/src/reading/UrlReaderPredicateMux.ts index d5d30605b2..7330e053ff 100644 --- a/packages/backend-common/src/reading/UrlReaderPredicateMux.ts +++ b/packages/backend-common/src/reading/UrlReaderPredicateMux.ts @@ -50,7 +50,7 @@ export class UrlReaderPredicateMux implements UrlReader { for (const { predicate, reader } of this.readers) { if (predicate(parsed)) { - return reader.read(url); + return reader.readUrl(url); } } diff --git a/packages/backend-common/src/reading/integration.test.ts b/packages/backend-common/src/reading/integration.test.ts index 951df29605..0855c86f4f 100644 --- a/packages/backend-common/src/reading/integration.test.ts +++ b/packages/backend-common/src/reading/integration.test.ts @@ -89,7 +89,7 @@ describe.skip('UrlReaders', () => { it( 'should read data from azure', withRetries(3, async () => { - const data = await reader.read( + const data = await reader.readUrl( 'https://dev.azure.com/backstage-verification/test-templates/_git/test-templates?path=%2Ftemplate.yaml', ); expect(data.toString()).toContain('test-template-azure'); @@ -110,7 +110,7 @@ describe.skip('UrlReaders', () => { it( 'should read data from gitlab', withRetries(3, async () => { - const data = await reader.read( + const data = await reader.readUrl( 'https://gitlab.com/backstage-verification/test-templates/-/blob/master/template.yaml', ); expect(data.toString()).toContain('test-template-gitlab'); @@ -131,7 +131,7 @@ describe.skip('UrlReaders', () => { it( 'should read data from bitbucket', withRetries(3, async () => { - const data = await reader.read( + const data = await reader.readUrl( 'https://bitbucket.org/backstage-verification/test-template/src/master/template.yaml', ); expect(data.toString()).toContain('test-template-bitbucket'); @@ -152,7 +152,7 @@ describe.skip('UrlReaders', () => { it( 'should read data from github', withRetries(3, async () => { - const data = await reader.read( + const data = await reader.readUrl( 'https://github.com/backstage-verification/test-templates/blob/master/template.yaml', ); expect(data.toString()).toContain('test-template-github'); From e9ad86dd8222c341c7868f5327954fcec7f87d51 Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 14 Nov 2022 17:54:55 +0100 Subject: [PATCH 03/34] fixed tests that failed from converting to readUrl Signed-off-by: Simon --- packages/backend-common/src/reading/AwsS3UrlReader.test.ts | 4 +++- packages/backend-common/src/reading/AzureUrlReader.test.ts | 7 +++++-- packages/backend-common/src/reading/AzureUrlReader.ts | 2 +- packages/backend-common/src/reading/FetchUrlReader.test.ts | 5 ++++- .../backend-common/src/reading/GitlabUrlReader.test.ts | 2 +- .../src/reading/UrlReaderPredicateMux.test.ts | 4 ++-- 6 files changed, 16 insertions(+), 8 deletions(-) diff --git a/packages/backend-common/src/reading/AwsS3UrlReader.test.ts b/packages/backend-common/src/reading/AwsS3UrlReader.test.ts index 9f81322eec..dfa1629412 100644 --- a/packages/backend-common/src/reading/AwsS3UrlReader.test.ts +++ b/packages/backend-common/src/reading/AwsS3UrlReader.test.ts @@ -250,7 +250,9 @@ describe('AwsS3UrlReader', () => { const response = await reader.readUrl( 'https://test-bucket.s3.us-east-2.amazonaws.com/awsS3-mock-object.yaml', ); - expect(response.toString().trim()).toBe('site_name: Test'); + const fromStream = await getRawBody(response.stream!()); + + expect(fromStream.toString().trim()).toBe('site_name: Test'); }); it('rejects unknown targets', async () => { diff --git a/packages/backend-common/src/reading/AzureUrlReader.test.ts b/packages/backend-common/src/reading/AzureUrlReader.test.ts index 0ad1346c3c..b50aa30804 100644 --- a/packages/backend-common/src/reading/AzureUrlReader.test.ts +++ b/packages/backend-common/src/reading/AzureUrlReader.test.ts @@ -30,6 +30,8 @@ import { NotModifiedError } from '@backstage/errors'; import { getVoidLogger } from '../logging'; import { AzureUrlReader } from './AzureUrlReader'; import { DefaultReadTreeResponseFactory } from './tree'; +import getRawBody from 'raw-body'; + const logger = getVoidLogger(); @@ -117,7 +119,8 @@ describe('AzureUrlReader', () => { }); const data = await reader.readUrl(url); - const res = await JSON.parse(data.toString('utf-8')); + const fromStream = await getRawBody(data.stream!()); + const res = await JSON.parse(fromStream.toString()); expect(res).toEqual(response); }); @@ -336,4 +339,4 @@ describe('AzureUrlReader', () => { ).rejects.toThrow(NotModifiedError); }); }); -}); +}); \ No newline at end of file diff --git a/packages/backend-common/src/reading/AzureUrlReader.ts b/packages/backend-common/src/reading/AzureUrlReader.ts index 140496c181..9514b410fd 100644 --- a/packages/backend-common/src/reading/AzureUrlReader.ts +++ b/packages/backend-common/src/reading/AzureUrlReader.ts @@ -200,4 +200,4 @@ export class AzureUrlReader implements UrlReader { const { host, token } = this.integration.config; return `azure{host=${host},authed=${Boolean(token)}}`; } -} +} \ No newline at end of file diff --git a/packages/backend-common/src/reading/FetchUrlReader.test.ts b/packages/backend-common/src/reading/FetchUrlReader.test.ts index d3e7ff840b..18828f2dd0 100644 --- a/packages/backend-common/src/reading/FetchUrlReader.test.ts +++ b/packages/backend-common/src/reading/FetchUrlReader.test.ts @@ -22,6 +22,8 @@ import { setupServer } from 'msw/node'; import { getVoidLogger } from '../logging'; import { FetchUrlReader } from './FetchUrlReader'; import { DefaultReadTreeResponseFactory } from './tree'; +import getRawBody from 'raw-body'; + const fetchUrlReader = new FetchUrlReader(); @@ -174,7 +176,8 @@ describe('FetchUrlReader', () => { const buffer = await fetchUrlReader.readUrl( 'https://backstage.io/some-resource', ); - expect(buffer.toString()).toBe('content foo'); + const fromStream = await getRawBody(buffer.stream!()); + expect(fromStream.toString()).toBe('content foo'); }); it('should throw NotFound if server responds with 404', async () => { diff --git a/packages/backend-common/src/reading/GitlabUrlReader.test.ts b/packages/backend-common/src/reading/GitlabUrlReader.test.ts index 2e229f003c..1a31d3051e 100644 --- a/packages/backend-common/src/reading/GitlabUrlReader.test.ts +++ b/packages/backend-common/src/reading/GitlabUrlReader.test.ts @@ -151,7 +151,7 @@ describe('GitlabUrlReader', () => { }); const data = await reader.readUrl(url); - const res = await JSON.parse(data.toString('utf-8')); + const res = await JSON.parse(data.toString()); expect(res).toEqual(response); }); diff --git a/packages/backend-common/src/reading/UrlReaderPredicateMux.test.ts b/packages/backend-common/src/reading/UrlReaderPredicateMux.test.ts index e3d412b9ab..38473557e0 100644 --- a/packages/backend-common/src/reading/UrlReaderPredicateMux.test.ts +++ b/packages/backend-common/src/reading/UrlReaderPredicateMux.test.ts @@ -42,7 +42,7 @@ describe('UrlReaderPredicateMux', () => { }); await mux.readUrl('http://foo/1'); - expect(fooReader.read).toHaveBeenCalledWith('http://foo/1'); + expect(fooReader.readUrl).toHaveBeenCalledWith('http://foo/1', undefined); await mux.readUrl('http://foo/2'); expect(fooReader.readUrl).toHaveBeenCalledWith('http://foo/2', undefined); await mux.readTree('http://foo/3'); @@ -51,7 +51,7 @@ describe('UrlReaderPredicateMux', () => { expect(fooReader.search).toHaveBeenCalledWith('http://foo/4', undefined); await mux.readUrl('http://bar/1'); - expect(barReader.read).toHaveBeenCalledWith('http://bar/1'); + expect(barReader.readUrl).toHaveBeenCalledWith('http://bar/1', undefined); await mux.readUrl('http://bar/2'); expect(barReader.readUrl).toHaveBeenCalledWith('http://bar/2', undefined); await mux.readTree('http://bar/3'); From 1fcd60eb4dfd06cdb8565c6843a215606afc3a83 Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 14 Nov 2022 19:11:19 +0100 Subject: [PATCH 04/34] fixed last failing test in backend-common Signed-off-by: Simon --- packages/backend-common/src/reading/GitlabUrlReader.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/backend-common/src/reading/GitlabUrlReader.test.ts b/packages/backend-common/src/reading/GitlabUrlReader.test.ts index 1a31d3051e..727fb5d3c0 100644 --- a/packages/backend-common/src/reading/GitlabUrlReader.test.ts +++ b/packages/backend-common/src/reading/GitlabUrlReader.test.ts @@ -26,6 +26,7 @@ import { getVoidLogger } from '../logging'; import { GitlabUrlReader } from './GitlabUrlReader'; import { DefaultReadTreeResponseFactory } from './tree'; import { NotModifiedError, NotFoundError } from '@backstage/errors'; +import getRawBody from 'raw-body'; import { GitLabIntegration, readGitLabIntegrationConfig, @@ -151,7 +152,8 @@ describe('GitlabUrlReader', () => { }); const data = await reader.readUrl(url); - const res = await JSON.parse(data.toString()); + const fromStream = await getRawBody(data.stream!()); + const res = await JSON.parse(fromStream.toString()); expect(res).toEqual(response); }); From fa633304c3bfa48c5ea90153ac6e284d2243c043 Mon Sep 17 00:00:00 2001 From: Simon Date: Tue, 15 Nov 2022 08:50:29 +0100 Subject: [PATCH 05/34] merge from master and fixed some more deprecations Signed-off-by: Simon --- .../src/validation/CommonValidatorFunctions.test.ts | 2 +- packages/config/src/index.ts | 2 +- .../src/components/SupportButton/SupportButton.tsx | 2 +- yarn.lock | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/catalog-model/src/validation/CommonValidatorFunctions.test.ts b/packages/catalog-model/src/validation/CommonValidatorFunctions.test.ts index 9a9ec8bcda..a887a9aa2e 100644 --- a/packages/catalog-model/src/validation/CommonValidatorFunctions.test.ts +++ b/packages/catalog-model/src/validation/CommonValidatorFunctions.test.ts @@ -224,7 +224,7 @@ describe('CommonValidatorFunctions', () => { ['abc xyz', true], ['abc xyz abc.', true], ])(`isValidString %p ? %p`, (value, result) => { - expect(CommonValidatorFunctions.isValidString(value)).toBe(result); + expect(CommonValidatorFunctions.isNonEmptyString(value)).toBe(result); }); it.each([ diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts index c8800d0ad2..a795a02b86 100644 --- a/packages/config/src/index.ts +++ b/packages/config/src/index.ts @@ -25,6 +25,6 @@ export type { JsonObject, JsonPrimitive, JsonValue, -} from './deprecatedTypes'; +} from '@backstage/types'; export { ConfigReader } from './reader'; export type { AppConfig, Config } from './types'; diff --git a/packages/core-components/src/components/SupportButton/SupportButton.tsx b/packages/core-components/src/components/SupportButton/SupportButton.tsx index 01de79bdee..4e0bb866f5 100644 --- a/packages/core-components/src/components/SupportButton/SupportButton.tsx +++ b/packages/core-components/src/components/SupportButton/SupportButton.tsx @@ -68,7 +68,7 @@ const SupportListItem = ({ item }: { item: SupportItem }) => { ( + secondary={item.links?.reduce( (prev, link, idx) => [ ...prev, idx > 0 &&
, diff --git a/yarn.lock b/yarn.lock index 0841181a34..c77ebcf329 100644 --- a/yarn.lock +++ b/yarn.lock @@ -38915,7 +38915,7 @@ __metadata: "typescript@patch:typescript@~4.6.0#~builtin, typescript@patch:typescript@~4.6.3#~builtin": version: 4.6.4 - resolution: "typescript@patch:typescript@npm%3A4.6.4#~builtin::version=4.6.4&hash=a1c5e5" + resolution: "typescript@patch:typescript@npm%3A4.6.4#~builtin::version=4.6.4&hash=f456af" bin: tsc: bin/tsc tsserver: bin/tsserver @@ -38925,7 +38925,7 @@ __metadata: "typescript@patch:typescript@~4.7.0#~builtin": version: 4.7.4 - resolution: "typescript@patch:typescript@npm%3A4.7.4#~builtin::version=4.7.4&hash=a1c5e5" + resolution: "typescript@patch:typescript@npm%3A4.7.4#~builtin::version=4.7.4&hash=f456af" bin: tsc: bin/tsc tsserver: bin/tsserver From d1b0d6675480ee65f123c346e179b94a974ee8ce Mon Sep 17 00:00:00 2001 From: Simon Date: Tue, 15 Nov 2022 09:13:20 +0100 Subject: [PATCH 06/34] removed blank row Signed-off-by: Simon --- packages/backend-common/src/reading/AzureUrlReader.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/backend-common/src/reading/AzureUrlReader.test.ts b/packages/backend-common/src/reading/AzureUrlReader.test.ts index b50aa30804..035f9bcb05 100644 --- a/packages/backend-common/src/reading/AzureUrlReader.test.ts +++ b/packages/backend-common/src/reading/AzureUrlReader.test.ts @@ -32,7 +32,6 @@ import { AzureUrlReader } from './AzureUrlReader'; import { DefaultReadTreeResponseFactory } from './tree'; import getRawBody from 'raw-body'; - const logger = getVoidLogger(); const treeResponseFactory = DefaultReadTreeResponseFactory.create({ From 3b022fedb65d6b995ad44480a404f763fcc245b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 10 Nov 2022 11:56:29 +0100 Subject: [PATCH 07/34] richer errors in the msgraph import steps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw Signed-off-by: Simon --- .changeset/clean-socks-call.md | 5 +++++ .../src/microsoftGraph/read.ts | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 .changeset/clean-socks-call.md diff --git a/.changeset/clean-socks-call.md b/.changeset/clean-socks-call.md new file mode 100644 index 0000000000..9b802618f6 --- /dev/null +++ b/.changeset/clean-socks-call.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-msgraph': patch +--- + +Added cause information to logged warnings diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts index 8e1d9a3776..0ed411bfea 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts @@ -122,7 +122,7 @@ export async function readMicrosoftGraphUsers( 120, ); } catch (e) { - options.logger.warn(`Unable to load photo for ${user.id}`); + options.logger.warn(`Unable to load photo for ${user.id}, ${e}`); } const entity = await transformer(user, userPhoto); @@ -206,7 +206,7 @@ export async function readMicrosoftGraphUsersInGroups( expand: options.userExpand, }); } catch (e) { - options.logger.warn(`Unable to load user for ${userId}`); + options.logger.warn(`Unable to load user for ${userId}, ${e}`); } if (user) { try { @@ -217,7 +217,7 @@ export async function readMicrosoftGraphUsersInGroups( 120, ); } catch (e) { - options.logger.warn(`Unable to load userphoto for ${userId}`); + options.logger.warn(`Unable to load userphoto for ${userId}, ${e}`); } const entity = await transformer(user, userPhoto); From 128b3e98fb8d8eb3fbd18ba84794882afdfedd2b Mon Sep 17 00:00:00 2001 From: Casper Thygesen <73483987+cthtrifork@users.noreply.github.com> Date: Tue, 8 Nov 2022 19:48:03 +0100 Subject: [PATCH 08/34] Add default errorHandler() to vault-backend Right now any uncaught error causes backstarte to crash We should use `packages/backend-common/src/middleware/errorHandler.ts` middleware like the other backend plugins Signed-off-by: Casper Thygesen <73483987+cthtrifork@users.noreply.github.com> Signed-off-by: cthtrifork Signed-off-by: Simon --- plugins/vault-backend/src/service/VaultBuilder.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/vault-backend/src/service/VaultBuilder.ts b/plugins/vault-backend/src/service/VaultBuilder.ts index 67260f45ca..b82a5802bb 100644 --- a/plugins/vault-backend/src/service/VaultBuilder.ts +++ b/plugins/vault-backend/src/service/VaultBuilder.ts @@ -20,6 +20,7 @@ import { Logger } from 'winston'; import express, { Router } from 'express'; import { VaultClient } from './vaultApi'; import { TaskRunner, PluginTaskScheduler } from '@backstage/backend-tasks'; +import { errorHandler } from '@backstage/backend-common'; /** * Environment values needed by the VaultBuilder @@ -145,6 +146,7 @@ export class VaultBuilder { res.json({ items: secrets }); }); + router.use(errorHandler()); return router; } } From e2e5242c328bf835f24290101b8a28cb753e6359 Mon Sep 17 00:00:00 2001 From: Casper Thygesen <73483987+cthtrifork@users.noreply.github.com> Date: Tue, 8 Nov 2022 19:51:34 +0100 Subject: [PATCH 09/34] added changeset Signed-off-by: cthtrifork Signed-off-by: Simon --- .changeset/rude-mayflies-heal.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/rude-mayflies-heal.md diff --git a/.changeset/rude-mayflies-heal.md b/.changeset/rude-mayflies-heal.md new file mode 100644 index 0000000000..738ade0f3c --- /dev/null +++ b/.changeset/rude-mayflies-heal.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-vault-backend': patch +--- + +Added errorHandler() middleware to vault-backend to prevent errors to cause a crash From 9a4613e53486579a52e8f8eec375d9a8e8d6d948 Mon Sep 17 00:00:00 2001 From: Casper Thygesen <73483987+cthtrifork@users.noreply.github.com> Date: Wed, 9 Nov 2022 06:43:09 +0100 Subject: [PATCH 10/34] Improved patch notes Co-authored-by: Philipp Hugenroth Signed-off-by: Casper Thygesen <73483987+cthtrifork@users.noreply.github.com> Signed-off-by: Simon --- .changeset/rude-mayflies-heal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/rude-mayflies-heal.md b/.changeset/rude-mayflies-heal.md index 738ade0f3c..01cbf01e28 100644 --- a/.changeset/rude-mayflies-heal.md +++ b/.changeset/rude-mayflies-heal.md @@ -2,4 +2,4 @@ '@backstage/plugin-vault-backend': patch --- -Added errorHandler() middleware to vault-backend to prevent errors to cause a crash +Added `errorHandler()` middleware to `router` to prevent crashes caused by fatal errors in plugin backend From 30744a518667fcb269631923fcb7e416036db025 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Nov 2022 13:58:37 +0000 Subject: [PATCH 11/34] build(deps): bump loader-utils from 1.4.0 to 1.4.1 in /storybook Bumps [loader-utils](https://github.com/webpack/loader-utils) from 1.4.0 to 1.4.1. - [Release notes](https://github.com/webpack/loader-utils/releases) - [Changelog](https://github.com/webpack/loader-utils/blob/v1.4.1/CHANGELOG.md) - [Commits](https://github.com/webpack/loader-utils/compare/v1.4.0...v1.4.1) --- updated-dependencies: - dependency-name: loader-utils dependency-type: indirect ... Signed-off-by: dependabot[bot] Signed-off-by: Simon --- storybook/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/storybook/yarn.lock b/storybook/yarn.lock index f6b5be55d0..a8c455b7a0 100644 --- a/storybook/yarn.lock +++ b/storybook/yarn.lock @@ -7875,13 +7875,13 @@ __metadata: linkType: hard "loader-utils@npm:^1.1.0, loader-utils@npm:^1.2.3": - version: 1.4.0 - resolution: "loader-utils@npm:1.4.0" + version: 1.4.1 + resolution: "loader-utils@npm:1.4.1" dependencies: big.js: ^5.2.2 emojis-list: ^3.0.0 json5: ^1.0.1 - checksum: d150b15e7a42ac47d935c8b484b79e44ff6ab4c75df7cc4cb9093350cf014ec0b17bdb60c5d6f91a37b8b218bd63b973e263c65944f58ca2573e402b9a27e717 + checksum: ea0b648cba0194e04a90aab6270619f0e35be009e33a443d9e642e93056cd49e6ca4c9678bd1c777a2392551bc5f4d0f24a87f5040608da1274aa84c6eebb502 languageName: node linkType: hard From 0d33bdc4ac21a798ea2d761ebcf3dd8ffc59ec30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arn=C3=BE=C3=B3r=20J=C3=B3nsson?= Date: Wed, 9 Nov 2022 18:42:19 +0100 Subject: [PATCH 12/34] Add optional step to SimpleStepper Signed-off-by: Arnthor Jonsson Signed-off-by: Simon --- .changeset/cyan-seahorses-itch.md | 5 ++++ .../SimpleStepper/SimpleStepper.stories.tsx | 20 +++++++++++++ .../SimpleStepper/SimpleStepper.test.tsx | 28 +++++++++++++++++++ .../SimpleStepper/SimpleStepperFooter.tsx | 27 ++++++++++++++++++ .../src/components/SimpleStepper/types.ts | 5 ++++ 5 files changed, 85 insertions(+) create mode 100644 .changeset/cyan-seahorses-itch.md diff --git a/.changeset/cyan-seahorses-itch.md b/.changeset/cyan-seahorses-itch.md new file mode 100644 index 0000000000..c3ced5ceb7 --- /dev/null +++ b/.changeset/cyan-seahorses-itch.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': minor +--- + +Add optional step to SimpleStepper diff --git a/packages/core-components/src/components/SimpleStepper/SimpleStepper.stories.tsx b/packages/core-components/src/components/SimpleStepper/SimpleStepper.stories.tsx index 2f3f26f23e..aedd5e6b80 100644 --- a/packages/core-components/src/components/SimpleStepper/SimpleStepper.stories.tsx +++ b/packages/core-components/src/components/SimpleStepper/SimpleStepper.stories.tsx @@ -91,3 +91,23 @@ export const CompletionStep = (args: StepperProps) => { }; CompletionStep.args = defaultArgs; + +export const OptionalStep = (args: StepperProps) => { + return ( + + +
This is the content for step 1
+
+ +
This is the content for step 2
+
+
+ ); +}; + +ConditionalButtons.args = defaultArgs; diff --git a/packages/core-components/src/components/SimpleStepper/SimpleStepper.test.tsx b/packages/core-components/src/components/SimpleStepper/SimpleStepper.test.tsx index 5897054ed5..73baff8db2 100644 --- a/packages/core-components/src/components/SimpleStepper/SimpleStepper.test.tsx +++ b/packages/core-components/src/components/SimpleStepper/SimpleStepper.test.tsx @@ -145,4 +145,32 @@ describe('Stepper', () => { expect(rendered.getByText('FinalStepNext')).toBeInTheDocument(); }); + + it('Handles skipStep property', async () => { + const rendered = await renderInTestApp( + + +
step0
+
+ +
step1
+
+ +
step2
+
+ +
step3
+
+
, + ); + + fireEvent.click(getTextInSlide(rendered, 0)('Next') as Node); + expect(rendered.getByText('step1')).toBeInTheDocument(); + + fireEvent.click(getTextInSlide(rendered, 1)('Skip') as Node); + expect(rendered.getByText('step2')).toBeInTheDocument(); + + fireEvent.click(getTextInSlide(rendered, 2)('Back') as Node); + expect(rendered.getByText('step1')).toBeInTheDocument(); + }); }); diff --git a/packages/core-components/src/components/SimpleStepper/SimpleStepperFooter.tsx b/packages/core-components/src/components/SimpleStepper/SimpleStepperFooter.tsx index 5f4bdbf0c6..0f7d604eb0 100644 --- a/packages/core-components/src/components/SimpleStepper/SimpleStepperFooter.tsx +++ b/packages/core-components/src/components/SimpleStepper/SimpleStepperFooter.tsx @@ -45,6 +45,10 @@ interface NextBtnProps extends CommonBtnProps { last?: boolean; stepIndex: number; } +interface SkipBtnProps extends CommonBtnProps { + disabled?: boolean; + stepIndex: number; +} interface BackBtnProps extends CommonBtnProps { disabled?: boolean; stepIndex: number; @@ -71,6 +75,18 @@ const NextBtn = ({ ); +const SkipBtn = ({ text, handleClick, disabled, stepIndex }: SkipBtnProps) => ( + +); + const BackBtn = ({ text, handleClick, disabled, stepIndex }: BackBtnProps) => (