diff --git a/docs/plugins/url-reader.md b/docs/plugins/url-reader.md index c551cdc086..9fab0482bb 100644 --- a/docs/plugins/url-reader.md +++ b/docs/plugins/url-reader.md @@ -19,7 +19,7 @@ files before generating a documentation site. Since, the requirement for reading files is so essential for Backstage plugins, the -[`coreServices.urlReader`](../reference/backend-plugin-api.coreservices.urlreader/) +[`coreServices.urlReader`](../reference/backend-plugin-api.coreservices.urlreader.md) package provides a dedicated API for reading from such URL based remote locations like GitHub, GitLab, Bitbucket, Google Cloud Storage, etc. This is commonly referred to as "URL Reader". It takes care of making authenticated diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/GoogleGcsUrlReader.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/GoogleGcsUrlReader.test.ts index 318b134aa4..9a5cf741db 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/lib/GoogleGcsUrlReader.test.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/GoogleGcsUrlReader.test.ts @@ -14,31 +14,27 @@ * limitations under the License. */ +import * as GoogleCloud from '@google-cloud/storage'; import { ConfigReader } from '@backstage/config'; import { JsonObject } from '@backstage/types'; import { DefaultReadTreeResponseFactory } from './tree'; import { GoogleGcsUrlReader } from './GoogleGcsUrlReader'; import { UrlReaderPredicateTuple } from './types'; -import packageinfo from '@backstage/backend-defaults/package.json'; +import packageinfo from '../../../../package.json'; import { mockServices } from '@backstage/backend-test-utils'; const bucketGetFilesMock = jest.fn(); -jest.mock('@google-cloud/storage', () => { - class Bucket { - getFiles(query: any) { - return bucketGetFilesMock(query); - } +class Bucket { + getFiles(query: any) { + return bucketGetFilesMock(query); } - class Storage { - bucket() { - return new Bucket(); - } +} +class Storage { + bucket() { + return new Bucket(); } - return { - __esModule: true, - Storage, - }; -}); +} +jest.spyOn(GoogleCloud, 'Storage').mockReturnValue(new Storage() as any); describe('GcsUrlReader', () => { const createReader = (config: JsonObject): UrlReaderPredicateTuple[] => { @@ -80,7 +76,7 @@ describe('GcsUrlReader', () => { }); it('check if userAgent has been called with this key value', async () => { const getStorage: any = { - userAgent: `backstage/backend-defaults.GoogleGcsUrlReader/${packageinfo.version}`, + userAgent: `backstage/backend-common.GoogleGcsUrlReader/${packageinfo.version}`, }; jest.mock('@google-cloud/storage', () => { return { @@ -89,7 +85,7 @@ describe('GcsUrlReader', () => { }); const getUserAgent = getStorage.userAgent.toString(); expect(getUserAgent).toBe( - `backstage/backend-defaults.GoogleGcsUrlReader/${packageinfo.version}`, + `backstage/backend-common.GoogleGcsUrlReader/${packageinfo.version}`, ); }); diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/GoogleGcsUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/GoogleGcsUrlReader.ts index 124461ff80..0e8fef7683 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/lib/GoogleGcsUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/GoogleGcsUrlReader.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import * as GoogleCloud from '@google-cloud/storage'; import { UrlReaderService, UrlReaderReadTreeResponse, @@ -21,7 +22,6 @@ import { UrlReaderReadUrlResponse, UrlReaderSearchResponse, } from '@backstage/backend-plugin-api'; -import { Storage } from '@google-cloud/storage'; import { ReaderFactory } from './types'; import getRawBody from 'raw-body'; import { @@ -30,7 +30,7 @@ import { } from '@backstage/integration'; import { Readable } from 'stream'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; -import packageinfo from '@backstage/backend-defaults/package.json'; +import packageinfo from '../../../../package.json'; const GOOGLE_GCS_HOST = 'storage.cloud.google.com'; @@ -64,21 +64,21 @@ export class GoogleGcsUrlReader implements UrlReaderService { const gcsConfig = readGoogleGcsIntegrationConfig( config.getConfig('integrations.googleGcs'), ); - let storage: Storage; + let storage: GoogleCloud.Storage; if (!gcsConfig.clientEmail || !gcsConfig.privateKey) { logger.info( 'googleGcs credentials not found in config. Using default credentials provider.', ); - storage = new Storage({ - userAgent: `backstage/backend-defaults.GoogleGcsUrlReader/${packageinfo.version}`, + storage = new GoogleCloud.Storage({ + userAgent: `backstage/backend-common.GoogleGcsUrlReader/${packageinfo.version}`, }); } else { - storage = new Storage({ + storage = new GoogleCloud.Storage({ credentials: { client_email: gcsConfig.clientEmail || undefined, private_key: gcsConfig.privateKey || undefined, }, - userAgent: `backstage/backend-defaults.GoogleGcsUrlReader/${packageinfo.version}`, + userAgent: `backstage/backend-common.GoogleGcsUrlReader/${packageinfo.version}`, }); } const reader = new GoogleGcsUrlReader(gcsConfig, storage); @@ -88,7 +88,7 @@ export class GoogleGcsUrlReader implements UrlReaderService { constructor( private readonly integration: GoogleGcsIntegrationConfig, - private readonly storage: Storage, + private readonly storage: GoogleCloud.Storage, ) {} private readStreamFromUrl(url: string): Readable {