From 4024b374495a8e9ad216fbc93dd2411b63249719 Mon Sep 17 00:00:00 2001 From: "Fernando.Teixeira" Date: Wed, 25 Jan 2023 14:09:15 -0500 Subject: [PATCH] feat(tech-inights): adds getFactSchemas method to client Signed-off-by: Fernando.Teixeira --- .changeset/four-candles-add.md | 18 ++++++ .../src/service/fact/FactRetrieverRegistry.ts | 2 +- plugins/tech-insights-common/src/index.ts | 57 ++++++++++++++++++ plugins/tech-insights-node/src/facts.ts | 58 +------------------ plugins/tech-insights-node/src/persistence.ts | 2 +- .../tech-insights/src/api/TechInsightsApi.ts | 2 + .../src/api/TechInsightsClient.ts | 5 ++ 7 files changed, 85 insertions(+), 59 deletions(-) create mode 100644 .changeset/four-candles-add.md diff --git a/.changeset/four-candles-add.md b/.changeset/four-candles-add.md new file mode 100644 index 0000000000..bf465181b1 --- /dev/null +++ b/.changeset/four-candles-add.md @@ -0,0 +1,18 @@ +--- +'@backstage/plugin-tech-insights-backend': minor +'@backstage/plugin-tech-insights-common': minor +'@backstage/plugin-tech-insights-node': minor +'@backstage/plugin-tech-insights': minor +--- + +TechInsightsApi interface now has getFactSchemas() method. +TechInsightsClient now implements method getFactSchemas(). + +**BREAKING** FactSchema type moved from @backstage/plugin-tech-insights-node into @backstage/plugin-tech-insights-common + +These changes are **required** if you were importing this type directly. + +```diff +- import { FactSchema } from '@backstage/plugin-tech-insights-node'; ++ import { FactSchema } from '@backstage/plugin-tech-insights-common'; +``` diff --git a/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts b/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts index 62adbad8e3..8796f1511a 100644 --- a/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts +++ b/plugins/tech-insights-backend/src/service/fact/FactRetrieverRegistry.ts @@ -17,8 +17,8 @@ import { FactRetriever, FactRetrieverRegistration, - FactSchema, } from '@backstage/plugin-tech-insights-node'; +import { FactSchema } from '@backstage/plugin-tech-insights-common'; import { ConflictError, NotFoundError } from '@backstage/errors'; /** diff --git a/plugins/tech-insights-common/src/index.ts b/plugins/tech-insights-common/src/index.ts index 66af5c2f93..a74c1f16e9 100644 --- a/plugins/tech-insights-common/src/index.ts +++ b/plugins/tech-insights-common/src/index.ts @@ -134,3 +134,60 @@ export type BulkCheckResponse = Array<{ entity: string; results: CheckResult[]; }>; + +/** + * A record type to specify individual fact shapes + * + * Used as part of a schema to validate, identify and generically construct usage implementations + * of individual fact values in the system. + * + * @public + */ +export type FactSchema = { + /** + * Name of the fact + */ + [name: string]: { + /** + * Type of the individual fact value + * + * Numbers are split into integers and floating point values. + * `set` indicates a collection of values, `object` indicates JSON serializable value + */ + type: + | 'integer' + | 'float' + | 'string' + | 'boolean' + | 'datetime' + | 'set' + | 'object'; + + /** + * A description of this individual fact value + */ + description: string; + + /** + * Optional semver string to indicate when this specific fact definition was added to the schema + */ + since?: string; + + /** + * Metadata related to an individual fact. + * Can contain links, additional description texts and other actionable data. + * + * Currently loosely typed, but in the future when patterns emerge, key shapes can be defined + * + * examples: + * ``` + * \{ + * link: 'https://sonarqube.mycompany.com/fix-these-issues', + * suggestion: 'To affect this value, you can do x, y, z', + * minValue: 0 + * \} + * ``` + */ + metadata?: Record; + }; +}; diff --git a/plugins/tech-insights-node/src/facts.ts b/plugins/tech-insights-node/src/facts.ts index a4a0834970..3619f8b66f 100644 --- a/plugins/tech-insights-node/src/facts.ts +++ b/plugins/tech-insights-node/src/facts.ts @@ -20,6 +20,7 @@ import { PluginEndpointDiscovery, TokenManager, } from '@backstage/backend-common'; +import { FactSchema } from '@backstage/plugin-tech-insights-common'; import { Logger } from 'winston'; /** @@ -79,63 +80,6 @@ export type FlatTechInsightFact = TechInsightFact & { id: string; }; -/** - * A record type to specify individual fact shapes - * - * Used as part of a schema to validate, identify and generically construct usage implementations - * of individual fact values in the system. - * - * @public - */ -export type FactSchema = { - /** - * Name of the fact - */ - [name: string]: { - /** - * Type of the individual fact value - * - * Numbers are split into integers and floating point values. - * `set` indicates a collection of values, `object` indicates JSON serializable value - */ - type: - | 'integer' - | 'float' - | 'string' - | 'boolean' - | 'datetime' - | 'set' - | 'object'; - - /** - * A description of this individual fact value - */ - description: string; - - /** - * Optional semver string to indicate when this specific fact definition was added to the schema - */ - since?: string; - - /** - * Metadata related to an individual fact. - * Can contain links, additional description texts and other actionable data. - * - * Currently loosely typed, but in the future when patterns emerge, key shapes can be defined - * - * examples: - * ``` - * \{ - * link: 'https://sonarqube.mycompany.com/fix-these-issues', - * suggestion: 'To affect this value, you can do x, y, z', - * minValue: 0 - * \} - * ``` - */ - metadata?: Record; - }; -}; - /** * @public * diff --git a/plugins/tech-insights-node/src/persistence.ts b/plugins/tech-insights-node/src/persistence.ts index 31fda403a8..73abb6c5af 100644 --- a/plugins/tech-insights-node/src/persistence.ts +++ b/plugins/tech-insights-node/src/persistence.ts @@ -14,13 +14,13 @@ * limitations under the License. */ import { - FactSchema, TechInsightFact, FlatTechInsightFact, FactSchemaDefinition, FactLifecycle, } from './facts'; import { DateTime } from 'luxon'; +import { FactSchema } from '@backstage/plugin-tech-insights-common'; /** * TechInsights Database diff --git a/plugins/tech-insights/src/api/TechInsightsApi.ts b/plugins/tech-insights/src/api/TechInsightsApi.ts index 166f1d2782..bb915e06dd 100644 --- a/plugins/tech-insights/src/api/TechInsightsApi.ts +++ b/plugins/tech-insights/src/api/TechInsightsApi.ts @@ -18,6 +18,7 @@ import { createApiRef } from '@backstage/core-plugin-api'; import { CheckResult, BulkCheckResponse, + FactSchema, } from '@backstage/plugin-tech-insights-common'; import { Check, InsightFacts } from './types'; import { CheckResultRenderer } from '../components/CheckResultRenderer'; @@ -49,4 +50,5 @@ export interface TechInsightsApi { checks?: Check[], ): Promise; getFacts(entity: CompoundEntityRef, facts: string[]): Promise; + getFactSchemas(): Promise; } diff --git a/plugins/tech-insights/src/api/TechInsightsClient.ts b/plugins/tech-insights/src/api/TechInsightsClient.ts index 6e85769b34..a1a2e7ff77 100644 --- a/plugins/tech-insights/src/api/TechInsightsClient.ts +++ b/plugins/tech-insights/src/api/TechInsightsClient.ts @@ -18,6 +18,7 @@ import { TechInsightsApi } from './TechInsightsApi'; import { BulkCheckResponse, CheckResult, + FactSchema, } from '@backstage/plugin-tech-insights-common'; import { Check, InsightFacts } from './types'; import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; @@ -69,6 +70,10 @@ export class TechInsightsClient implements TechInsightsApi { return this.api('/checks'); } + async getFactSchemas(): Promise { + return this.api('/fact-schemas'); + } + async runChecks( entityParams: CompoundEntityRef, checks?: string[],