From 217547ae51d829329ed7e560eaa0f3d668d47f36 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 13 Mar 2022 17:23:59 +0100 Subject: [PATCH 1/6] cli: fix test file matching Signed-off-by: Patrik Oldsberg --- .changeset/great-pots-fetch.md | 5 +++++ packages/cli/config/jest.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/great-pots-fetch.md diff --git a/.changeset/great-pots-fetch.md b/.changeset/great-pots-fetch.md new file mode 100644 index 0000000000..34785dfb7f --- /dev/null +++ b/.changeset/great-pots-fetch.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': minor +--- + +**BREAKING**: The provided Jest configuration now only matches files with a `.test.` infix, rather than any files that is suffixed with `test.`. In particular this means that files named just `test.ts` will no longer be considered a test file. diff --git a/packages/cli/config/jest.js b/packages/cli/config/jest.js index d5b85b9748..1472260e33 100644 --- a/packages/cli/config/jest.js +++ b/packages/cli/config/jest.js @@ -112,7 +112,7 @@ async function getProjectConfig(targetPath, displayName) { }, // A bit more opinionated - testMatch: ['**/?(*.)test.{js,jsx,ts,tsx,mjs,cjs}'], + testMatch: ['**/*.test.{js,jsx,ts,tsx,mjs,cjs}'], transformIgnorePatterns: [`/node_modules/(?:${transformIgnorePattern})/`], }; From 89c7e4796723975e1511c6774f3ad2ad71c15d86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Sun, 13 Mar 2022 17:32:13 +0100 Subject: [PATCH 2/6] make the backend plugin ts files consistent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/cuddly-bags-rescue.md | 22 ++++++ docs/auth/google/gcp-iap-auth.md | 17 ++--- docs/auth/identity-resolver.md | 28 ++++---- docs/features/kubernetes/installation.md | 12 ++-- docs/features/search/getting-started.md | 34 +++++---- docs/features/search/how-to-guides.md | 32 +++++---- docs/features/search/search-engines.md | 18 ++--- .../software-catalog/descriptor-format.md | 14 ++-- .../writing-custom-actions.md | 22 +++--- docs/features/techdocs/getting-started.md | 32 ++++----- docs/integrations/github/discovery.md | 10 +-- docs/integrations/github/org.md | 2 +- docs/plugins/backend-plugin.md | 9 ++- docs/plugins/testing.md | 14 ++-- docs/plugins/url-reader.md | 2 +- packages/backend/src/plugins/app.ts | 14 ++-- packages/backend/src/plugins/auth.ts | 20 +++--- packages/backend/src/plugins/azure-devops.ts | 12 ++-- packages/backend/src/plugins/badges.ts | 12 ++-- packages/backend/src/plugins/codecoverage.ts | 5 +- packages/backend/src/plugins/graphql.ts | 11 ++- packages/backend/src/plugins/healthcheck.ts | 11 +-- packages/backend/src/plugins/jenkins.ts | 14 ++-- packages/backend/src/plugins/kafka.ts | 12 ++-- packages/backend/src/plugins/kubernetes.ts | 12 ++-- packages/backend/src/plugins/permission.ts | 11 ++- packages/backend/src/plugins/proxy.ts | 14 ++-- packages/backend/src/plugins/rollbar.ts | 12 ++-- packages/backend/src/plugins/scaffolder.ts | 25 ++++--- packages/backend/src/plugins/search.ts | 71 ++++++++----------- packages/backend/src/plugins/techInsights.ts | 24 +++---- packages/backend/src/plugins/techdocs.ts | 35 +++++---- packages/backend/src/plugins/todo.ts | 25 ++++--- .../packages/backend/src/plugins/app.ts | 14 ++-- .../packages/backend/src/plugins/auth.ts | 20 +++--- .../packages/backend/src/plugins/proxy.ts | 14 ++-- .../backend/src/plugins/scaffolder.ts | 23 +++--- .../backend/src/plugins/search.ts.hbs | 46 ++++++------ .../packages/backend/src/plugins/techdocs.ts | 34 ++++----- plugins/airbrake/README.md | 11 ++- plugins/app-backend/README.md | 2 +- plugins/azure-devops-backend/README.md | 12 ++-- plugins/badges-backend/README.md | 12 ++-- plugins/bazaar-backend/README.md | 15 ++-- .../catalog-backend-module-msgraph/README.md | 8 +-- plugins/jenkins-backend/README.md | 16 ++--- plugins/kafka/README.md | 13 ++-- .../README.md | 10 +-- .../scaffolder-backend-module-rails/README.md | 10 +-- .../README.md | 14 ++-- .../README.md | 14 ++-- plugins/tech-insights-backend/README.md | 49 ++++++------- plugins/todo-backend/README.md | 27 +++---- plugins/todo/README.md | 21 +++--- 54 files changed, 507 insertions(+), 486 deletions(-) create mode 100644 .changeset/cuddly-bags-rescue.md diff --git a/.changeset/cuddly-bags-rescue.md b/.changeset/cuddly-bags-rescue.md new file mode 100644 index 0000000000..b67926dd69 --- /dev/null +++ b/.changeset/cuddly-bags-rescue.md @@ -0,0 +1,22 @@ +--- +'@backstage/backend-test-utils': patch +'@backstage/create-app': patch +'@backstage/plugin-airbrake': patch +'@backstage/plugin-app-backend': patch +'@backstage/plugin-azure-devops-backend': patch +'@backstage/plugin-badges-backend': patch +'@backstage/plugin-bazaar-backend': patch +'@backstage/plugin-catalog-backend': patch +'@backstage/plugin-catalog-backend-module-msgraph': patch +'@backstage/plugin-jenkins-backend': patch +'@backstage/plugin-kafka': patch +'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch +'@backstage/plugin-scaffolder-backend-module-rails': patch +'@backstage/plugin-scaffolder-backend-module-yeoman': patch +'@backstage/plugin-tech-insights-backend': patch +'@backstage/plugin-tech-insights-backend-module-jsonfc': patch +'@backstage/plugin-todo': patch +'@backstage/plugin-todo-backend': patch +--- + +Minor README update diff --git a/docs/auth/google/gcp-iap-auth.md b/docs/auth/google/gcp-iap-auth.md index 7799517b5f..cdafeb1317 100644 --- a/docs/auth/google/gcp-iap-auth.md +++ b/docs/auth/google/gcp-iap-auth.md @@ -45,17 +45,14 @@ Add a `providerFactories` entry to the router in ```ts import { createGcpIapProvider } from '@backstage/plugin-auth-backend'; -export default async function createPlugin({ - logger, - database, - config, - discovery, -}: PluginEnvironment): Promise { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { return await createRouter({ - logger, - config, - database, - discovery, + logger: env.logger, + config: env.config, + database: env.database, + discovery: env.discovery, providerFactories: { 'gcp-iap': createGcpIapProvider({ // Replace the auth handler if you want to customize the returned user diff --git a/docs/auth/identity-resolver.md b/docs/auth/identity-resolver.md index 3b355470d1..c336da38dd 100644 --- a/docs/auth/identity-resolver.md +++ b/docs/auth/identity-resolver.md @@ -29,9 +29,9 @@ sign-in resolvers and set them for any of the Authentication providers inside ```ts import { DEFAULT_NAMESPACE, stringifyEntityRef } from '@backstage/catalog-model'; -export default async function createPlugin({ - ... -}: PluginEnvironment): Promise { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { return await createRouter({ ... providerFactories: { @@ -105,13 +105,13 @@ matching `google.com/email` annotation. It can be enabled like this -```tsx +```ts // File: packages/backend/src/plugins/auth.ts import { googleEmailSignInResolver, createGoogleProvider } from '@backstage/plugin-auth-backend'; -export default async function createPlugin({ - ... -}: PluginEnvironment): Promise { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { return await createRouter({ ... providerFactories: { @@ -130,9 +130,9 @@ can do this using the `CatalogIdentityClient` provided as context to Sign-In resolvers: ```ts -export default async function createPlugin({ - ... -}: PluginEnvironment): Promise { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { return await createRouter({ ... providerFactories: { @@ -174,11 +174,11 @@ display name and profile picture. This is also the place where you can do authorization and validation of the user and throw errors if the user should not be allowed access in Backstage. -```tsx +```ts // File: packages/backend/src/plugins/auth.ts -export default async function createPlugin({ - ... -}: PluginEnvironment): Promise { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { return await createRouter({ ... providerFactories: { diff --git a/docs/features/kubernetes/installation.md b/docs/features/kubernetes/installation.md index 2e0d9dccb9..18ceca9d92 100644 --- a/docs/features/kubernetes/installation.md +++ b/docs/features/kubernetes/installation.md @@ -60,15 +60,15 @@ add the following: ```typescript // In packages/backend/src/plugins/kubernetes.ts import { KubernetesBuilder } from '@backstage/plugin-kubernetes-backend'; +import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - config, -}: PluginEnvironment) { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { const { router } = await KubernetesBuilder.createBuilder({ - logger, - config, + logger: env.logger, + config: env.config, }).build(); return router; } diff --git a/docs/features/search/getting-started.md b/docs/features/search/getting-started.md index 7c3717e22e..dc86b49947 100644 --- a/docs/features/search/getting-started.md +++ b/docs/features/search/getting-started.md @@ -150,20 +150,24 @@ import { } from '@backstage/plugin-search-backend-node'; import { PluginEnvironment } from '../types'; import { DefaultCatalogCollator } from '@backstage/plugin-catalog-backend'; +import { Router } from 'express'; -export default async function createPlugin({ - logger, - discovery, - tokenManager, -}: PluginEnvironment) { - const searchEngine = new LunrSearchEngine({ logger }); - const indexBuilder = new IndexBuilder({ logger, searchEngine }); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const searchEngine = new LunrSearchEngine({ + logger: env.logger, + }); + const indexBuilder = new IndexBuilder({ + logger: env.logger, + searchEngine, + }); indexBuilder.addCollator({ defaultRefreshIntervalSeconds: 600, collator: new DefaultCatalogCollator({ - discovery, - tokenManager, + discovery: env.discovery, + tokenManager: env.tokenManager, }), }); @@ -174,7 +178,7 @@ export default async function createPlugin({ return await createRouter({ engine: indexBuilder.getSearchEngine(), - logger, + logger: env.logger, }); } ``` @@ -285,13 +289,13 @@ which are responsible for providing documents number of collators with the `IndexBuilder` like this: ```typescript -const indexBuilder = new IndexBuilder({ logger, searchEngine }); +const indexBuilder = new IndexBuilder({ logger: env.logger, searchEngine }); indexBuilder.addCollator({ defaultRefreshIntervalSeconds: 600, collator: new DefaultCatalogCollator({ - discovery, - tokenManager, + discovery: env.discovery, + tokenManager: env.tokenManager, }), }); @@ -311,8 +315,8 @@ its `defaultRefreshIntervalSeconds` value, like this: indexBuilder.addCollator({ defaultRefreshIntervalSeconds: 600, collator: new DefaultCatalogCollator({ - discovery, - tokenManager, + discovery: env.discovery, + tokenManager: env.tokenManager, }), }); ``` diff --git a/docs/features/search/how-to-guides.md b/docs/features/search/how-to-guides.md index c41e9c7bdc..c5f53c905f 100644 --- a/docs/features/search/how-to-guides.md +++ b/docs/features/search/how-to-guides.md @@ -72,10 +72,10 @@ import { DefaultTechDocsCollatorFactory } from '@backstage/plugin-techdocs-backe ```typescript indexBuilder.addCollator({ defaultRefreshIntervalSeconds: 600, - factory: DefaultTechDocsCollatorFactory.fromConfig(config, { - discovery, - logger, - tokenManager, + factory: DefaultTechDocsCollatorFactory.fromConfig(env.config, { + discovery: env.discovery, + logger: env.logger, + tokenManager: env.tokenManager, }), }); ``` @@ -120,9 +120,9 @@ provided by `@backstage/plugin-catalog-backend` offers some configuration too! indexBuilder.addCollator({ defaultRefreshIntervalSeconds: 600, - collator: DefaultCatalogCollator.fromConfig(config, { - discovery, - tokenManager, + collator: DefaultCatalogCollator.fromConfig(env.config, { + discovery: env.discovery, + tokenManager: env.tokenManager, + filter: { + kind: ['API', 'Component', 'Domain', 'Group', 'System', 'User'], + }, @@ -167,18 +167,22 @@ provided by existing plugins, the migration process is fairly straightforward: +import { DefaultCatalogCollatorFactory } from '@backstage/plugin-catalog-backend'; +import { DefaultTechDocsCollatorFactory } from '@backstage/plugin-techdocs-backend'; // ... - const indexBuilder = new IndexBuilder({ logger, searchEngine }); + const indexBuilder = new IndexBuilder({ logger: env.logger, searchEngine }); indexBuilder.addCollator({ defaultRefreshIntervalSeconds: 600, - - collator: DefaultCatalogCollator.fromConfig(config, { discovery }), - + factory: DefaultCatalogCollatorFactory.fromConfig(config, { discovery }), + - collator: DefaultCatalogCollator.fromConfig(env.config, { + discovery: env.discovery, + }), + + factory: DefaultCatalogCollatorFactory.fromConfig(env.config, { + discovery: env.discovery, + }), }); indexBuilder.addCollator({ defaultRefreshIntervalSeconds: 600, - - collator: DefaultTechDocsCollator.fromConfig(config, { - + factory: DefaultTechDocsCollatorFactory.fromConfig(config, { - discovery, - logger, + - collator: DefaultTechDocsCollator.fromConfig(env.config, { + + factory: DefaultTechDocsCollatorFactory.fromConfig(env.config, { + discovery: env.discovery, + logger: env.logger, }), }); ``` diff --git a/docs/features/search/search-engines.md b/docs/features/search/search-engines.md index 8342c74096..f1fd4bd62b 100644 --- a/docs/features/search/search-engines.md +++ b/docs/features/search/search-engines.md @@ -17,7 +17,7 @@ provided search engines by using the exposed setter to set the modified query translator into the instance. ```typescript -const searchEngine = new LunrSearchEngine({ logger }); +const searchEngine = new LunrSearchEngine({ logger: env.logger }); searchEngine.setTranslator(new MyNewAndBetterQueryTranslator()); ``` @@ -30,8 +30,8 @@ Lunr can be instantiated like this: ```typescript // app/backend/src/plugins/search.ts -const searchEngine = new LunrSearchEngine({ logger }); -const indexBuilder = new IndexBuilder({ logger, searchEngine }); +const searchEngine = new LunrSearchEngine({ logger: env.logger }); +const indexBuilder = new IndexBuilder({ logger: env.logger, searchEngine }); ``` ## Postgres @@ -58,9 +58,9 @@ configured and make the following changes to your backend: // In packages/backend/src/plugins/search.ts // Initialize a connection to a search engine. -const searchEngine = (await PgSearchEngine.supported(database)) - ? await PgSearchEngine.from({ database }) - : new LunrSearchEngine({ logger }); +const searchEngine = (await PgSearchEngine.supported(env.database)) + ? await PgSearchEngine.from({ database: env.database }) + : new LunrSearchEngine({ logger: env.logger }); ``` ## ElasticSearch @@ -74,10 +74,10 @@ Similarly to Lunr above, ElasticSearch can be set up like this: ```typescript // app/backend/src/plugins/search.ts const searchEngine = await ElasticSearchSearchEngine.initialize({ - logger, - config, + logger: env.logger, + config: env.config, }); -const indexBuilder = new IndexBuilder({ logger, searchEngine }); +const indexBuilder = new IndexBuilder({ logger: env.logger, searchEngine }); ``` For the engine to be available, your backend package needs a dependency into diff --git a/docs/features/software-catalog/descriptor-format.md b/docs/features/software-catalog/descriptor-format.md index f0a9db11c5..86c832e3d2 100644 --- a/docs/features/software-catalog/descriptor-format.md +++ b/docs/features/software-catalog/descriptor-format.md @@ -64,7 +64,7 @@ spec: This is the same entity as returned in JSON from the software catalog API: -```js +```json { "apiVersion": "backstage.io/v1alpha1", "kind": "Component", @@ -79,11 +79,13 @@ This is the same entity as returned in JSON from the software catalog API: "labels": { "example.com/custom": "custom_label_value" }, - "links": [{ - "url": "https://admin.example-org.com", - "title": "Admin Dashboard", - "icon": "dashboard" - }], + "links": [ + { + "url": "https://admin.example-org.com", + "title": "Admin Dashboard", + "icon": "dashboard" + } + ], "tags": ["java"], "name": "artist-web", "uid": "2152f463-549d-4d8d-a94d-ce2b7676c6e2" diff --git a/docs/features/software-templates/writing-custom-actions.md b/docs/features/software-templates/writing-custom-actions.md index 8c57f202a7..12780a373d 100644 --- a/docs/features/software-templates/writing-custom-actions.md +++ b/docs/features/software-templates/writing-custom-actions.md @@ -108,11 +108,11 @@ should have something similar to the below in ```ts return await createRouter({ containerRunner, - logger, - config, - database, catalogClient, - reader, + logger: env.logger, + config: env.config, + database: env.database, + reader: env.reader, }); ``` @@ -123,25 +123,25 @@ will set the available actions that the scaffolder has access to. import { createBuiltinActions } from '@backstage/plugin-scaffolder-backend'; import { ScmIntegrations } from '@backstage/integration'; -const integrations = ScmIntegrations.fromConfig(config); +const integrations = ScmIntegrations.fromConfig(env.config); const builtInActions = createBuiltinActions({ containerRunner, integrations, - config, catalogClient, - reader, + config: env.config, + reader: env.reader, }); const actions = [...builtInActions, createNewFileAction()]; return await createRouter({ containerRunner, - logger, - config, - database, catalogClient, - reader, actions, + logger: env.logger, + config: env.config, + database: env.database, + reader: env.reader, }); ``` diff --git a/docs/features/techdocs/getting-started.md b/docs/features/techdocs/getting-started.md index 37e135d1dc..7307f2cdf0 100644 --- a/docs/features/techdocs/getting-started.md +++ b/docs/features/techdocs/getting-started.md @@ -81,18 +81,16 @@ import { Publisher, } from '@backstage/plugin-techdocs-backend'; import Docker from 'dockerode'; +import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - config, - discovery, - reader, -}: PluginEnvironment) { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { // Preparers are responsible for fetching source files for documentation. - const preparers = await Preparers.fromConfig(config, { - logger, - reader, + const preparers = await Preparers.fromConfig(env.config, { + logger: env.logger, + reader: env.reader, }); // Docker client (conditionally) used by the generators, based on techdocs.generators config. @@ -100,17 +98,17 @@ export default async function createPlugin({ const containerRunner = new DockerContainerRunner({ dockerClient }); // Generators are used for generating documentation sites. - const generators = await Generators.fromConfig(config, { - logger, + const generators = await Generators.fromConfig(env.config, { + logger: env.logger, containerRunner, }); // Publisher is used for // 1. Publishing generated files to storage // 2. Fetching files from storage and passing them to TechDocs frontend. - const publisher = await Publisher.fromConfig(config, { - logger, - discovery, + const publisher = await Publisher.fromConfig(env.config, { + logger: env.logger, + discovery: env.discovery, }); // checks if the publisher is working and logs the result @@ -120,9 +118,9 @@ export default async function createPlugin({ preparers, generators, publisher, - logger, - config, - discovery, + logger: env.logger, + config: env.config, + discovery: env.discovery, }); } ``` diff --git a/docs/integrations/github/discovery.md b/docs/integrations/github/discovery.md index 866943e002..69491e3d1a 100644 --- a/docs/integrations/github/discovery.md +++ b/docs/integrations/github/discovery.md @@ -42,16 +42,16 @@ And then add the processors to your catalog builder: env: PluginEnvironment, ): Promise { const builder = await CatalogBuilder.create(env); -+ const integrations = ScmIntegrations.fromConfig(config); ++ const integrations = ScmIntegrations.fromConfig(env.config); + const githubCredentialsProvider = + DefaultGithubCredentialsProvider.fromIntegrations(integrations); + builder.addProcessor( -+ GithubDiscoveryProcessor.fromConfig(config, { -+ logger, ++ GithubDiscoveryProcessor.fromConfig(env.config, { ++ logger: env.logger, + githubCredentialsProvider, + }), -+ GithubOrgReaderProcessor.fromConfig(config, { -+ logger, ++ GithubOrgReaderProcessor.fromConfig(env.config, { ++ logger: env.logger, + githubCredentialsProvider, + }), + ); diff --git a/docs/integrations/github/org.md b/docs/integrations/github/org.md index ad0be6d071..975df2e555 100644 --- a/docs/integrations/github/org.md +++ b/docs/integrations/github/org.md @@ -69,6 +69,6 @@ import { GithubOrgReaderProcessor } from '@backstage/plugin-catalog-backend'; builder.replaceProcessors( // ... other processor replacements - GithubOrgReaderProcessor.fromConfig(config, { logger }), + GithubOrgReaderProcessor.fromConfig(env.config, { logger: env.logger }), ); ``` diff --git a/docs/plugins/backend-plugin.md b/docs/plugins/backend-plugin.md index 5ff0e5a62f..65ff20ae46 100644 --- a/docs/plugins/backend-plugin.md +++ b/docs/plugins/backend-plugin.md @@ -76,9 +76,12 @@ following to it ```ts import { createRouter } from '@internal/plugin-carmen-backend'; +import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin(env: PluginEnvironment) { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { // Here is where you will add all of the required initialization code that // your backend plugin needs to be able to start! @@ -124,7 +127,9 @@ function, there is a `database` field. You can use that to get a ```ts // in packages/backend/src/plugins/carmen.ts -export default async function createPlugin(env: PluginEnvironment) { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { const db: Knex = await env.database.getClient(); // You will then pass this client into your actual plugin implementation diff --git a/docs/plugins/testing.md b/docs/plugins/testing.md index bd6061be19..aa7815728c 100644 --- a/docs/plugins/testing.md +++ b/docs/plugins/testing.md @@ -192,7 +192,7 @@ returns a result or displays an error or console message, like so: **`StringUtil ellipsis`** -```js +```ts export function ellipsis(text, maxLength, midCharIx = 0, ellipsis = '...') { // Do something blackbox. We should not care about the internals, // only inputs and outputs. @@ -210,7 +210,7 @@ There are four things to test for in a utility function: > Handle Invalid Input (handle thrown errors): -```js +```ts it('Throws an error on improper arguments', () => { expect(() => { ellipsis(); @@ -220,7 +220,7 @@ it('Throws an error on improper arguments', () => { > Verify default input arguments: -```js +```ts it('Works with defaults', () => { expect(ellipsis('Hello world', 3)).toBe('Hel...'); expect(ellipsis('', 3)).toBe(''); @@ -233,7 +233,7 @@ it('Works with defaults', () => { This is especially true for edge cases! -```js +```ts it('Works with midCharIx', () => { expect(ellipsis('Hello world', 3, 6)).toBe('...o w...'); expect(ellipsis('', 3, 6)).toBe(''); @@ -265,7 +265,7 @@ For example: **`./MyApi.js`** -```js +```ts export { fetchSomethingFromServer: () => { // Live production call to a URI. Must be avoided during testing! @@ -276,7 +276,7 @@ export { **`./__mocks__/MyApi.js`** -```js +```ts export { fetchSomethingFromServer: () => { // Simulate a production call, but avoid jest and just use a promise @@ -287,7 +287,7 @@ export { **`./MyApi.test.js`** -```js +```ts /* eslint-disable import/first */ jest.mock('./MyApi'); // Instruct Jest to swap all future imports of './MyApi.js' to './__mocks__/MyApi.js' diff --git a/docs/plugins/url-reader.md b/docs/plugins/url-reader.md index 41aba98a66..0072c34cfb 100644 --- a/docs/plugins/url-reader.md +++ b/docs/plugins/url-reader.md @@ -44,7 +44,7 @@ import { URLReaders } from '@backstage/backend-common'; function makeCreateEnv(config: Config) { // .... - const reader = UrlReaders.default({ logger, config }); + const reader = UrlReaders.default({ logger: root, config }); // } ``` diff --git a/packages/backend/src/plugins/app.ts b/packages/backend/src/plugins/app.ts index 0747d890e1..03d1ad95e7 100644 --- a/packages/backend/src/plugins/app.ts +++ b/packages/backend/src/plugins/app.ts @@ -18,15 +18,13 @@ import { createRouter } from '@backstage/plugin-app-backend'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - config, - database, -}: PluginEnvironment): Promise { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { return await createRouter({ - logger, - config, - database, + logger: env.logger, + config: env.config, + database: env.database, appPackageName: 'example-app', }); } diff --git a/packages/backend/src/plugins/auth.ts b/packages/backend/src/plugins/auth.ts index 7f2b950c3c..da8eedcabc 100644 --- a/packages/backend/src/plugins/auth.ts +++ b/packages/backend/src/plugins/auth.ts @@ -18,18 +18,14 @@ import { createRouter } from '@backstage/plugin-auth-backend'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - database, - config, - discovery, - tokenManager, -}: PluginEnvironment): Promise { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { return await createRouter({ - logger, - config, - database, - discovery, - tokenManager, + logger: env.logger, + config: env.config, + database: env.database, + discovery: env.discovery, + tokenManager: env.tokenManager, }); } diff --git a/packages/backend/src/plugins/azure-devops.ts b/packages/backend/src/plugins/azure-devops.ts index 4120e655ed..67bba8ac85 100644 --- a/packages/backend/src/plugins/azure-devops.ts +++ b/packages/backend/src/plugins/azure-devops.ts @@ -18,9 +18,11 @@ import { createRouter } from '@backstage/plugin-azure-devops-backend'; import { Router } from 'express'; import type { PluginEnvironment } from '../types'; -export default function createPlugin({ - logger, - config, -}: PluginEnvironment): Promise { - return createRouter({ logger, config }); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + return createRouter({ + logger: env.logger, + config: env.config, + }); } diff --git a/packages/backend/src/plugins/badges.ts b/packages/backend/src/plugins/badges.ts index 0f579ccf91..37529689f3 100644 --- a/packages/backend/src/plugins/badges.ts +++ b/packages/backend/src/plugins/badges.ts @@ -18,15 +18,15 @@ import { createRouter, createDefaultBadgeFactories, } from '@backstage/plugin-badges-backend'; +import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - config, - discovery, -}: PluginEnvironment) { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { return await createRouter({ - config, - discovery, + config: env.config, + discovery: env.discovery, badgeFactories: createDefaultBadgeFactories(), }); } diff --git a/packages/backend/src/plugins/codecoverage.ts b/packages/backend/src/plugins/codecoverage.ts index 358cf36708..adb20da2b3 100644 --- a/packages/backend/src/plugins/codecoverage.ts +++ b/packages/backend/src/plugins/codecoverage.ts @@ -15,9 +15,12 @@ */ import { createRouter } from '@backstage/plugin-code-coverage-backend'; +import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin(env: PluginEnvironment) { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { return await createRouter({ config: env.config, discovery: env.discovery, diff --git a/packages/backend/src/plugins/graphql.ts b/packages/backend/src/plugins/graphql.ts index 3c53f4a64e..c9aafa70ff 100644 --- a/packages/backend/src/plugins/graphql.ts +++ b/packages/backend/src/plugins/graphql.ts @@ -18,12 +18,11 @@ import { createRouter } from '@backstage/plugin-graphql-backend'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - config, -}: PluginEnvironment): Promise { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { return await createRouter({ - logger, - config, + logger: env.logger, + config: env.config, }); } diff --git a/packages/backend/src/plugins/healthcheck.ts b/packages/backend/src/plugins/healthcheck.ts index 897e56d381..d229584e13 100644 --- a/packages/backend/src/plugins/healthcheck.ts +++ b/packages/backend/src/plugins/healthcheck.ts @@ -18,8 +18,11 @@ import { createStatusCheckRouter } from '@backstage/backend-common'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createRouter({ - logger, -}: PluginEnvironment): Promise { - return await createStatusCheckRouter({ logger, path: '/healthcheck' }); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + return await createStatusCheckRouter({ + logger: env.logger, + path: '/healthcheck', + }); } diff --git a/packages/backend/src/plugins/jenkins.ts b/packages/backend/src/plugins/jenkins.ts index 7717e711fb..d62200b0ac 100644 --- a/packages/backend/src/plugins/jenkins.ts +++ b/packages/backend/src/plugins/jenkins.ts @@ -22,18 +22,16 @@ import { Router } from 'express'; import { PluginEnvironment } from '../types'; import { CatalogClient } from '@backstage/catalog-client'; -export default async function createPlugin({ - logger, - config, - discovery, -}: PluginEnvironment): Promise { - const catalog = new CatalogClient({ discoveryApi: discovery }); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const catalog = new CatalogClient({ discoveryApi: env.discovery }); return await createRouter({ - logger, + logger: env.logger, jenkinsInfoProvider: DefaultJenkinsInfoProvider.fromConfig({ catalog, - config, + config: env.config, }), }); } diff --git a/packages/backend/src/plugins/kafka.ts b/packages/backend/src/plugins/kafka.ts index baa9bb070f..784bad3145 100644 --- a/packages/backend/src/plugins/kafka.ts +++ b/packages/backend/src/plugins/kafka.ts @@ -18,9 +18,11 @@ import { createRouter } from '@backstage/plugin-kafka-backend'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - config, -}: PluginEnvironment): Promise { - return await createRouter({ logger, config }); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + return await createRouter({ + logger: env.logger, + config: env.config, + }); } diff --git a/packages/backend/src/plugins/kubernetes.ts b/packages/backend/src/plugins/kubernetes.ts index 6d40d89b66..8023d549ff 100644 --- a/packages/backend/src/plugins/kubernetes.ts +++ b/packages/backend/src/plugins/kubernetes.ts @@ -15,15 +15,15 @@ */ import { KubernetesBuilder } from '@backstage/plugin-kubernetes-backend'; +import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - config, -}: PluginEnvironment) { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { const { router } = await KubernetesBuilder.createBuilder({ - logger, - config, + logger: env.logger, + config: env.config, }).build(); return router; } diff --git a/packages/backend/src/plugins/permission.ts b/packages/backend/src/plugins/permission.ts index 557cea9a26..7337687c54 100644 --- a/packages/backend/src/plugins/permission.ts +++ b/packages/backend/src/plugins/permission.ts @@ -35,15 +35,14 @@ class AllowAllPermissionPolicy implements PermissionPolicy { export default async function createPlugin( env: PluginEnvironment, ): Promise { - const { logger, discovery, config } = env; return await createRouter({ - config, - logger, - discovery, + config: env.config, + logger: env.logger, + discovery: env.discovery, policy: new AllowAllPermissionPolicy(), identity: IdentityClient.create({ - discovery, - issuer: await discovery.getExternalBaseUrl('auth'), + discovery: env.discovery, + issuer: await env.discovery.getExternalBaseUrl('auth'), }), }); } diff --git a/packages/backend/src/plugins/proxy.ts b/packages/backend/src/plugins/proxy.ts index ddffd1f018..273e791f1c 100644 --- a/packages/backend/src/plugins/proxy.ts +++ b/packages/backend/src/plugins/proxy.ts @@ -18,10 +18,12 @@ import { createRouter } from '@backstage/plugin-proxy-backend'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - config, - discovery, -}: PluginEnvironment): Promise { - return await createRouter({ logger, config, discovery }); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + return await createRouter({ + logger: env.logger, + config: env.config, + discovery: env.discovery, + }); } diff --git a/packages/backend/src/plugins/rollbar.ts b/packages/backend/src/plugins/rollbar.ts index d2fbfdd43d..c679be40a7 100644 --- a/packages/backend/src/plugins/rollbar.ts +++ b/packages/backend/src/plugins/rollbar.ts @@ -18,9 +18,11 @@ import { createRouter } from '@backstage/plugin-rollbar-backend'; import { Router } from 'express'; import type { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - config, -}: PluginEnvironment): Promise { - return await createRouter({ logger, config }); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + return await createRouter({ + logger: env.logger, + config: env.config, + }); } diff --git a/packages/backend/src/plugins/scaffolder.ts b/packages/backend/src/plugins/scaffolder.ts index e0f3a4b1ca..465616f433 100644 --- a/packages/backend/src/plugins/scaffolder.ts +++ b/packages/backend/src/plugins/scaffolder.ts @@ -19,19 +19,18 @@ import { createRouter } from '@backstage/plugin-scaffolder-backend'; import { Router } from 'express'; import type { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - config, - database, - reader, - discovery, -}: PluginEnvironment): Promise { - const catalogClient = new CatalogClient({ discoveryApi: discovery }); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const catalogClient = new CatalogClient({ + discoveryApi: env.discovery, + }); + return await createRouter({ - logger, - config, - database, - catalogClient, - reader, + logger: env.logger, + config: env.config, + database: env.database, + catalogClient: catalogClient, + reader: env.reader, }); } diff --git a/packages/backend/src/plugins/search.ts b/packages/backend/src/plugins/search.ts index a90b47cd81..cb675a842c 100644 --- a/packages/backend/src/plugins/search.ts +++ b/packages/backend/src/plugins/search.ts @@ -13,11 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { - PluginDatabaseManager, - useHotCleanup, -} from '@backstage/backend-common'; -import { Config } from '@backstage/config'; + +import { useHotCleanup } from '@backstage/backend-common'; import { DefaultCatalogCollatorFactory } from '@backstage/plugin-catalog-backend'; import { createRouter } from '@backstage/plugin-search-backend'; import { ElasticSearchSearchEngine } from '@backstage/plugin-search-backend-module-elasticsearch'; @@ -28,60 +25,52 @@ import { SearchEngine, } from '@backstage/plugin-search-backend-node'; import { DefaultTechDocsCollatorFactory } from '@backstage/plugin-techdocs-backend'; -import { Logger } from 'winston'; +import { Router } from 'express'; import { PluginEnvironment } from '../types'; -async function createSearchEngine({ - logger, - database, - config, -}: { - logger: Logger; - database: PluginDatabaseManager; - config: Config; -}): Promise { - if (config.has('search.elasticsearch')) { +async function createSearchEngine( + env: PluginEnvironment, +): Promise { + if (env.config.has('search.elasticsearch')) { return await ElasticSearchSearchEngine.fromConfig({ - logger, - config, + logger: env.logger, + config: env.config, }); } - if (await PgSearchEngine.supported(database)) { - return await PgSearchEngine.from({ database }); + if (await PgSearchEngine.supported(env.database)) { + return await PgSearchEngine.from({ database: env.database }); } - return new LunrSearchEngine({ logger }); + return new LunrSearchEngine({ logger: env.logger }); } -export default async function createPlugin({ - logger, - permissions, - discovery, - config, - database, - tokenManager, -}: PluginEnvironment) { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { // Initialize a connection to a search engine. - const searchEngine = await createSearchEngine({ config, logger, database }); - const indexBuilder = new IndexBuilder({ logger, searchEngine }); + const searchEngine = await createSearchEngine(env); + const indexBuilder = new IndexBuilder({ + logger: env.logger, + searchEngine, + }); // Collators are responsible for gathering documents known to plugins. This // particular collator gathers entities from the software catalog. indexBuilder.addCollator({ defaultRefreshIntervalSeconds: 600, - factory: DefaultCatalogCollatorFactory.fromConfig(config, { - discovery, - tokenManager, + factory: DefaultCatalogCollatorFactory.fromConfig(env.config, { + discovery: env.discovery, + tokenManager: env.tokenManager, }), }); indexBuilder.addCollator({ defaultRefreshIntervalSeconds: 600, - factory: DefaultTechDocsCollatorFactory.fromConfig(config, { - discovery, - logger, - tokenManager, + factory: DefaultTechDocsCollatorFactory.fromConfig(env.config, { + discovery: env.discovery, + logger: env.logger, + tokenManager: env.tokenManager, }), }); @@ -97,8 +86,8 @@ export default async function createPlugin({ return await createRouter({ engine: indexBuilder.getSearchEngine(), types: indexBuilder.getDocumentTypes(), - permissions, - config, - logger, + permissions: env.permissions, + config: env.config, + logger: env.logger, }); } diff --git a/packages/backend/src/plugins/techInsights.ts b/packages/backend/src/plugins/techInsights.ts index 7b0ded2240..e249b1db9b 100644 --- a/packages/backend/src/plugins/techInsights.ts +++ b/packages/backend/src/plugins/techInsights.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { createRouter, buildTechInsightsContext, @@ -28,17 +29,14 @@ import { JSON_RULE_ENGINE_CHECK_TYPE, } from '@backstage/plugin-tech-insights-backend-module-jsonfc'; -export default async function createPlugin({ - logger, - config, - discovery, - database, -}: PluginEnvironment): Promise { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { const techInsightsContext = await buildTechInsightsContext({ - logger, - config, - database, - discovery, + logger: env.logger, + config: env.config, + database: env.database, + discovery: env.discovery, factRetrievers: [ createFactRetrieverRegistration({ cadence: '1 1 1 * *', // Example cron, At 01:01 on day-of-month 1. @@ -54,6 +52,7 @@ export default async function createPlugin({ }), ], factCheckerFactory: new JsonRulesEngineFactCheckerFactory({ + logger: env.logger, checks: [ { id: 'simpleTestCheck', @@ -93,13 +92,12 @@ export default async function createPlugin({ }, }, ], - logger, }), }); return await createRouter({ ...techInsightsContext, - logger, - config, + logger: env.logger, + config: env.config, }); } diff --git a/packages/backend/src/plugins/techdocs.ts b/packages/backend/src/plugins/techdocs.ts index c32bbccbb0..6e369f8f0f 100644 --- a/packages/backend/src/plugins/techdocs.ts +++ b/packages/backend/src/plugins/techdocs.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { DockerContainerRunner } from '@backstage/backend-common'; import { createRouter, @@ -24,17 +25,13 @@ import Docker from 'dockerode'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - config, - discovery, - reader, - cache, -}: PluginEnvironment): Promise { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { // Preparers are responsible for fetching source files for documentation. - const preparers = await Preparers.fromConfig(config, { - logger, - reader, + const preparers = await Preparers.fromConfig(env.config, { + logger: env.logger, + reader: env.reader, }); // Docker client (conditionally) used by the generators, based on techdocs.generators config. @@ -42,17 +39,17 @@ export default async function createPlugin({ const containerRunner = new DockerContainerRunner({ dockerClient }); // Generators are used for generating documentation sites. - const generators = await Generators.fromConfig(config, { - logger, + const generators = await Generators.fromConfig(env.config, { + logger: env.logger, containerRunner, }); // Publisher is used for // 1. Publishing generated files to storage // 2. Fetching files from storage and passing them to TechDocs frontend. - const publisher = await Publisher.fromConfig(config, { - logger, - discovery, + const publisher = await Publisher.fromConfig(env.config, { + logger: env.logger, + discovery: env.discovery, }); // checks if the publisher is working and logs the result @@ -62,9 +59,9 @@ export default async function createPlugin({ preparers, generators, publisher, - logger, - config, - discovery, - cache, + logger: env.logger, + config: env.config, + discovery: env.discovery, + cache: env.cache, }); } diff --git a/packages/backend/src/plugins/todo.ts b/packages/backend/src/plugins/todo.ts index df90e5a41e..fb460b5f70 100644 --- a/packages/backend/src/plugins/todo.ts +++ b/packages/backend/src/plugins/todo.ts @@ -22,21 +22,24 @@ import { import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - reader, - config, - discovery, -}: PluginEnvironment): Promise { - const todoReader = TodoScmReader.fromConfig(config, { - logger, - reader, +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const todoReader = TodoScmReader.fromConfig(env.config, { + logger: env.logger, + reader: env.reader, }); - const catalogClient = new CatalogClient({ discoveryApi: discovery }); + + const catalogClient = new CatalogClient({ + discoveryApi: env.discovery, + }); + const todoService = new TodoReaderService({ todoReader, catalogClient, }); - return await createRouter({ todoService }); + return await createRouter({ + todoService, + }); } diff --git a/packages/create-app/templates/default-app/packages/backend/src/plugins/app.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/app.ts index 14e19a19b1..7c37f68467 100644 --- a/packages/create-app/templates/default-app/packages/backend/src/plugins/app.ts +++ b/packages/create-app/templates/default-app/packages/backend/src/plugins/app.ts @@ -2,15 +2,13 @@ import { createRouter } from '@backstage/plugin-app-backend'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - config, - database, -}: PluginEnvironment): Promise { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { return await createRouter({ - logger, - config, - database, + logger: env.logger, + config: env.config, + database: env.database, appPackageName: 'app', }); } diff --git a/packages/create-app/templates/default-app/packages/backend/src/plugins/auth.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/auth.ts index 015c86466f..1476e66150 100644 --- a/packages/create-app/templates/default-app/packages/backend/src/plugins/auth.ts +++ b/packages/create-app/templates/default-app/packages/backend/src/plugins/auth.ts @@ -2,18 +2,14 @@ import { createRouter } from '@backstage/plugin-auth-backend'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - database, - config, - discovery, - tokenManager, -}: PluginEnvironment): Promise { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { return await createRouter({ - logger, - config, - database, - discovery, - tokenManager, + logger: env.logger, + config: env.config, + database: env.database, + discovery: env.discovery, + tokenManager: env.tokenManager, }); } diff --git a/packages/create-app/templates/default-app/packages/backend/src/plugins/proxy.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/proxy.ts index 506f6d98f9..54ec3937e9 100644 --- a/packages/create-app/templates/default-app/packages/backend/src/plugins/proxy.ts +++ b/packages/create-app/templates/default-app/packages/backend/src/plugins/proxy.ts @@ -2,10 +2,12 @@ import { createRouter } from '@backstage/plugin-proxy-backend'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - config, - discovery, -}: PluginEnvironment): Promise { - return await createRouter({ logger, config, discovery }); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + return await createRouter({ + logger: env.logger, + config: env.config, + discovery: env.discovery, + }); } diff --git a/packages/create-app/templates/default-app/packages/backend/src/plugins/scaffolder.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/scaffolder.ts index a460fd8a6d..7ce5fcf31a 100644 --- a/packages/create-app/templates/default-app/packages/backend/src/plugins/scaffolder.ts +++ b/packages/create-app/templates/default-app/packages/backend/src/plugins/scaffolder.ts @@ -3,19 +3,18 @@ import { createRouter } from '@backstage/plugin-scaffolder-backend'; import { Router } from 'express'; import type { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - config, - database, - reader, - discovery, -}: PluginEnvironment): Promise { - const catalogClient = new CatalogClient({ discoveryApi: discovery }); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const catalogClient = new CatalogClient({ + discoveryApi: env.discovery, + }); + return await createRouter({ - logger, - config, - database, + logger: env.logger, + config: env.config, + database: env.database, + reader: env.reader, catalogClient, - reader, }); } diff --git a/packages/create-app/templates/default-app/packages/backend/src/plugins/search.ts.hbs b/packages/create-app/templates/default-app/packages/backend/src/plugins/search.ts.hbs index d8ad991e8a..8f44a35b16 100644 --- a/packages/create-app/templates/default-app/packages/backend/src/plugins/search.ts.hbs +++ b/packages/create-app/templates/default-app/packages/backend/src/plugins/search.ts.hbs @@ -10,42 +10,44 @@ import { PgSearchEngine } from '@backstage/plugin-search-backend-module-pg'; import { PluginEnvironment } from '../types'; import { DefaultCatalogCollatorFactory } from '@backstage/plugin-catalog-backend'; import { DefaultTechDocsCollatorFactory } from '@backstage/plugin-techdocs-backend'; +import { Router } from 'express'; -export default async function createPlugin({ - logger, - permissions, - discovery, - config, - tokenManager, -}: PluginEnvironment) { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { // Initialize a connection to a search engine. {{#if dbTypeSqlite}} - const searchEngine = new LunrSearchEngine({ logger }); + const searchEngine = new LunrSearchEngine({ + logger: env.logger, + }); {{/if}} {{#if dbTypePG}} - const searchEngine = (await PgSearchEngine.supported(database)) - ? await PgSearchEngine.from({ database }) - : new LunrSearchEngine({ logger }); + const searchEngine = (await PgSearchEngine.supported(env.database)) + ? await PgSearchEngine.from({ database: env.database }) + : new LunrSearchEngine({ logger: env.logger }); {{/if}} - const indexBuilder = new IndexBuilder({ logger, searchEngine }); + const indexBuilder = new IndexBuilder({ + logger: env.logger, + searchEngine, + }); // Collators are responsible for gathering documents known to plugins. This // collator gathers entities from the software catalog. indexBuilder.addCollator({ defaultRefreshIntervalSeconds: 600, - factory: DefaultCatalogCollatorFactory.fromConfig(config, { - discovery, - tokenManager, + factory: DefaultCatalogCollatorFactory.fromConfig(env.config, { + discovery: env.discovery, + tokenManager: env.tokenManager, }), }); // collator gathers entities from techdocs. indexBuilder.addCollator({ defaultRefreshIntervalSeconds: 600, - factory: DefaultTechDocsCollatorFactory.fromConfig(config, { - discovery, - logger, - tokenManager, + factory: DefaultTechDocsCollatorFactory.fromConfig(env.config, { + discovery: env.discovery, + logger: env.logger, + tokenManager: env.tokenManager, }), }); @@ -61,8 +63,8 @@ export default async function createPlugin({ return await createRouter({ engine: indexBuilder.getSearchEngine(), types: indexBuilder.getDocumentTypes(), - permissions, - config, - logger, + permissions: env.permissions, + config: env.config, + logger: env.logger, }); } diff --git a/packages/create-app/templates/default-app/packages/backend/src/plugins/techdocs.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/techdocs.ts index 054c64db65..be8bb0c06f 100644 --- a/packages/create-app/templates/default-app/packages/backend/src/plugins/techdocs.ts +++ b/packages/create-app/templates/default-app/packages/backend/src/plugins/techdocs.ts @@ -9,17 +9,13 @@ import Docker from 'dockerode'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - config, - discovery, - reader, - cache, -}: PluginEnvironment): Promise { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { // Preparers are responsible for fetching source files for documentation. - const preparers = await Preparers.fromConfig(config, { - logger, - reader, + const preparers = await Preparers.fromConfig(env.config, { + logger: env.logger, + reader: env.reader, }); // Docker client (conditionally) used by the generators, based on techdocs.generators config. @@ -27,17 +23,17 @@ export default async function createPlugin({ const containerRunner = new DockerContainerRunner({ dockerClient }); // Generators are used for generating documentation sites. - const generators = await Generators.fromConfig(config, { - logger, + const generators = await Generators.fromConfig(env.config, { + logger: env.logger, containerRunner, }); // Publisher is used for // 1. Publishing generated files to storage // 2. Fetching files from storage and passing them to TechDocs frontend. - const publisher = await Publisher.fromConfig(config, { - logger, - discovery, + const publisher = await Publisher.fromConfig(env.config, { + logger: env.logger, + discovery: env.discovery, }); // checks if the publisher is working and logs the result @@ -47,9 +43,9 @@ export default async function createPlugin({ preparers, generators, publisher, - logger, - config, - discovery, - cache, + logger: env.logger, + config: env.config, + discovery: env.discovery, + cache: env.cache, }); } diff --git a/plugins/airbrake/README.md b/plugins/airbrake/README.md index bc830c326d..1aae77bd47 100644 --- a/plugins/airbrake/README.md +++ b/plugins/airbrake/README.md @@ -60,13 +60,12 @@ The Airbrake plugin provides connectivity between Backstage and Airbrake (https: extractAirbrakeConfig, } from '@backstage/plugin-airbrake-backend'; - export default async function createPlugin({ - logger, - config, - }: PluginEnvironment): Promise { + export default async function createPlugin( + env: PluginEnvironment, + ): Promise { return createRouter({ - logger, - airbrakeConfig: extractAirbrakeConfig(config), + logger: env.logger, + airbrakeConfig: extractAirbrakeConfig(env.config), }); } ``` diff --git a/plugins/app-backend/README.md b/plugins/app-backend/README.md index a35cecfb9c..21e0253bac 100644 --- a/plugins/app-backend/README.md +++ b/plugins/app-backend/README.md @@ -18,7 +18,7 @@ Now add the plugin router to your app, creating it for example like this: ```ts const router = await createRouter({ - logger, + logger: env.logger, appPackageName: 'example-app', }); ``` diff --git a/plugins/azure-devops-backend/README.md b/plugins/azure-devops-backend/README.md index 79db9f5ff1..e71021471b 100644 --- a/plugins/azure-devops-backend/README.md +++ b/plugins/azure-devops-backend/README.md @@ -43,11 +43,13 @@ Here's how to get the backend up and running: import { Router } from 'express'; import type { PluginEnvironment } from '../types'; - export default function createPlugin({ - logger, - config, - }: PluginEnvironment): Promise { - return createRouter({ logger, config }); + export default function createPlugin( + env: PluginEnvironment, + ): Promise { + return createRouter({ + logger: env.logger, + config: env.config, + }); } ``` diff --git a/plugins/badges-backend/README.md b/plugins/badges-backend/README.md index 73f72d32ac..bdbfac3fa5 100644 --- a/plugins/badges-backend/README.md +++ b/plugins/badges-backend/README.md @@ -20,15 +20,15 @@ import { createRouter, createDefaultBadgeFactories, } from '@backstage/plugin-badges-backend'; +import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - config, - discovery, -}: PluginEnvironment) { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { return await createRouter({ - config, - discovery, + config: env.config, + discovery: env.discovery, badgeFactories: createDefaultBadgeFactories(), }); } diff --git a/plugins/bazaar-backend/README.md b/plugins/bazaar-backend/README.md index 82c1376d8b..01b240e0e3 100644 --- a/plugins/bazaar-backend/README.md +++ b/plugins/bazaar-backend/README.md @@ -19,13 +19,16 @@ You'll need to add the plugin to the router in your `backend` package. You can d ```tsx import { PluginEnvironment } from '../types'; import { createRouter } from '@backstage/plugin-bazaar-backend'; +import { Router } from 'express'; -export default async function createPlugin({ - logger, - database, - config, -}: PluginEnvironment) { - return await createRouter({ logger, config, database }); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + return await createRouter({ + logger: env.logger, + config: env.config, + database: env.database, + }); } ``` diff --git a/plugins/catalog-backend-module-msgraph/README.md b/plugins/catalog-backend-module-msgraph/README.md index a253359471..e0ead5e6d8 100644 --- a/plugins/catalog-backend-module-msgraph/README.md +++ b/plugins/catalog-backend-module-msgraph/README.md @@ -117,8 +117,8 @@ useHotCleanup( ```typescript // packages/backend/src/plugins/catalog.ts builder.addProcessor( - MicrosoftGraphOrgReaderProcessor.fromConfig(config, { - logger, + MicrosoftGraphOrgReaderProcessor.fromConfig(env.config, { + logger: env.logger, }), ); ``` @@ -173,8 +173,8 @@ export async function myGroupTransformer( ```ts builder.addProcessor( - MicrosoftGraphOrgReaderProcessor.fromConfig(config, { - logger, + MicrosoftGraphOrgReaderProcessor.fromConfig(env.config, { + logger: env.logger, groupTransformer: myGroupTransformer, }), ); diff --git a/plugins/jenkins-backend/README.md b/plugins/jenkins-backend/README.md index 443cb33c05..d10edc3e69 100644 --- a/plugins/jenkins-backend/README.md +++ b/plugins/jenkins-backend/README.md @@ -31,17 +31,17 @@ import { CatalogClient } from '@backstage/catalog-client'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - config, - discovery, -}: PluginEnvironment): Promise { - const catalog = new CatalogClient({ discoveryApi: discovery }); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const catalog = new CatalogClient({ + discoveryApi: env.discovery, + }); return await createRouter({ - logger, + logger: env.logger, jenkinsInfoProvider: DefaultJenkinsInfoProvider.fromConfig({ - config, + config: env.config, catalog, }), }); diff --git a/plugins/kafka/README.md b/plugins/kafka/README.md index 7da44ae9b6..9de9bd7d71 100644 --- a/plugins/kafka/README.md +++ b/plugins/kafka/README.md @@ -18,13 +18,16 @@ In a new file named `kafka.ts` under `backend/src/plugins`: ```js import { createRouter } from '@backstage/plugin-kafka-backend'; +import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - config, -}: PluginEnvironment) { - return await createRouter({ logger, config }); +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + return await createRouter({ + logger: env.logger, + config: env.config, + }); } ``` diff --git a/plugins/scaffolder-backend-module-cookiecutter/README.md b/plugins/scaffolder-backend-module-cookiecutter/README.md index f40200ee4d..efbe9e2a22 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/README.md +++ b/plugins/scaffolder-backend-module-cookiecutter/README.md @@ -22,7 +22,7 @@ Configure the action: const actions = [ createFetchCookiecutterAction({ integrations, - reader, + reader: env.reader, containerRunner, }), ...createBuiltInActions({ @@ -32,12 +32,12 @@ const actions = [ return await createRouter({ containerRunner, - logger, - config, - database, catalogClient, - reader, actions, + logger: env.logger, + config: env.config, + database: env.database, + reader: env.reader, }); ``` diff --git a/plugins/scaffolder-backend-module-rails/README.md b/plugins/scaffolder-backend-module-rails/README.md index 6236549c9d..7fcd298b42 100644 --- a/plugins/scaffolder-backend-module-rails/README.md +++ b/plugins/scaffolder-backend-module-rails/README.md @@ -26,19 +26,19 @@ see all options): const actions = [ createFetchRailsAction({ integrations, - reader, + reader: env.reader, containerRunner, }), ]; return await createRouter({ containerRunner, - logger, - config, - database, catalogClient, - reader, actions, + logger: env.logger, + config: env.config, + database: env.database, + reader: env.reader, }); ``` diff --git a/plugins/scaffolder-backend-module-yeoman/README.md b/plugins/scaffolder-backend-module-yeoman/README.md index 4cc57eac4a..64be671145 100644 --- a/plugins/scaffolder-backend-module-yeoman/README.md +++ b/plugins/scaffolder-backend-module-yeoman/README.md @@ -23,21 +23,21 @@ const actions = [ createRunYeomanAction(), ...createBuiltInActions({ containerRunner, - integrations, - config, catalogClient, - reader, + integrations, + config: env.config, + reader: env.reader, }), ]; return await createRouter({ containerRunner, - logger, - config, - database, catalogClient, - reader, actions, + logger: env.logger, + config: env.config, + database: env.database, + reader: env.reader, }); ``` diff --git a/plugins/tech-insights-backend-module-jsonfc/README.md b/plugins/tech-insights-backend-module-jsonfc/README.md index aab57fae91..c7a018c5fc 100644 --- a/plugins/tech-insights-backend-module-jsonfc/README.md +++ b/plugins/tech-insights-backend-module-jsonfc/README.md @@ -21,14 +21,14 @@ and modify the `techInsights.ts` file to contain a reference to the FactCheckers +const myFactCheckerFactory = new JsonRulesEngineFactCheckerFactory({ + checks: [], -+ logger, ++ logger: env.logger, +}), const builder = buildTechInsightsContext({ - logger, - config, - database, - discovery, + logger: env.logger, + config: env.config, + database: env.database, + discovery: env.discovery, factRetrievers: [myFactRetrieverRegistration], + factCheckerFactory: myFactCheckerFactory }); @@ -40,7 +40,7 @@ By default this implementation comes with an in-memory storage to store checks. const myTechInsightCheckRegistry: TechInsightCheckRegistry = // snip const myFactCheckerFactory = new JsonRulesEngineFactCheckerFactory({ checks: [], - logger, + logger: env.logger, + checkRegistry: myTechInsightCheckRegistry }), @@ -95,7 +95,7 @@ json-rules-engine supports a limited [number of built-in operators](https://gith const myFactCheckerFactory = new JsonRulesEngineFactCheckerFactory({ checks: [], - logger, + logger: env.logger, + operators: [ new Operator("startsWith", (a, b) => a.startsWith(b) ] }) ``` diff --git a/plugins/tech-insights-backend/README.md b/plugins/tech-insights-backend/README.md index 80b21c2dd4..275adaa15c 100644 --- a/plugins/tech-insights-backend/README.md +++ b/plugins/tech-insights-backend/README.md @@ -27,24 +27,21 @@ import { import { Router } from 'express'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - config, - discovery, - database, -}: PluginEnvironment): Promise { +export default async function createPlugin( + env: PluginEnvironment, +): Promise { const builder = buildTechInsightsContext({ - logger, - config, - database, - discovery, + logger: env.logger, + config: env.config, + database: env.database, + discovery: env.discovery, factRetrievers: [], // Fact retrievers registrations you want tech insights to use }); return await createRouter({ ...(await builder), - logger, - config, + logger: env.logger, + config: env.config, }); } ``` @@ -103,10 +100,10 @@ To register these fact retrievers to your application you can modify the example ```diff const builder = new DefaultTechInsightsBuilder({ - logger, - config, - database, - discovery, + logger: env.logger, + config: env.config, + database: env.database, + discovery: env.discovery, - factRetrievers: [], + factRetrievers: [myFactRetrieverRegistration], }); @@ -118,10 +115,10 @@ Current logic on running scheduled fact retrievers is intended to be executed in ```diff const builder = new DefaultTechInsightsBuilder({ - logger, - config, - database, - discovery, + logger: env.logger, + config: env.config, + database: env.database, + discovery: env.discovery, - factRetrievers: [], + factRetrievers: process.env.MAIN_FACT_RETRIEVER_INSTANCE ? [myFactRetrieverRegistration] : [], }); @@ -210,14 +207,14 @@ and modify the `techInsights.ts` file to contain a reference to the FactChecker +const myFactCheckerFactory = new JsonRulesEngineFactCheckerFactory({ + checks: [], -+ logger, ++ logger: env.logger, +}), const builder = new DefaultTechInsightsBuilder({ - logger, - config, - database, - discovery, + logger: env.logger, + config: env.config, + database: env.database, + discovery: env.discovery, factRetrievers: [myFactRetrieverRegistration], + factCheckerFactory: myFactCheckerFactory }); @@ -233,7 +230,7 @@ The default FactChecker implementation comes with an in-memory storage to store const myTechInsightCheckRegistry: TechInsightCheckRegistry = // snip const myFactCheckerFactory = new JsonRulesEngineFactCheckerFactory({ checks: [], - logger, + logger: env.logger, + checkRegistry: myTechInsightCheckRegistry }), diff --git a/plugins/todo-backend/README.md b/plugins/todo-backend/README.md index 5540ca598e..4015087b02 100644 --- a/plugins/todo-backend/README.md +++ b/plugins/todo-backend/README.md @@ -16,17 +16,18 @@ import { } from '@backstage/plugin-todo-backend'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - reader, - config, - discovery, -}: PluginEnvironment): Promise { - const todoReader = TodoScmReader.fromConfig(config, { - logger, - reader, +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const todoReader = TodoScmReader.fromConfig(env.config, { + logger: env.logger, + reader: env.reader, }); - const catalogClient = new CatalogClient({ discoveryApi: discovery }); + + const catalogClient = new CatalogClient({ + discoveryApi: discovery, + }); + const todoService = new TodoReaderService({ todoReader, catalogClient, @@ -66,9 +67,9 @@ import { // ... -const todoReader = TodoScmReader.fromConfig(config, { - logger, - reader, +const todoReader = TodoScmReader.fromConfig(env.config, { + logger: env.logger, + reader: env.reader, parser: createTodoParser({ additionalTags: ['NOTE', 'XXX'], }), diff --git a/plugins/todo/README.md b/plugins/todo/README.md index 63b36de0d8..fd3a7f4733 100644 --- a/plugins/todo/README.md +++ b/plugins/todo/README.md @@ -26,17 +26,18 @@ import { } from '@backstage/plugin-todo-backend'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ - logger, - reader, - config, - discovery, -}: PluginEnvironment): Promise { - const todoReader = TodoScmReader.fromConfig(config, { - logger, - reader, +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + const todoReader = TodoScmReader.fromConfig(env.config, { + logger: env.logger, + reader: env.reader, }); - const catalogClient = new CatalogClient({ discoveryApi: discovery }); + + const catalogClient = new CatalogClient({ + discoveryApi: env.discovery, + }); + const todoService = new TodoReaderService({ todoReader, catalogClient, From a04dbc22d7003dd3024273bb26da5f53530cd189 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Mon, 14 Mar 2022 10:00:20 +0100 Subject: [PATCH 3/6] catalog-model: Remove EntityName & getEntityName Signed-off-by: Johan Haals --- .changeset/metal-beans-teach.md | 7 +++++++ packages/catalog-model/api-report.md | 6 ------ packages/catalog-model/src/entity/index.ts | 1 - packages/catalog-model/src/entity/ref.ts | 11 ----------- packages/catalog-model/src/index.ts | 2 +- packages/catalog-model/src/types.ts | 8 -------- 6 files changed, 8 insertions(+), 27 deletions(-) create mode 100644 .changeset/metal-beans-teach.md diff --git a/.changeset/metal-beans-teach.md b/.changeset/metal-beans-teach.md new file mode 100644 index 0000000000..f3971a2f29 --- /dev/null +++ b/.changeset/metal-beans-teach.md @@ -0,0 +1,7 @@ +--- +'@backstage/catalog-model': minor +--- + +**BREAKING**: Removed `EntityName`, use `CompoundEntityRef` type instead. + +**BREAKING**: Removed `getEntityName`, use `getCompoundEntityRef` instead. diff --git a/packages/catalog-model/api-report.md b/packages/catalog-model/api-report.md index eb0e4ad7f0..618c1f7b69 100644 --- a/packages/catalog-model/api-report.md +++ b/packages/catalog-model/api-report.md @@ -175,9 +175,6 @@ export type EntityMeta = JsonObject & { links?: EntityLink[]; }; -// @public @deprecated -export type EntityName = CompoundEntityRef; - // @public export const EntityPolicies: { allOf(policies: EntityPolicy[]): EntityPolicy; @@ -226,9 +223,6 @@ export class FieldFormatEntityPolicy implements EntityPolicy { // @public export function getCompoundEntityRef(entity: Entity): CompoundEntityRef; -// @public @deprecated -export const getEntityName: typeof getCompoundEntityRef; - // @public export function getEntitySourceLocation(entity: Entity): { type: string; diff --git a/packages/catalog-model/src/entity/index.ts b/packages/catalog-model/src/entity/index.ts index f46f53945f..45ee673167 100644 --- a/packages/catalog-model/src/entity/index.ts +++ b/packages/catalog-model/src/entity/index.ts @@ -35,7 +35,6 @@ export type { export * from './policies'; export { getCompoundEntityRef, - getEntityName, parseEntityRef, stringifyEntityRef, } from './ref'; diff --git a/packages/catalog-model/src/entity/ref.ts b/packages/catalog-model/src/entity/ref.ts index cfe979423f..e52a2e7fb0 100644 --- a/packages/catalog-model/src/entity/ref.ts +++ b/packages/catalog-model/src/entity/ref.ts @@ -44,17 +44,6 @@ function parseRefString(ref: string): { return { kind, namespace, name }; } -/** - * Extracts the kind, namespace and name that form the compound entity ref - * triplet of the given entity. - * - * @public - * @deprecated Use getCompoundEntityRef instead - * @param entity - An entity - * @returns The compound entity ref - */ -export const getEntityName = getCompoundEntityRef; - /** * Extracts the kind, namespace and name that form the compound entity ref * triplet of the given entity. diff --git a/packages/catalog-model/src/index.ts b/packages/catalog-model/src/index.ts index b5ccfed149..eec3d91468 100644 --- a/packages/catalog-model/src/index.ts +++ b/packages/catalog-model/src/index.ts @@ -24,5 +24,5 @@ export * from './entity'; export { EntityPolicies } from './EntityPolicies'; export * from './kinds'; export * from './location'; -export type { EntityName, CompoundEntityRef } from './types'; +export type { CompoundEntityRef } from './types'; export * from './validation'; diff --git a/packages/catalog-model/src/types.ts b/packages/catalog-model/src/types.ts index 7b3f23c64f..a66f34cc4d 100644 --- a/packages/catalog-model/src/types.ts +++ b/packages/catalog-model/src/types.ts @@ -25,11 +25,3 @@ export type CompoundEntityRef = { namespace: string; name: string; }; - -/** - * A complete entity name, with the full kind-namespace-name triplet. - * - * @deprecated Use CompoundEntityRef instead - * @public - */ -export type EntityName = CompoundEntityRef; From ced3016f2aa7937852b89f1dbc35d441ca8b09bb Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 14 Mar 2022 10:44:28 +0100 Subject: [PATCH 4/6] catalog-backend: removed CatalogEntityDocument Signed-off-by: Patrik Oldsberg --- .changeset/silent-fishes-dream.md | 5 +++++ plugins/catalog-backend/api-report.md | 7 ++----- plugins/catalog-backend/src/search/index.ts | 8 -------- 3 files changed, 7 insertions(+), 13 deletions(-) create mode 100644 .changeset/silent-fishes-dream.md diff --git a/.changeset/silent-fishes-dream.md b/.changeset/silent-fishes-dream.md new file mode 100644 index 0000000000..ea4b8c33c0 --- /dev/null +++ b/.changeset/silent-fishes-dream.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': minor +--- + +**BREAKING**: The deprecated `CatalogEntityDocument` export has been removed, it can be imported from `@backstage/plugin-catalog-common` instead. diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index 714fdffb87..31ee5af1f2 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -6,7 +6,7 @@ /// import { CatalogApi } from '@backstage/catalog-client'; -import { CatalogEntityDocument as CatalogEntityDocument_2 } from '@backstage/plugin-catalog-common'; +import { CatalogEntityDocument } from '@backstage/plugin-catalog-common'; import { CompoundEntityRef } from '@backstage/catalog-model'; import { ConditionalPolicyDecision } from '@backstage/plugin-permission-node'; import { Conditions } from '@backstage/plugin-permission-node'; @@ -174,9 +174,6 @@ export const catalogConditions: Conditions<{ >; }>; -// @public @deprecated (undocumented) -export type CatalogEntityDocument = CatalogEntityDocument_2; - // @public (undocumented) export type CatalogEnvironment = { logger: Logger; @@ -355,7 +352,7 @@ export class DefaultCatalogCollator { // (undocumented) protected discovery: PluginEndpointDiscovery; // (undocumented) - execute(): Promise; + execute(): Promise; // (undocumented) protected filter?: GetEntitiesRequest['filter']; // (undocumented) diff --git a/plugins/catalog-backend/src/search/index.ts b/plugins/catalog-backend/src/search/index.ts index eb5b1e7c22..2602f0fada 100644 --- a/plugins/catalog-backend/src/search/index.ts +++ b/plugins/catalog-backend/src/search/index.ts @@ -17,14 +17,6 @@ export { DefaultCatalogCollatorFactory } from './DefaultCatalogCollatorFactory'; export type { DefaultCatalogCollatorFactoryOptions } from './DefaultCatalogCollatorFactory'; -import { CatalogEntityDocument as CatalogEntityDocumentType } from '@backstage/plugin-catalog-common'; - -/** - * @deprecated import from `@backstage/plugin-catalog-common` instead - * @public - */ -export type CatalogEntityDocument = CatalogEntityDocumentType; - /** * todo(backstage/techdocs-core): stop exporting this in a future release. */ From 0f3520d4999400a68d1c5bd1a7a85a25b0cbace1 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 14 Mar 2022 10:49:47 +0100 Subject: [PATCH 5/6] catalog-react: remove deprecated formatEntityRefTitle Signed-off-by: Patrik Oldsberg --- .changeset/tricky-months-sort.md | 5 +++++ plugins/catalog-react/api-report.md | 3 --- .../src/components/EntityRefLink/humanize.test.ts | 2 +- .../catalog-react/src/components/EntityRefLink/humanize.ts | 3 --- plugins/catalog-react/src/components/EntityRefLink/index.ts | 2 +- 5 files changed, 7 insertions(+), 8 deletions(-) create mode 100644 .changeset/tricky-months-sort.md diff --git a/.changeset/tricky-months-sort.md b/.changeset/tricky-months-sort.md new file mode 100644 index 0000000000..43956932f7 --- /dev/null +++ b/.changeset/tricky-months-sort.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': minor +--- + +**BREAKING**: Removed the deprecated `formatEntityRefTitle`, use `humanizeEntityRef` instead. diff --git a/plugins/catalog-react/api-report.md b/plugins/catalog-react/api-report.md index 4912c857cf..8b5e10911b 100644 --- a/plugins/catalog-react/api-report.md +++ b/plugins/catalog-react/api-report.md @@ -401,9 +401,6 @@ export const favoriteEntityTooltip: ( isStarred: boolean, ) => 'Remove from favorites' | 'Add to favorites'; -// @public @deprecated (undocumented) -export const formatEntityRefTitle: typeof humanizeEntityRef; - // @public @deprecated (undocumented) export function getEntityMetadataEditUrl(entity: Entity): string | undefined; diff --git a/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts b/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts index b541946ece..d41d3c6635 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts +++ b/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts @@ -16,7 +16,7 @@ import { humanizeEntityRef } from './humanize'; -describe('formatEntityRefTitle', () => { +describe('humanizeEntityRef', () => { it('formats entity in default namespace', () => { const entity = { apiVersion: 'v1', diff --git a/plugins/catalog-react/src/components/EntityRefLink/humanize.ts b/plugins/catalog-react/src/components/EntityRefLink/humanize.ts index 0ade1da0b9..2f72a7ee3b 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/humanize.ts +++ b/plugins/catalog-react/src/components/EntityRefLink/humanize.ts @@ -20,9 +20,6 @@ import { DEFAULT_NAMESPACE, } from '@backstage/catalog-model'; -/** @public @deprecated please use {@link humanizeEntityRef} instead */ -export const formatEntityRefTitle = humanizeEntityRef; - /** @public */ export function humanizeEntityRef( entityRef: Entity | CompoundEntityRef, diff --git a/plugins/catalog-react/src/components/EntityRefLink/index.ts b/plugins/catalog-react/src/components/EntityRefLink/index.ts index 50394547a0..50ac3d4534 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/index.ts +++ b/plugins/catalog-react/src/components/EntityRefLink/index.ts @@ -18,4 +18,4 @@ export { EntityRefLink } from './EntityRefLink'; export type { EntityRefLinkProps } from './EntityRefLink'; export { EntityRefLinks } from './EntityRefLinks'; export type { EntityRefLinksProps } from './EntityRefLinks'; -export { humanizeEntityRef, formatEntityRefTitle } from './humanize'; +export { humanizeEntityRef } from './humanize'; From 077e7c132fe4ac28c636131b5c0465911d15b328 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 14 Mar 2022 12:08:20 +0100 Subject: [PATCH 6/6] catalog-backend: removed deprecated refresh interval symbols Signed-off-by: Patrik Oldsberg --- .changeset/odd-spoons-design.md | 10 ++++++ plugins/catalog-backend/api-report.md | 13 ------- .../catalog-backend/src/processing/index.ts | 10 ++---- .../catalog-backend/src/processing/refresh.ts | 23 ------------- .../src/service/CatalogBuilder.ts | 34 ------------------- 5 files changed, 12 insertions(+), 78 deletions(-) create mode 100644 .changeset/odd-spoons-design.md diff --git a/.changeset/odd-spoons-design.md b/.changeset/odd-spoons-design.md new file mode 100644 index 0000000000..1d0ca96015 --- /dev/null +++ b/.changeset/odd-spoons-design.md @@ -0,0 +1,10 @@ +--- +'@backstage/plugin-catalog-backend': minor +--- + +**BREAKING**: Removed the following deprecated symbols: + +- `catalogBuilder.setRefreshInterval`, use `catalogBuilder.setProcessingInterval` instead. +- `catalogBuilder.setRefreshIntervalSeconds`, use `catalogBuilder.setProcessingIntervalSeconds` instead. +- `createRandomRefreshInterval`, use `createRandomProcessingInterval` instead. +- `RefreshIntervalFunction`, use `ProcessingIntervalFunction` instead. diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index 714fdffb87..7623aada69 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -142,10 +142,6 @@ export class CatalogBuilder { processingInterval: ProcessingIntervalFunction, ): CatalogBuilder; setProcessingIntervalSeconds(seconds: number): CatalogBuilder; - // @deprecated - setRefreshInterval(refreshInterval: RefreshIntervalFunction): CatalogBuilder; - // @deprecated - setRefreshIntervalSeconds(seconds: number): CatalogBuilder; } // @alpha @@ -327,12 +323,6 @@ export function createRandomProcessingInterval(options: { maxSeconds: number; }): ProcessingIntervalFunction; -// @public @deprecated -export function createRandomRefreshInterval(options: { - minSeconds: number; - maxSeconds: number; -}): RefreshIntervalFunction; - // @public export function createRouter(options: RouterOptions): Promise; @@ -814,9 +804,6 @@ export type RecursivePartial = { : T[P]; }; -// @public @deprecated -export type RefreshIntervalFunction = () => number; - // @public export type RefreshOptions = { entityRef: string; diff --git a/plugins/catalog-backend/src/processing/index.ts b/plugins/catalog-backend/src/processing/index.ts index aec6a5d71c..315cea37d7 100644 --- a/plugins/catalog-backend/src/processing/index.ts +++ b/plugins/catalog-backend/src/processing/index.ts @@ -23,11 +23,5 @@ export type { } from './types'; export { DefaultCatalogProcessingOrchestrator } from './DefaultCatalogProcessingOrchestrator'; -export { - createRandomRefreshInterval, - createRandomProcessingInterval, -} from './refresh'; -export type { - RefreshIntervalFunction, - ProcessingIntervalFunction, -} from './refresh'; +export { createRandomProcessingInterval } from './refresh'; +export type { ProcessingIntervalFunction } from './refresh'; diff --git a/plugins/catalog-backend/src/processing/refresh.ts b/plugins/catalog-backend/src/processing/refresh.ts index 941c338912..f9f596cdb9 100644 --- a/plugins/catalog-backend/src/processing/refresh.ts +++ b/plugins/catalog-backend/src/processing/refresh.ts @@ -14,35 +14,12 @@ * limitations under the License. */ -/** - * Function that returns the catalog refresh interval in seconds. - * @deprecated use {@link ProcessingIntervalFunction} instead - * @public - */ -export type RefreshIntervalFunction = () => number; - /** * Function that returns the catalog processing interval in seconds. * @public */ export type ProcessingIntervalFunction = () => number; -/** - * Creates a function that returns a random refresh interval between minSeconds and maxSeconds. - * @returns A {@link RefreshIntervalFunction} that provides the next refresh interval - * @deprecated use {@link createRandomProcessingInterval} instead - * @public - */ -export function createRandomRefreshInterval(options: { - minSeconds: number; - maxSeconds: number; -}): RefreshIntervalFunction { - const { minSeconds, maxSeconds } = options; - return () => { - return Math.random() * (maxSeconds - minSeconds) + minSeconds; - }; -} - /** * Creates a function that returns a random processing interval between minSeconds and maxSeconds. * @returns A {@link ProcessingIntervalFunction} that provides the next processing interval diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts index 79edf3b221..8dd507c74e 100644 --- a/plugins/catalog-backend/src/service/CatalogBuilder.ts +++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts @@ -68,7 +68,6 @@ import { DefaultCatalogProcessingOrchestrator } from '../processing/DefaultCatal import { Stitcher } from '../stitching/Stitcher'; import { createRandomProcessingInterval, - RefreshIntervalFunction, ProcessingIntervalFunction, } from '../processing/refresh'; import { createRouter } from './createRouter'; @@ -179,25 +178,6 @@ export class CatalogBuilder { return this; } - /** - * Refresh interval determines how often entities should be refreshed. - * Seconds provided will be multiplied by 1.5 - * The default refresh duration is 100-150 seconds. - * setting this too low will potentially deplete request quotas to upstream services. - * - * @deprecated use {@link CatalogBuilder#setProcessingIntervalSeconds} instead - */ - setRefreshIntervalSeconds(seconds: number): CatalogBuilder { - this.env.logger.warn( - '[DEPRECATION] - CatalogBuilder.setRefreshIntervalSeconds is deprecated. Use CatalogBuilder.setProcessingIntervalSeconds instead.', - ); - this.processingInterval = createRandomProcessingInterval({ - minSeconds: seconds, - maxSeconds: seconds * 1.5, - }); - return this; - } - /** * Processing interval determines how often entities should be processed. * Seconds provided will be multiplied by 1.5 @@ -212,20 +192,6 @@ export class CatalogBuilder { return this; } - /** - * Overwrites the default refresh interval function used to spread - * entity updates in the catalog. - * - * @deprecated use {@link CatalogBuilder#setProcessingInterval} instead - */ - setRefreshInterval(refreshInterval: RefreshIntervalFunction): CatalogBuilder { - this.env.logger.warn( - '[DEPRECATION] - CatalogBuilder.setRefreshInterval is deprecated. Use CatalogBuilder.setProcessingInterval instead.', - ); - this.processingInterval = refreshInterval; - return this; - } - /** * Overwrites the default processing interval function used to spread * entity updates in the catalog.