From 8cf1918ad15abc3b6b04688370780c27a32518cc Mon Sep 17 00:00:00 2001 From: Miklos Kiss Date: Thu, 22 Jul 2021 19:10:20 +0200 Subject: [PATCH 01/18] Make objectTypes configurable from app-config.yaml Signed-off-by: Miklos Kiss --- plugins/kubernetes-backend/schema.d.ts | 9 +++++++ .../src/service/KubernetesFanOutHandler.ts | 26 +++++++++---------- .../kubernetes-backend/src/service/router.ts | 10 ++++--- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/plugins/kubernetes-backend/schema.d.ts b/plugins/kubernetes-backend/schema.d.ts index 9d002670b9..8b96d5ceca 100644 --- a/plugins/kubernetes-backend/schema.d.ts +++ b/plugins/kubernetes-backend/schema.d.ts @@ -16,6 +16,15 @@ export interface Config { kubernetes?: { + objectTypes?: Array< + | 'pods' + | 'services' + | 'configmaps' + | 'deployments' + | 'replicasets' + | 'horizontalpodautoscalers' + | 'ingresses' + >; serviceLocatorMethod: { type: 'multiTenant'; }; diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts index 3039560aad..94e84440b6 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts @@ -26,7 +26,7 @@ import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; import { KubernetesAuthTranslator } from '../kubernetes-auth-translator/types'; import { KubernetesAuthTranslatorGenerator } from '../kubernetes-auth-translator/KubernetesAuthTranslatorGenerator'; -const DEFAULT_OBJECTS = new Set([ +const DEFAULT_OBJECTS: KubernetesObjectTypes[] = [ 'pods', 'services', 'configmaps', @@ -34,44 +34,44 @@ const DEFAULT_OBJECTS = new Set([ 'replicasets', 'horizontalpodautoscalers', 'ingresses', -]); +]; export class KubernetesFanOutHandler { private readonly logger: Logger; private readonly fetcher: KubernetesFetcher; private readonly serviceLocator: KubernetesServiceLocator; private readonly customResources: CustomResource[]; + private readonly objectTypesToFetch: KubernetesObjectTypes[]; constructor( logger: Logger, fetcher: KubernetesFetcher, serviceLocator: KubernetesServiceLocator, customResources: CustomResource[], + objectTypesToFetch: KubernetesObjectTypes[] = DEFAULT_OBJECTS, ) { this.logger = logger; this.fetcher = fetcher; this.serviceLocator = serviceLocator; this.customResources = customResources; + this.objectTypesToFetch = objectTypesToFetch; } - async getKubernetesObjectsByEntity( - requestBody: KubernetesRequestBody, - objectTypesToFetch: Set = DEFAULT_OBJECTS, - ) { + async getKubernetesObjectsByEntity(requestBody: KubernetesRequestBody) { const entityName = requestBody.entity?.metadata?.annotations?.[ 'backstage.io/kubernetes-id' ] || requestBody.entity?.metadata?.name; - const clusterDetails: ClusterDetails[] = await this.serviceLocator.getClustersByServiceId( - entityName, - ); + const clusterDetails: ClusterDetails[] = + await this.serviceLocator.getClustersByServiceId(entityName); // Execute all of these async actions simultaneously/without blocking sequentially as no common object is modified by them const promises: Promise[] = clusterDetails.map(cd => { - const kubernetesAuthTranslator: KubernetesAuthTranslator = KubernetesAuthTranslatorGenerator.getKubernetesAuthTranslatorInstance( - cd.authProvider, - ); + const kubernetesAuthTranslator: KubernetesAuthTranslator = + KubernetesAuthTranslatorGenerator.getKubernetesAuthTranslatorInstance( + cd.authProvider, + ); return kubernetesAuthTranslator.decorateClusterDetailsWithAuth( cd, requestBody, @@ -98,7 +98,7 @@ export class KubernetesFanOutHandler { .fetchObjectsForService({ serviceId: entityName, clusterDetails: clusterDetailsItem, - objectTypesToFetch, + objectTypesToFetch: new Set(this.objectTypesToFetch), labelSelector, customResources: this.customResources, }) diff --git a/plugins/kubernetes-backend/src/service/router.ts b/plugins/kubernetes-backend/src/service/router.ts index 984b3f14a0..027faf03ae 100644 --- a/plugins/kubernetes-backend/src/service/router.ts +++ b/plugins/kubernetes-backend/src/service/router.ts @@ -23,6 +23,7 @@ import { MultiTenantServiceLocator } from '../service-locator/MultiTenantService import { ClusterDetails, KubernetesClustersSupplier, + KubernetesObjectTypes, KubernetesServiceLocator, ServiceLocatorMethod, CustomResource, @@ -70,9 +71,8 @@ export const makeRouter = ( const serviceId = req.params.serviceId; const requestBody: KubernetesRequestBody = req.body; try { - const response = await kubernetesFanOutHandler.getKubernetesObjectsByEntity( - requestBody, - ); + const response = + await kubernetesFanOutHandler.getKubernetesObjectsByEntity(requestBody); res.json(response); } catch (e) { logger.error( @@ -133,12 +133,16 @@ export async function createRouter( ); const serviceLocator = getServiceLocator(options.config, clusterDetails); + const objectTypes = options.config.getOptionalStringArray( + 'kubernetes.objectTypes', + ) as KubernetesObjectTypes[]; const kubernetesFanOutHandler = new KubernetesFanOutHandler( logger, fetcher, serviceLocator, customResources, + objectTypes, ); return makeRouter(logger, kubernetesFanOutHandler, clusterDetails); From a0a8d357176c98d68f4d43852ea2943657ee5d8a Mon Sep 17 00:00:00 2001 From: Miklos Kiss Date: Fri, 23 Jul 2021 09:31:33 +0200 Subject: [PATCH 02/18] add changeset Signed-off-by: Miklos Kiss --- .changeset/purple-comics-fold.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/purple-comics-fold.md diff --git a/.changeset/purple-comics-fold.md b/.changeset/purple-comics-fold.md new file mode 100644 index 0000000000..f5e02d64db --- /dev/null +++ b/.changeset/purple-comics-fold.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-backend': patch +--- + +Add configuration option to the kubernetes object types. Config option is under `kubernetes.resources`. Defaults to ['pods', 'services', 'configmaps', 'deployments', 'replicasets', 'horizontalpodautoscalers', 'ingresses'] From 638a376f5360dfe97921b1c822061cd410b108ec Mon Sep 17 00:00:00 2001 From: Miklos Kiss Date: Fri, 23 Jul 2021 10:03:30 +0200 Subject: [PATCH 03/18] use the correct prettier config Signed-off-by: Miklos Kiss --- .../src/service/KubernetesFanOutHandler.ts | 12 ++++++------ plugins/kubernetes-backend/src/service/router.ts | 5 +++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts index 94e84440b6..5e27dac770 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts @@ -63,15 +63,15 @@ export class KubernetesFanOutHandler { 'backstage.io/kubernetes-id' ] || requestBody.entity?.metadata?.name; - const clusterDetails: ClusterDetails[] = - await this.serviceLocator.getClustersByServiceId(entityName); + const clusterDetails: ClusterDetails[] = await this.serviceLocator.getClustersByServiceId( + entityName, + ); // Execute all of these async actions simultaneously/without blocking sequentially as no common object is modified by them const promises: Promise[] = clusterDetails.map(cd => { - const kubernetesAuthTranslator: KubernetesAuthTranslator = - KubernetesAuthTranslatorGenerator.getKubernetesAuthTranslatorInstance( - cd.authProvider, - ); + const kubernetesAuthTranslator: KubernetesAuthTranslator = KubernetesAuthTranslatorGenerator.getKubernetesAuthTranslatorInstance( + cd.authProvider, + ); return kubernetesAuthTranslator.decorateClusterDetailsWithAuth( cd, requestBody, diff --git a/plugins/kubernetes-backend/src/service/router.ts b/plugins/kubernetes-backend/src/service/router.ts index 027faf03ae..13094cf6ed 100644 --- a/plugins/kubernetes-backend/src/service/router.ts +++ b/plugins/kubernetes-backend/src/service/router.ts @@ -71,8 +71,9 @@ export const makeRouter = ( const serviceId = req.params.serviceId; const requestBody: KubernetesRequestBody = req.body; try { - const response = - await kubernetesFanOutHandler.getKubernetesObjectsByEntity(requestBody); + const response = await kubernetesFanOutHandler.getKubernetesObjectsByEntity( + requestBody, + ); res.json(response); } catch (e) { logger.error( From 07410d1e9b4bcaa07c2922dfdaf04810827b41c3 Mon Sep 17 00:00:00 2001 From: Miklos Kiss Date: Tue, 27 Jul 2021 11:38:25 +0200 Subject: [PATCH 04/18] make KubernetesFanOutHandler params an object Signed-off-by: Miklos Kiss --- plugins/kubernetes-backend/src/index.ts | 2 ++ .../src/service/KubernetesFanOutHandler.ts | 24 ++++++++++++------- .../kubernetes-backend/src/service/router.ts | 8 +++---- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/plugins/kubernetes-backend/src/index.ts b/plugins/kubernetes-backend/src/index.ts index 155c4967d5..e5eb5e7c62 100644 --- a/plugins/kubernetes-backend/src/index.ts +++ b/plugins/kubernetes-backend/src/index.ts @@ -16,3 +16,5 @@ export * from './service/router'; export * from './types/types'; + +export { DEFAULT_OBJECTS } from './service/KubernetesFanOutHandler'; diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts index 5e27dac770..0774a015a1 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts @@ -26,7 +26,7 @@ import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; import { KubernetesAuthTranslator } from '../kubernetes-auth-translator/types'; import { KubernetesAuthTranslatorGenerator } from '../kubernetes-auth-translator/KubernetesAuthTranslatorGenerator'; -const DEFAULT_OBJECTS: KubernetesObjectTypes[] = [ +export const DEFAULT_OBJECTS: KubernetesObjectTypes[] = [ 'pods', 'services', 'configmaps', @@ -36,6 +36,14 @@ const DEFAULT_OBJECTS: KubernetesObjectTypes[] = [ 'ingresses', ]; +export interface KubernetesFanOutHandlerOptions { + logger: Logger; + fetcher: KubernetesFetcher; + serviceLocator: KubernetesServiceLocator; + customResources: CustomResource[]; + objectTypesToFetch: KubernetesObjectTypes[]; +} + export class KubernetesFanOutHandler { private readonly logger: Logger; private readonly fetcher: KubernetesFetcher; @@ -43,13 +51,13 @@ export class KubernetesFanOutHandler { private readonly customResources: CustomResource[]; private readonly objectTypesToFetch: KubernetesObjectTypes[]; - constructor( - logger: Logger, - fetcher: KubernetesFetcher, - serviceLocator: KubernetesServiceLocator, - customResources: CustomResource[], - objectTypesToFetch: KubernetesObjectTypes[] = DEFAULT_OBJECTS, - ) { + constructor({ + logger, + fetcher, + serviceLocator, + customResources, + objectTypesToFetch = DEFAULT_OBJECTS, + }: KubernetesFanOutHandlerOptions) { this.logger = logger; this.fetcher = fetcher; this.serviceLocator = serviceLocator; diff --git a/plugins/kubernetes-backend/src/service/router.ts b/plugins/kubernetes-backend/src/service/router.ts index 13094cf6ed..8a1f2fe627 100644 --- a/plugins/kubernetes-backend/src/service/router.ts +++ b/plugins/kubernetes-backend/src/service/router.ts @@ -134,17 +134,17 @@ export async function createRouter( ); const serviceLocator = getServiceLocator(options.config, clusterDetails); - const objectTypes = options.config.getOptionalStringArray( + const objectTypesToFetch = options.config.getOptionalStringArray( 'kubernetes.objectTypes', ) as KubernetesObjectTypes[]; - const kubernetesFanOutHandler = new KubernetesFanOutHandler( + const kubernetesFanOutHandler = new KubernetesFanOutHandler({ logger, fetcher, serviceLocator, customResources, - objectTypes, - ); + objectTypesToFetch, + }); return makeRouter(logger, kubernetesFanOutHandler, clusterDetails); } From 1401985eb1a64e3b3bf072cf81f6b89c12e6bc93 Mon Sep 17 00:00:00 2001 From: Mike Lewis Date: Thu, 29 Jul 2021 10:14:51 +0100 Subject: [PATCH 05/18] Update version of ws in yarn.lock to fix Snyk error Signed-off-by: Mike Lewis --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index d0dfbe3c0f..661daf4126 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26572,9 +26572,9 @@ ws@7.4.5: integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== ws@^5.2.0: - version "5.2.2" - resolved "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + version "5.2.3" + resolved "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" + integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== dependencies: async-limiter "~1.0.0" @@ -26584,9 +26584,9 @@ ws@^5.2.0: integrity sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw== ws@^6.1.2, ws@^6.2.1: - version "6.2.1" - resolved "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + version "6.2.2" + resolved "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" + integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== dependencies: async-limiter "~1.0.0" From b1369cfa93f749dc00d8dd91af720f060c1001d1 Mon Sep 17 00:00:00 2001 From: Mike Lewis Date: Thu, 29 Jul 2021 12:08:30 +0100 Subject: [PATCH 06/18] Use resolution to force ws@7.4.6 inside url-loader Fixes Snyk warning by avoiding v7.4.5 of ws. https://snyk.io/vuln/SNYK-JS-WS-1296835 Signed-off-by: Mike Lewis --- package.json | 1 + yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 93517d3374..04177f798e 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ ] }, "resolutions": { + "**/@graphql-tools/url-loader/**/ws": "^7.4.6", "**/@roadiehq/**/@backstage/core": "*", "**/@roadiehq/**/@backstage/plugin-catalog": "*", "**/@roadiehq/**/@backstage/catalog-model": "*", diff --git a/yarn.lock b/yarn.lock index 661daf4126..981907d84d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26566,10 +26566,10 @@ write-pkg@^4.0.0: type-fest "^0.4.1" write-json-file "^3.2.0" -ws@7.4.5: - version "7.4.5" - resolved "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" - integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== +ws@7.4.5, ws@^7.4.6: + version "7.5.3" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" + integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== ws@^5.2.0: version "5.2.3" From 6fa92ba6910da4cf751991d11591080e835b079d Mon Sep 17 00:00:00 2001 From: Mike Lewis Date: Thu, 29 Jul 2021 14:10:20 +0100 Subject: [PATCH 07/18] Switch to referencing @graphql-codegen/cli in ws resolution Signed-off-by: Mike Lewis --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 04177f798e..ea1cf0c9b4 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ ] }, "resolutions": { - "**/@graphql-tools/url-loader/**/ws": "^7.4.6", + "**/@graphql-codegen/cli/**/ws": "^7.4.6", "**/@roadiehq/**/@backstage/core": "*", "**/@roadiehq/**/@backstage/plugin-catalog": "*", "**/@roadiehq/**/@backstage/catalog-model": "*", From fa6c6e07253ddf2c72710fc2f9c7a82c58b62907 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Thu, 29 Jul 2021 17:00:40 +0200 Subject: [PATCH 08/18] Adjust docs navigation background color for smaller screens Signed-off-by: Philipp Hugenroth --- microsite/static/css/custom.css | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/microsite/static/css/custom.css b/microsite/static/css/custom.css index 2c8b46ff00..ab70be3197 100644 --- a/microsite/static/css/custom.css +++ b/microsite/static/css/custom.css @@ -288,6 +288,16 @@ td { .tocToggler { display: none; } + + .docsSliderActive .toc section .navGroups{ + padding-top: 0; + padding-bottom: 0; + } + + .docsSliderActive.docsNavContainer{ + background-color: #121212; + padding-bottom: 0; + } } /* content */ From 0e03b840310826d9021536d3b17e46c2de534f8e Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Thu, 29 Jul 2021 17:14:02 +0200 Subject: [PATCH 09/18] Fix formatting issue Signed-off-by: Philipp Hugenroth --- microsite/static/css/custom.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/microsite/static/css/custom.css b/microsite/static/css/custom.css index ab70be3197..393a5af118 100644 --- a/microsite/static/css/custom.css +++ b/microsite/static/css/custom.css @@ -289,12 +289,12 @@ td { display: none; } - .docsSliderActive .toc section .navGroups{ + .docsSliderActive .toc section .navGroups { padding-top: 0; padding-bottom: 0; } - .docsSliderActive.docsNavContainer{ + .docsSliderActive.docsNavContainer { background-color: #121212; padding-bottom: 0; } From 6cf48c609835299360bcc0c60f66a9bf85a7f20e Mon Sep 17 00:00:00 2001 From: Andrew Ellis Date: Thu, 29 Jul 2021 15:28:07 -0600 Subject: [PATCH 10/18] feat(plugin-scaffolder-backend): add defaultCommitMessage config option Signed-off-by: Andrew Ellis --- .changeset/soft-news-float.md | 5 ++ app-config.yaml | 2 + plugins/scaffolder-backend/config.d.ts | 4 ++ .../src/scaffolder/actions/builtin/helpers.ts | 4 +- .../actions/builtin/publish/azure.test.ts | 38 +++++++++++ .../actions/builtin/publish/azure.ts | 3 + .../actions/builtin/publish/bitbucket.test.ts | 68 +++++++++++++++++++ .../actions/builtin/publish/bitbucket.ts | 3 + .../actions/builtin/publish/github.test.ts | 45 ++++++++++++ .../actions/builtin/publish/github.ts | 3 + .../actions/builtin/publish/gitlab.test.ts | 46 +++++++++++++ .../actions/builtin/publish/gitlab.ts | 3 + 12 files changed, 223 insertions(+), 1 deletion(-) create mode 100644 .changeset/soft-news-float.md diff --git a/.changeset/soft-news-float.md b/.changeset/soft-news-float.md new file mode 100644 index 0000000000..ae79c63a06 --- /dev/null +++ b/.changeset/soft-news-float.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': minor +--- + +Add the `scaffolder.defaultCommitMessage`, which defaults to `Initial commit`, so it can be customized. diff --git a/app-config.yaml b/app-config.yaml index 074e28c086..f2df97b7b2 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -256,6 +256,8 @@ scaffolder: # defaultAuthor: # name: Scaffolder # email: scaffolder@backstage.io + # Use to customize the default commit message when new components are created + # defaultCommitMessage: 'Initial commit' github: token: ${GITHUB_TOKEN} visibility: public # or 'internal' or 'private' diff --git a/plugins/scaffolder-backend/config.d.ts b/plugins/scaffolder-backend/config.d.ts index 795fe5b112..126c55e166 100644 --- a/plugins/scaffolder-backend/config.d.ts +++ b/plugins/scaffolder-backend/config.d.ts @@ -24,6 +24,10 @@ export interface Config { name?: string; email?: string; }; + /** + * The commit message used when new components are created. + */ + defaultCommitMessage?: string; github?: { [key: string]: string; /** diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts index e2459a8ca7..7a10046fd0 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts @@ -62,6 +62,7 @@ export async function initRepoAndPush({ auth, logger, defaultBranch = 'master', + commitMessage = 'Initial commit', gitAuthorInfo, }: { dir: string; @@ -69,6 +70,7 @@ export async function initRepoAndPush({ auth: { username: string; password: string }; logger: Logger; defaultBranch?: string; + commitMessage?: string; gitAuthorInfo?: { name?: string; email?: string }; }): Promise { const git = Git.fromAuth({ @@ -100,7 +102,7 @@ export async function initRepoAndPush({ await git.commit({ dir, - message: 'Initial commit', + message: commitMessage, author: authorInfo, committer: authorInfo, }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.test.ts index 30995dee38..a242863ac7 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.test.ts @@ -233,6 +233,44 @@ describe('publish:azure', () => { }); }); + it('should call initRepoAndPush with the configured defaultCommitMessage', async () => { + const customAuthorConfig = new ConfigReader({ + integrations: { + azure: [ + { host: 'dev.azure.com', token: 'tokenlols' }, + { host: 'myazurehostnotoken.com' }, + ], + }, + scaffolder: { + defaultCommitMessage: 'Test commit message', + }, + }); + + const customAuthorIntegrations = ScmIntegrations.fromConfig( + customAuthorConfig, + ); + const customAuthorAction = createPublishAzureAction({ + integrations: customAuthorIntegrations, + config: customAuthorConfig, + }); + + mockGitClient.createRepository.mockImplementation(() => ({ + remoteUrl: 'https://dev.azure.com/organization/project/_git/repo', + })); + + await customAuthorAction.handler(mockContext); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'https://dev.azure.com/organization/project/_git/repo', + auth: { username: 'notempty', password: 'tokenlols' }, + logger: mockContext.logger, + defaultBranch: 'master', + commitMessage: 'Test commit message', + gitAuthorInfo: { email: undefined, name: undefined }, + }); + }); + it('should call output with the remoteUrl and the repoContentsUrl', async () => { mockGitClient.createRepository.mockImplementation(() => ({ remoteUrl: 'https://dev.azure.com/organization/project/_git/repo', diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.ts index c58dd69424..f5c7879fa9 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/azure.ts @@ -139,6 +139,9 @@ export function createPublishAzureAction(options: { password: integrationConfig.config.token, }, logger: ctx.logger, + commitMessage: config.getOptionalString( + 'scaffolder.defaultCommitMessage', + ), gitAuthorInfo, }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucket.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucket.test.ts index 9fe245935b..ebdd28260c 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucket.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucket.test.ts @@ -407,6 +407,74 @@ describe('publish:bitbucket', () => { }); }); + it('should call initAndPush with the configured defaultCommitMessage', async () => { + const customAuthorConfig = new ConfigReader({ + integrations: { + bitbucket: [ + { + host: 'bitbucket.org', + token: 'tokenlols', + }, + { + host: 'hosted.bitbucket.com', + token: 'thing', + apiBaseUrl: 'https://hosted.bitbucket.com/rest/api/1.0', + }, + { + host: 'notoken.bitbucket.com', + }, + ], + }, + scaffolder: { + defaultCommitMessage: 'Test commit message', + }, + }); + + const customAuthorIntegrations = ScmIntegrations.fromConfig( + customAuthorConfig, + ); + const customAuthorAction = createPublishBitbucketAction({ + integrations: customAuthorIntegrations, + config: customAuthorConfig, + }); + + server.use( + rest.post( + 'https://api.bitbucket.org/2.0/repositories/owner/repo', + (_, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json({ + links: { + html: { + href: 'https://bitbucket.org/owner/repo', + }, + clone: [ + { + name: 'https', + href: 'https://bitbucket.org/owner/cloneurl', + }, + ], + }, + }), + ), + ), + ); + + await customAuthorAction.handler(mockContext); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'https://bitbucket.org/owner/cloneurl', + auth: { username: 'x-token-auth', password: 'tokenlols' }, + logger: mockContext.logger, + defaultBranch: 'master', + commitMessage: 'Test commit message', + gitAuthorInfo: { email: undefined, name: undefined }, + }); + }); + it('should call outputs with the correct urls', async () => { server.use( rest.post( diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucket.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucket.ts index ffd2e4d6a7..41d71c9ab5 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucket.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucket.ts @@ -304,6 +304,9 @@ export function createPublishBitbucketAction(options: { }, defaultBranch, logger: ctx.logger, + commitMessage: config.getOptionalString( + 'scaffolder.defaultCommitMessage', + ), gitAuthorInfo, }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.test.ts index f0725d6e8e..173e44848b 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.test.ts @@ -260,6 +260,51 @@ describe('publish:github', () => { }); }); + it('should call initRepoAndPush with the configured defaultCommitMessage', async () => { + const customAuthorConfig = new ConfigReader({ + integrations: { + github: [ + { host: 'github.com', token: 'tokenlols' }, + { host: 'ghe.github.com' }, + ], + }, + scaffolder: { + defaultCommitMessage: 'Test commit message', + }, + }); + + const customAuthorIntegrations = ScmIntegrations.fromConfig( + customAuthorConfig, + ); + const customAuthorAction = createPublishGithubAction({ + integrations: customAuthorIntegrations, + config: customAuthorConfig, + }); + + mockGithubClient.users.getByUsername.mockResolvedValue({ + data: { type: 'User' }, + }); + + mockGithubClient.repos.createForAuthenticatedUser.mockResolvedValue({ + data: { + clone_url: 'https://github.com/clone/url.git', + html_url: 'https://github.com/html/url', + }, + }); + + await customAuthorAction.handler(mockContext); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'https://github.com/clone/url.git', + defaultBranch: 'master', + auth: { username: 'x-access-token', password: 'tokenlols' }, + logger: mockContext.logger, + commitMessage: 'Test commit message', + gitAuthorInfo: { email: undefined, name: undefined }, + }); + }); + it('should add access for the team when it starts with the owner', async () => { mockGithubClient.users.getByUsername.mockResolvedValue({ data: { type: 'User' }, diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.ts index 05301bda85..640ae5dfe5 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/github.ts @@ -264,6 +264,9 @@ export function createPublishGithubAction(options: { password: token, }, logger: ctx.logger, + commitMessage: config.getOptionalString( + 'scaffolder.defaultCommitMessage', + ), gitAuthorInfo, }); 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 5150205a08..d76f838797 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 @@ -219,6 +219,52 @@ describe('publish:gitlab', () => { }); }); + it('should call initRepoAndPush with the configured defaultCommitMessage', async () => { + const customAuthorConfig = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'gitlab.com', + token: 'tokenlols', + apiBaseUrl: 'https://api.gitlab.com', + }, + { + host: 'hosted.gitlab.com', + apiBaseUrl: 'https://api.hosted.gitlab.com', + }, + ], + }, + scaffolder: { + defaultCommitMessage: 'Test commit message', + }, + }); + + const customAuthorIntegrations = ScmIntegrations.fromConfig( + customAuthorConfig, + ); + const customAuthorAction = createPublishGitlabAction({ + integrations: customAuthorIntegrations, + config: customAuthorConfig, + }); + + mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); + mockGitlabClient.Projects.create.mockResolvedValue({ + http_url_to_repo: 'http://mockurl.git', + }); + + await customAuthorAction.handler(mockContext); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'http://mockurl.git', + auth: { username: 'oauth2', password: 'tokenlols' }, + logger: mockContext.logger, + defaultBranch: 'master', + commitMessage: 'Test commit message', + gitAuthorInfo: { email: undefined, name: undefined }, + }); + }); + it('should call output with the remoteUrl and repoContentsUrl', async () => { mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); mockGitlabClient.Projects.create.mockResolvedValue({ 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 b99d40b1f7..fbd2dcaaae 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts @@ -137,6 +137,9 @@ export function createPublishGitlabAction(options: { password: integrationConfig.config.token, }, logger: ctx.logger, + commitMessage: config.getOptionalString( + 'scaffolder.defaultCommitMessage', + ), gitAuthorInfo, }); From 7bbd7820691bf03c29f92b10f9093472a97fef10 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Jul 2021 04:15:39 +0000 Subject: [PATCH 11/18] chore(deps): bump @google-cloud/storage from 5.8.5 to 5.11.0 Bumps [@google-cloud/storage](https://github.com/googleapis/nodejs-storage) from 5.8.5 to 5.11.0. - [Release notes](https://github.com/googleapis/nodejs-storage/releases) - [Changelog](https://github.com/googleapis/nodejs-storage/blob/master/CHANGELOG.md) - [Commits](https://github.com/googleapis/nodejs-storage/compare/v5.8.5...v5.11.0) --- updated-dependencies: - dependency-name: "@google-cloud/storage" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- yarn.lock | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/yarn.lock b/yarn.lock index e5d2ebabfe..4c32ab6f02 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1993,10 +1993,10 @@ retry-request "^4.0.0" teeny-request "^3.11.3" -"@google-cloud/common@^3.6.0": - version "3.6.0" - resolved "https://registry.npmjs.org/@google-cloud/common/-/common-3.6.0.tgz#c2f6da5f79279a4a9ac7c71fc02d582beab98e8b" - integrity sha512-aHIFTqJZmeTNO9md8XxV+ywuvXF3xBm5WNmgWeeCK+XN5X+kGW0WEX94wGwj+/MdOnrVf4dL2RvSIt9J5yJG6Q== +"@google-cloud/common@^3.7.0": + version "3.7.0" + resolved "https://registry.npmjs.org/@google-cloud/common/-/common-3.7.0.tgz#ee3fba75aeaa614978aebf8740380670026592aa" + integrity sha512-oFgpKLjH9JTOAyQd3kB36iSuH8wNSpDKb1TywlB6zcsG0xmJFxLutmfPhz03KUxRMNQOZ1K1Gc9BYvJifVnGVA== dependencies: "@google-cloud/projectify" "^2.0.0" "@google-cloud/promisify" "^2.0.0" @@ -2005,7 +2005,7 @@ ent "^2.2.0" extend "^3.0.2" google-auth-library "^7.0.2" - retry-request "^4.1.1" + retry-request "^4.2.2" teeny-request "^7.0.0" "@google-cloud/container@^2.2.0": @@ -2081,11 +2081,11 @@ xdg-basedir "^3.0.0" "@google-cloud/storage@^5.6.0", "@google-cloud/storage@^5.8.0": - version "5.8.5" - resolved "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.8.5.tgz#2cf1e2e0ef8ca552abc4450301fef3fea4900ef6" - integrity sha512-i0gB9CRwQeOBYP7xuvn14M40LhHCwMjceBjxE4CTvsqL519sVY5yVKxLiAedHWGwUZHJNRa7Q2CmNfkdRwVNPg== + version "5.11.0" + resolved "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.11.0.tgz#f2414358f093034410bb03410176a5dcabc7bdf8" + integrity sha512-UgdAwBelXpQhubYOHw0U/hDxCXIXFT2TqDc0JWUxtg+BeePZC0ohoFM/b/tJffE28AZW0urTQax5xbRNoDA1Sw== dependencies: - "@google-cloud/common" "^3.6.0" + "@google-cloud/common" "^3.7.0" "@google-cloud/paginator" "^3.0.0" "@google-cloud/promisify" "^2.0.0" arrify "^2.0.0" @@ -2094,8 +2094,7 @@ date-and-time "^1.0.0" duplexify "^4.0.0" extend "^3.0.2" - gaxios "^4.0.0" - gcs-resumable-upload "^3.1.4" + gcs-resumable-upload "^3.3.0" get-stream "^6.0.0" hash-stream-validation "^0.2.2" mime "^2.2.0" @@ -13677,10 +13676,10 @@ gcs-resumable-upload@^1.0.0: pumpify "^1.5.1" stream-events "^1.0.4" -gcs-resumable-upload@^3.1.4: - version "3.1.4" - resolved "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-3.1.4.tgz#2e591889efb02247af26868de300b398346b17b5" - integrity sha512-5dyDfHrrVcIskiw/cPssVD4HRiwoHjhk1Nd6h5W3pQ/qffDvhfy4oNCr1f3ZXFPwTnxkCbibsB+73oOM+NvmJQ== +gcs-resumable-upload@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-3.3.0.tgz#d1a866173f9b47e045d4406cafaa658dbb01e624" + integrity sha512-MQKWi+9hOSTyg5/SI1NBW4gAjL1wlkoevHefvr1PCBBXH4uKYLsug5qRrcotWKolDPLfWS51cWaHRN0CTtQNZw== dependencies: abort-controller "^3.0.0" configstore "^5.0.0" @@ -22903,13 +22902,21 @@ ret@~0.1.10: resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -retry-request@^4.0.0, retry-request@^4.1.1: +retry-request@^4.0.0: version "4.1.3" resolved "https://registry.npmjs.org/retry-request/-/retry-request-4.1.3.tgz#d5f74daf261372cff58d08b0a1979b4d7cab0fde" integrity sha512-QnRZUpuPNgX0+D1xVxul6DbJ9slvo4Rm6iV/dn63e048MvGbUZiKySVt6Tenp04JqmchxjiLltGerOJys7kJYQ== dependencies: debug "^4.1.1" +retry-request@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz#b7d82210b6d2651ed249ba3497f07ea602f1a903" + integrity sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg== + dependencies: + debug "^4.1.1" + extend "^3.0.2" + retry@0.12.0, retry@^0.12.0: version "0.12.0" resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" From 903b7db70a40516c6cdf5a867f2bdfcaf295a736 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Jul 2021 04:17:48 +0000 Subject: [PATCH 12/18] chore(deps): bump circleci-api from 4.1.3 to 4.1.4 Bumps [circleci-api](https://github.com/worldturtlemedia/circleci-api) from 4.1.3 to 4.1.4. - [Release notes](https://github.com/worldturtlemedia/circleci-api/releases) - [Commits](https://github.com/worldturtlemedia/circleci-api/compare/v4.1.3...v4.1.4) --- updated-dependencies: - dependency-name: circleci-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- yarn.lock | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/yarn.lock b/yarn.lock index e5d2ebabfe..89aed008c2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8150,13 +8150,6 @@ axe-core@^4.2.0: resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.3.1.tgz#0c6a076e4a1c3e0544ba6a9479158f9be7a7928e" integrity sha512-3WVgVPs/7OnKU3s+lqMtkv3wQlg3WxK1YifmpJSDO0E1aPBrZWlrrTO6cxRqCXLuX2aYgCljqXIQd0VnRidV0g== -axios@^0.20.0: - version "0.20.0" - resolved "https://registry.npmjs.org/axios/-/axios-0.20.0.tgz#057ba30f04884694993a8cd07fa394cff11c50bd" - integrity sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA== - dependencies: - follow-redirects "^1.10.0" - axios@^0.21.1: version "0.21.1" resolved "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" @@ -9568,11 +9561,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: safe-buffer "^5.0.1" circleci-api@^4.0.0: - version "4.1.3" - resolved "https://registry.npmjs.org/circleci-api/-/circleci-api-4.1.3.tgz#cafd80bc1905c6064724636741b4b5b231ed34d0" - integrity sha512-Km6H8LB3nNbFUjErhI+sNQrcHcU7dCBnQEi4ckBtQMkCXh+2gDvaYchfkeuIaA1hkakQT5sLmdPbYzhKbvsOMg== + version "4.1.4" + resolved "https://registry.npmjs.org/circleci-api/-/circleci-api-4.1.4.tgz#6880a28eb021879d81789b50996640dc6373c5ad" + integrity sha512-49F0P2mhmfqYzJR/V4+oM+1SfI/VjKPcurvkzuuawNqgW5Eo00ZufgpHgdT+qRrvRymk6yt45bWOIP/f0FKhJA== dependencies: - axios "^0.20.0" + axios "^0.21.1" cjs-module-lexer@^0.6.0: version "0.6.0" From 2e2a77813d774ed2f2f66413bb59157f5d9b01c3 Mon Sep 17 00:00:00 2001 From: blam Date: Fri, 30 Jul 2021 11:21:02 +0200 Subject: [PATCH 13/18] chore: update changeset Signed-off-by: blam --- .changeset/soft-news-float.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/soft-news-float.md b/.changeset/soft-news-float.md index ae79c63a06..03eaf792c7 100644 --- a/.changeset/soft-news-float.md +++ b/.changeset/soft-news-float.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-scaffolder-backend': minor +'@backstage/plugin-scaffolder-backend': patch --- Add the `scaffolder.defaultCommitMessage`, which defaults to `Initial commit`, so it can be customized. From 7b46caff47ce9fc90d2c4a385402bc5563c10669 Mon Sep 17 00:00:00 2001 From: Miklos Kiss Date: Fri, 30 Jul 2021 12:08:28 +0200 Subject: [PATCH 14/18] use object as params Signed-off-by: Miklos Kiss --- .../service/KubernetesFanOutHandler.test.ts | 48 +++++++++---------- .../src/service/KubernetesFanOutHandler.ts | 2 +- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts index 666b441226..a867efaaee 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts @@ -129,16 +129,16 @@ describe('handleGetKubernetesObjectsForService', () => { mockFetch(fetchObjectsForService); - const sut = new KubernetesFanOutHandler( - getVoidLogger(), - { + const sut = new KubernetesFanOutHandler({ + logger: getVoidLogger(), + fetcher: { fetchObjectsForService, }, - { + serviceLocator: { getClustersByServiceId, }, - [], - ); + customResources: [], + }); const result = await sut.getKubernetesObjectsByEntity({ entity: { @@ -221,16 +221,16 @@ describe('handleGetKubernetesObjectsForService', () => { mockFetch(fetchObjectsForService); - const sut = new KubernetesFanOutHandler( - getVoidLogger(), - { + const sut = new KubernetesFanOutHandler({ + logger: getVoidLogger(), + fetcher: { fetchObjectsForService, }, - { + serviceLocator: { getClustersByServiceId, }, - [], - ); + customResources: [], + }); const result = await sut.getKubernetesObjectsByEntity({ auth: { @@ -357,16 +357,16 @@ describe('handleGetKubernetesObjectsForService', () => { mockFetch(fetchObjectsForService); - const sut = new KubernetesFanOutHandler( - getVoidLogger(), - { + const sut = new KubernetesFanOutHandler({ + logger: getVoidLogger(), + fetcher: { fetchObjectsForService, }, - { + serviceLocator: { getClustersByServiceId, }, - [], - ); + customResources: [], + }); const result = await sut.getKubernetesObjectsByEntity({ auth: { @@ -497,16 +497,16 @@ describe('handleGetKubernetesObjectsForService', () => { mockFetch(fetchObjectsForService); - const sut = new KubernetesFanOutHandler( - getVoidLogger(), - { + const sut = new KubernetesFanOutHandler({ + logger: getVoidLogger(), + fetcher: { fetchObjectsForService, }, - { + serviceLocator: { getClustersByServiceId, }, - [], - ); + customResources: [], + }); const result = await sut.getKubernetesObjectsByEntity({ auth: { diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts index 0774a015a1..0931d775d3 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts @@ -41,7 +41,7 @@ export interface KubernetesFanOutHandlerOptions { fetcher: KubernetesFetcher; serviceLocator: KubernetesServiceLocator; customResources: CustomResource[]; - objectTypesToFetch: KubernetesObjectTypes[]; + objectTypesToFetch?: KubernetesObjectTypes[]; } export class KubernetesFanOutHandler { From 12174412923256ac9dc39c8f2b358cb4f1b75229 Mon Sep 17 00:00:00 2001 From: Miklos Kiss Date: Fri, 30 Jul 2021 12:28:30 +0200 Subject: [PATCH 15/18] update api-report Signed-off-by: Miklos Kiss --- plugins/kubernetes-backend/api-report.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/kubernetes-backend/api-report.md b/plugins/kubernetes-backend/api-report.md index 72d80050d8..899f1fff00 100644 --- a/plugins/kubernetes-backend/api-report.md +++ b/plugins/kubernetes-backend/api-report.md @@ -51,6 +51,11 @@ export interface CustomResource { plural: string; } +// Warning: (ae-missing-release-tag) "DEFAULT_OBJECTS" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const DEFAULT_OBJECTS: KubernetesObjectTypes[]; + // Warning: (ae-missing-release-tag) "FetchResponseWrapper" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) From c189c5da5d58d2fa40bdef8c4bd67dc5691cf9ee Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 30 Jul 2021 12:47:17 +0200 Subject: [PATCH 16/18] chore: fix typo in EntityPage Signed-off-by: Himanshu Mishra --- .changeset/fluffy-cats-approve.md | 5 +++++ .../packages/app/src/components/catalog/EntityPage.tsx | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/fluffy-cats-approve.md diff --git a/.changeset/fluffy-cats-approve.md b/.changeset/fluffy-cats-approve.md new file mode 100644 index 0000000000..dff0972249 --- /dev/null +++ b/.changeset/fluffy-cats-approve.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +fix typo in the comments of EntityPage component diff --git a/packages/create-app/templates/default-app/packages/app/src/components/catalog/EntityPage.tsx b/packages/create-app/templates/default-app/packages/app/src/components/catalog/EntityPage.tsx index 2074a2712c..252b538f4e 100644 --- a/packages/create-app/templates/default-app/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/create-app/templates/default-app/packages/app/src/components/catalog/EntityPage.tsx @@ -160,7 +160,7 @@ const websiteEntityPage = ( /** * NOTE: This page is designed to work on small screens such as mobile devices. * This is based on Material UI Grid. If breakpoints are used, each grid item must set the `xs` prop to a column size or to `true`, - * since this does not default. If no breakpoints are used, the items will equitably share the asvailable space. + * since this does not default. If no breakpoints are used, the items will equitably share the available space. * https://material-ui.com/components/grid/#basic-grid. */ From 6aa7c3db74d0abc414ec6d07c9c0bcfea4c8c9b7 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 30 Jul 2021 15:13:41 +0200 Subject: [PATCH 17/18] chore: bump node-tar version Signed-off-by: Himanshu Mishra --- .changeset/calm-elephants-kiss.md | 6 ++++++ packages/backend-common/package.json | 2 +- packages/cli/package.json | 2 +- yarn.lock | 8 ++++---- 4 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 .changeset/calm-elephants-kiss.md diff --git a/.changeset/calm-elephants-kiss.md b/.changeset/calm-elephants-kiss.md new file mode 100644 index 0000000000..063ff00e26 --- /dev/null +++ b/.changeset/calm-elephants-kiss.md @@ -0,0 +1,6 @@ +--- +'@backstage/backend-common': patch +'@backstage/cli': patch +--- + +bump node-tar version to the latest diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index 51ef8128e7..3f08b42aab 100644 --- a/packages/backend-common/package.json +++ b/packages/backend-common/package.json @@ -62,7 +62,7 @@ "raw-body": "^2.4.1", "selfsigned": "^1.10.7", "stoppable": "^1.1.0", - "tar": "^6.0.5", + "tar": "^6.1.2", "unzipper": "^0.10.11", "winston": "^3.2.1", "yn": "^4.0.0" diff --git a/packages/cli/package.json b/packages/cli/package.json index 91bb94d43b..254a60c9ca 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -104,7 +104,7 @@ "start-server-webpack-plugin": "^2.2.5", "style-loader": "^1.2.1", "sucrase": "^3.18.2", - "tar": "^6.0.1", + "tar": "^6.1.2", "terser-webpack-plugin": "^1.4.3", "ts-loader": "^8.0.17", "typescript": "^4.0.3", diff --git a/yarn.lock b/yarn.lock index 1be3dedc16..1fb6904c58 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24737,10 +24737,10 @@ tar@^4, tar@^4.4.12, tar@^4.4.2: safe-buffer "^5.1.2" yallist "^3.0.3" -tar@^6.0.1, tar@^6.0.2, tar@^6.0.5, tar@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" - integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== +tar@^6.0.2, tar@^6.1.0, tar@^6.1.2: + version "6.1.2" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.2.tgz#1f045a90a6eb23557a603595f41a16c57d47adc6" + integrity sha512-EwKEgqJ7nJoS+s8QfLYVGMDmAsj+StbI2AM/RTHeUSsOw6Z8bwNBRv5z3CY0m7laC5qUAqruLX5AhMuc5deY3Q== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" From 91af01aea5f56d220c5def6e26165cbd9d874c51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Aug 2021 04:16:44 +0000 Subject: [PATCH 18/18] chore(deps-dev): bump @graphql-codegen/typescript from 1.22.2 to 1.23.0 Bumps [@graphql-codegen/typescript](https://github.com/dotansimha/graphql-code-generator/tree/HEAD/packages/plugins/typescript/typescript) from 1.22.2 to 1.23.0. - [Release notes](https://github.com/dotansimha/graphql-code-generator/releases) - [Changelog](https://github.com/dotansimha/graphql-code-generator/blob/master/packages/plugins/typescript/typescript/CHANGELOG.md) - [Commits](https://github.com/dotansimha/graphql-code-generator/commits/@graphql-codegen/typescript@1.23.0/packages/plugins/typescript/typescript) --- updated-dependencies: - dependency-name: "@graphql-codegen/typescript" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- yarn.lock | 43 ++++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1fb6904c58..b74316d89d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2171,16 +2171,16 @@ "@graphql-tools/utils" "^7.9.1" tslib "~2.2.0" -"@graphql-codegen/plugin-helpers@^1.18.7": - version "1.18.7" - resolved "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-1.18.7.tgz#465af3e5b02de89e49ddc76ad2546b880fe240f2" - integrity sha512-8ICOrXlsvyL1dpVz8C9b7H31d4DJpDd75WfjMn6Xjqz81Ah8xDn1Bi+7YXRCCILCBmvI94k6fi8qpsIVhFBBjQ== +"@graphql-codegen/plugin-helpers@^1.18.7", "@graphql-codegen/plugin-helpers@^1.18.8": + version "1.18.8" + resolved "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-1.18.8.tgz#39aac745b9e22e28c781cc07cf74836896a3a905" + integrity sha512-mb4I9j9lMGqvGggYuZ0CV+Hme08nar68xkpPbAVotg/ZBmlhZIok/HqW2BcMQi7Rj+Il5HQMeQ1wQ1M7sv/TlQ== dependencies: "@graphql-tools/utils" "^7.9.1" common-tags "1.8.0" - import-from "3.0.0" + import-from "4.0.0" lodash "~4.17.0" - tslib "~2.2.0" + tslib "~2.3.0" "@graphql-codegen/typescript-resolvers@^1.17.7": version "1.19.3" @@ -2195,12 +2195,12 @@ tslib "~2.3.0" "@graphql-codegen/typescript@^1.17.7", "@graphql-codegen/typescript@^1.22.2": - version "1.22.2" - resolved "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-1.22.2.tgz#e0a1926ed8f81d10fcf64911d08d19d57dea94b1" - integrity sha512-M+gJVHnpWanCTrSqzh+jNyJ6HhDICFzWV3SVcns5LX1X4NC/7N+TvYLk9ZzRSpBYCkWWGmTPrZNd0zjwhroRTg== + version "1.23.0" + resolved "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-1.23.0.tgz#48a5372bcbe81a442c71c1bb032c312c6586a59a" + integrity sha512-ZfFgk5mGfuOy4kEpy+dcuvJMphigMfJ4AkiP1qWmWFufDW3Sg2yayTSNmzeFdcXMrWGgfNW2dKtuuTmbmQhS5g== dependencies: - "@graphql-codegen/plugin-helpers" "^1.18.7" - "@graphql-codegen/visitor-plugin-common" "1.21.1" + "@graphql-codegen/plugin-helpers" "^1.18.8" + "@graphql-codegen/visitor-plugin-common" "1.22.0" auto-bind "~4.0.0" tslib "~2.3.0" @@ -2220,6 +2220,22 @@ parse-filepath "^1.0.2" tslib "~2.3.0" +"@graphql-codegen/visitor-plugin-common@1.22.0": + version "1.22.0" + resolved "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-1.22.0.tgz#75fc8b580143bccbec411eb92d5fef715ed22e42" + integrity sha512-2afJGb6d8iuZl9KizYsexPwraEKO1lAvt5eVHNM5Xew4vwz/AUHeqDR2uOeQgVV+27EzjjzSDd47IEdH0dLC2w== + dependencies: + "@graphql-codegen/plugin-helpers" "^1.18.8" + "@graphql-tools/optimize" "^1.0.1" + "@graphql-tools/relay-operation-optimizer" "^6.3.0" + array.prototype.flatmap "^1.2.4" + auto-bind "~4.0.0" + change-case-all "1.0.14" + dependency-graph "^0.11.0" + graphql-tag "^2.11.0" + parse-filepath "^1.0.2" + tslib "~2.3.0" + "@graphql-modules/core@^0.7.17": version "0.7.17" resolved "https://registry.npmjs.org/@graphql-modules/core/-/core-0.7.17.tgz#ae9bbf44894509664bc0b6fcdd9b6cf3d99bcd00" @@ -15090,6 +15106,11 @@ import-from@3.0.0, import-from@^3.0.0: dependencies: resolve-from "^5.0.0" +import-from@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz#2710b8d66817d232e16f4166e319248d3d5492e2" + integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ== + import-from@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1"