Revert "Refactor"

This reverts commit 54f4eba561.

Signed-off-by: sblausten <sam@roadie.io>
This commit is contained in:
sblausten
2022-07-06 17:13:42 +02:00
parent 54f4eba561
commit 4f17e4eb55
15 changed files with 92 additions and 226 deletions
+3 -4
View File
@@ -1,10 +1,9 @@
---
'@backstage/plugin-tech-insights-node': patch
'@backstage/plugin-tech-insights-backend': minor
'@backstage/plugin-tech-insights-common': minor
'@backstage/plugin-tech-insights-node': minor
'@backstage/plugin-tech-insights-backend': patch
---
**Breaking**: The FactRetriever model is extended by adding a title and description fields and moved to the common package. This allows us to
**Breaking**: The FactRetriever model is extended by adding required title and description fields. This allows us to
display Fact Retrievers in the UI in future.
If you have existing custom `FactRetriever` implementations hardcoded, you'll need to add a `title` and `description` to them.
+1 -1
View File
@@ -9,7 +9,7 @@ import express from 'express';
import { FactChecker } from '@backstage/plugin-tech-insights-node';
import { FactCheckerFactory } from '@backstage/plugin-tech-insights-node';
import { FactLifecycle } from '@backstage/plugin-tech-insights-node';
import { FactRetriever } from '@backstage/plugin-tech-insights-common';
import { FactRetriever } from '@backstage/plugin-tech-insights-node';
import { FactRetrieverRegistration } from '@backstage/plugin-tech-insights-node';
import { FactSchema } from '@backstage/plugin-tech-insights-node';
import { Logger } from 'winston';
@@ -14,6 +14,7 @@
* limitations under the License.
*/
import {
FactRetriever,
FactRetrieverRegistration,
FactSchemaDefinition,
TechInsightFact,
@@ -29,15 +30,12 @@ import {
import { ConfigReader } from '@backstage/config';
import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils';
import { TaskScheduler } from '@backstage/backend-tasks';
import { FactRetriever } from '@backstage/plugin-tech-insights-common';
jest.useFakeTimers();
const testFactRetriever: FactRetriever = {
id: 'test_factretriever',
version: '0.0.1',
title: 'Test 1',
description: 'testing',
entityFilter: [{ kind: 'component' }],
schema: {
testnumberfact: {
@@ -15,6 +15,7 @@
*/
import {
FactLifecycle,
FactRetriever,
FactRetrieverContext,
FactRetrieverRegistration,
TechInsightFact,
@@ -24,7 +25,6 @@ import { FactRetrieverRegistry } from './FactRetrieverRegistry';
import { Logger } from 'winston';
import { PluginTaskScheduler } from '@backstage/backend-tasks';
import { Duration } from 'luxon';
import { FactRetriever } from '@backstage/plugin-tech-insights-common';
function randomDailyCron() {
const rand = (min: number, max: number) =>
@@ -15,11 +15,11 @@
*/
import {
FactRetriever,
FactRetrieverRegistration,
FactSchema,
} from '@backstage/plugin-tech-insights-node';
import { ConflictError, NotFoundError } from '@backstage/errors';
import { FactRetriever } from '@backstage/plugin-tech-insights-common';
/**
* @public
@@ -15,15 +15,15 @@
*/
import {
FactLifecycle,
FactRetriever,
FactRetrieverRegistration,
} from '@backstage/plugin-tech-insights-node';
import { FactRetriever } from '@backstage/plugin-tech-insights-common';
/**
* @public
*
* @param cadence - cron expression to indicate when the fact retriever should be triggered
* @param factRetriever - Implementation of fact retriever definition
* @param factRetriever - Implementation of fact retriever consisting of at least id, version, schema and handler
* @param lifecycle - Optional lifecycle definition indicating the cleanup logic of facts when this retriever is run
*
*/
@@ -14,11 +14,13 @@
* limitations under the License.
*/
import { FactRetrieverContext } from '@backstage/plugin-tech-insights-node';
import {
FactRetriever,
FactRetrieverContext,
} from '@backstage/plugin-tech-insights-node';
import { CatalogClient } from '@backstage/catalog-client';
import { Entity } from '@backstage/catalog-model';
import isEmpty from 'lodash/isEmpty';
import { FactRetriever } from '@backstage/plugin-tech-insights-common';
/**
* Generates facts which indicate the completeness of entity metadata.
@@ -14,10 +14,12 @@
* limitations under the License.
*/
import { FactRetrieverContext } from '@backstage/plugin-tech-insights-node';
import {
FactRetriever,
FactRetrieverContext,
} from '@backstage/plugin-tech-insights-node';
import { CatalogClient } from '@backstage/catalog-client';
import { Entity } from '@backstage/catalog-model';
import { FactRetriever } from '@backstage/plugin-tech-insights-common';
/**
* Generates facts which indicate the quality of data in the spec.owner field.
@@ -14,11 +14,13 @@
* limitations under the License.
*/
import { FactRetrieverContext } from '@backstage/plugin-tech-insights-node';
import {
FactRetriever,
FactRetrieverContext,
} from '@backstage/plugin-tech-insights-node';
import { CatalogClient } from '@backstage/catalog-client';
import { Entity } from '@backstage/catalog-model';
import { entityHasAnnotation, generateAnnotationFactName } from './utils';
import { FactRetriever } from '@backstage/plugin-tech-insights-common';
const techdocsAnnotation = 'backstage.io/techdocs-ref';
const techdocsAnnotationFactName =
@@ -4,10 +4,7 @@
```ts
import { DateTime } from 'luxon';
import { FactRetrieverContext } from '../../tech-insights-node';
import { FactSchema } from '../../tech-insights-node';
import { JsonValue } from '@backstage/types';
import { TechInsightFact } from '../../tech-insights-node';
// @public
export interface BooleanCheckResult extends CheckResult {
@@ -50,18 +47,5 @@ export type FactResponse = {
};
};
// @public
export interface FactRetriever {
description: string;
entityFilter?:
| Record<string, string | symbol | (string | symbol)[]>[]
| Record<string, string | symbol | (string | symbol)[]>;
handler: (ctx: FactRetrieverContext) => Promise<TechInsightFact[]>;
id: string;
schema: FactSchema;
title: string;
version: string;
}
// (No @packageDocumentation comment for this package)
```
+1 -2
View File
@@ -35,8 +35,7 @@
"dependencies": {
"@types/luxon": "^2.0.5",
"luxon": "^2.0.2",
"@backstage/types": "^1.0.0",
"@backstage/plugin-tech-insights-node": "^0.3.1"
"@backstage/types": "^1.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.18.0-next.1"
-62
View File
@@ -16,11 +16,6 @@
import { DateTime } from 'luxon';
import { JsonValue } from '@backstage/types';
import {
FactRetrieverContext,
FactSchema,
TechInsightFact,
} from '@backstage/plugin-tech-insights-node';
/**
* @public
@@ -106,63 +101,6 @@ export type FactResponse = {
};
};
/**
* FactRetriever interface
*
* @public
*/
export interface FactRetriever {
/**
* A unique identifier of the retriever.
* Used to identify and store individual facts returned from this retriever
* and schemas defined by this retriever.
*/
id: string;
/**
* Semver string indicating the version of this fact retriever
* This version is used to determine if the schema this fact retriever matches the data this fact retriever provides.
*
* Should be incremented on changes to returned data from the handler or if the schema changes.
*/
version: string;
/**
* A short display title for the fact retriever to be used in the interface
*/
title: string;
/**
* A short display description for the fact retriever to be used in the interface.
*/
description: string;
/**
* Handler function that needs to be implemented to retrieve fact values for entities.
*
* @param ctx - FactRetrieverContext which can be used to retrieve config and contact integrations
* @returns - A collection of TechInsightFacts grouped by entities.
*/
handler: (ctx: FactRetrieverContext) => Promise<TechInsightFact[]>;
/**
* A fact schema defining the shape of data returned from the handler method for each entity
*/
schema: FactSchema;
/**
* An optional object/array of objects of entity filters to indicate if this fact retriever is valid for an entity type.
* If omitted, the retriever should apply to all entities.
*
* Should be defined for example:
* \{ field: 'kind', values: \['component'\] \}
* \{ field: 'metadata.name', values: \['component-1', 'component-2'\] \}
*/
entityFilter?:
| Record<string, string | symbol | (string | symbol)[]>[]
| Record<string, string | symbol | (string | symbol)[]>;
}
/**
* Generic CheckResult
*
+13 -1
View File
@@ -8,7 +8,6 @@ import { Config } from '@backstage/config';
import { DateTime } from 'luxon';
import { Duration } from 'luxon';
import { DurationLike } from 'luxon';
import { FactRetriever } from '@backstage/plugin-tech-insights-common';
import { JsonValue } from '@backstage/types';
import { Logger } from 'winston';
import { PluginEndpointDiscovery } from '@backstage/backend-common';
@@ -45,6 +44,19 @@ export interface FactCheckerFactory<
// @public
export type FactLifecycle = TTL | MaxItems;
// @public
export interface FactRetriever {
description: string;
entityFilter?:
| Record<string, string | symbol | (string | symbol)[]>[]
| Record<string, string | symbol | (string | symbol)[]>;
handler: (ctx: FactRetrieverContext) => Promise<TechInsightFact[]>;
id: string;
schema: FactSchema;
title: string;
version: string;
}
// @public
export type FactRetrieverContext = {
config: Config;
+57 -1
View File
@@ -21,7 +21,6 @@ import {
TokenManager,
} from '@backstage/backend-common';
import { Logger } from 'winston';
import { FactRetriever } from '@backstage/plugin-tech-insights-common';
/**
* A container for facts. The shape of the fact records needs to correspond to the FactSchema with same `ref` value.
@@ -154,6 +153,63 @@ export type FactRetrieverContext = {
| Record<string, string | symbol | (string | symbol)[]>;
};
/**
* FactRetriever interface
*
* @public
*/
export interface FactRetriever {
/**
* A unique identifier of the retriever.
* Used to identify and store individual facts returned from this retriever
* and schemas defined by this retriever.
*/
id: string;
/**
* Semver string indicating the version of this fact retriever
* This version is used to determine if the schema this fact retriever matches the data this fact retriever provides.
*
* Should be incremented on changes to returned data from the handler or if the schema changes.
*/
version: string;
/**
* A short display title for the fact retriever to be used in the interface
*/
title: string;
/**
* A short display description for the fact retriever to be used in the interface.
*/
description: string;
/**
* Handler function that needs to be implemented to retrieve fact values for entities.
*
* @param ctx - FactRetrieverContext which can be used to retrieve config and contact integrations
* @returns - A collection of TechInsightFacts grouped by entities.
*/
handler: (ctx: FactRetrieverContext) => Promise<TechInsightFact[]>;
/**
* A fact schema defining the shape of data returned from the handler method for each entity
*/
schema: FactSchema;
/**
* An optional object/array of objects of entity filters to indicate if this fact retriever is valid for an entity type.
* If omitted, the retriever should apply to all entities.
*
* Should be defined for example:
* \{ field: 'kind', values: \['component'\] \}
* \{ field: 'metadata.name', values: \['component-1', 'component-2'\] \}
*/
entityFilter?:
| Record<string, string | symbol | (string | symbol)[]>[]
| Record<string, string | symbol | (string | symbol)[]>;
}
/**
* A Luxon duration like object for time to live value
*
-126
View File
@@ -1535,59 +1535,6 @@
"@babel/helper-validator-identifier" "^7.16.7"
to-fast-properties "^2.0.0"
"@backstage/backend-common@^0.14.0":
version "0.14.0"
resolved "https://registry.npmjs.org/@backstage/backend-common/-/backend-common-0.14.0.tgz#da7537c7a58ce596db36be3bb584b9c199f58296"
integrity sha512-xiEOknaWtyfiWcL8+fkQKMfSnpQr1FsKFX6xVc74Lrgmd46VMW7pbhDQULQDaeCN+jhwTfxCcsemhtcJjimq+w==
dependencies:
"@backstage/cli-common" "^0.1.9"
"@backstage/config" "^1.0.1"
"@backstage/config-loader" "^1.1.2"
"@backstage/errors" "^1.0.0"
"@backstage/integration" "^1.2.1"
"@backstage/types" "^1.0.0"
"@google-cloud/storage" "^6.0.0"
"@keyv/redis" "^2.2.3"
"@manypkg/get-packages" "^1.1.3"
"@octokit/rest" "^18.5.3"
"@types/cors" "^2.8.6"
"@types/dockerode" "^3.3.0"
"@types/express" "^4.17.6"
"@types/luxon" "^2.0.4"
"@types/webpack-env" "^1.15.2"
archiver "^5.0.2"
aws-sdk "^2.840.0"
base64-stream "^1.0.0"
compression "^1.7.4"
concat-stream "^2.0.0"
cors "^2.8.5"
dockerode "^3.3.1"
express "^4.17.1"
express-promise-router "^4.1.0"
fs-extra "10.1.0"
git-url-parse "^11.6.0"
helmet "^5.0.2"
isomorphic-git "^1.8.0"
jose "^4.6.0"
keyv "^4.0.3"
keyv-memcache "^1.2.5"
knex "^1.0.2"
lodash "^4.17.21"
logform "^2.3.2"
luxon "^2.3.1"
minimatch "^5.0.0"
minimist "^1.2.5"
morgan "^1.10.0"
node-abort-controller "^3.0.1"
node-fetch "^2.6.7"
raw-body "^2.4.1"
selfsigned "^2.0.0"
stoppable "^1.1.0"
tar "^6.1.2"
unzipper "^0.10.11"
winston "^3.2.1"
yn "^4.0.0"
"@backstage/catalog-client@^1.0.3":
version "1.0.3"
resolved "https://registry.npmjs.org/@backstage/catalog-client/-/catalog-client-1.0.3.tgz#cb91472ccc31df322f69e7e4e80939b3535660cd"
@@ -1610,27 +1557,6 @@
lodash "^4.17.21"
uuid "^8.0.0"
"@backstage/config-loader@^1.1.2":
version "1.1.2"
resolved "https://registry.npmjs.org/@backstage/config-loader/-/config-loader-1.1.2.tgz#72cb0d7b2647f5a646bb279360bc34732e06521f"
integrity sha512-c5ZO7xDJn609DBIsYAWGE5kgh+7SPYUmG2ADtVX9SbXaql3VCafGlhc2hAZQa/O12W04qi3GgwGg0bqSFmx5uw==
dependencies:
"@backstage/cli-common" "^0.1.9"
"@backstage/config" "^1.0.1"
"@backstage/errors" "^1.0.0"
"@backstage/types" "^1.0.0"
"@types/json-schema" "^7.0.6"
ajv "^8.10.0"
chokidar "^3.5.2"
fs-extra "10.1.0"
json-schema "^0.4.0"
json-schema-merge-allof "^0.8.1"
json-schema-traverse "^1.0.0"
node-fetch "^2.6.7"
typescript-json-schema "^0.53.0"
yaml "^1.9.2"
yup "^0.32.9"
"@backstage/core-components@^0.9.0", "@backstage/core-components@^0.9.5":
version "0.9.5"
resolved "https://registry.npmjs.org/@backstage/core-components/-/core-components-0.9.5.tgz#5a0b34867aaee0549bfa67b39a69c09588fa3c7a"
@@ -1821,19 +1747,6 @@
qs "^6.9.4"
react-use "^17.2.4"
"@backstage/plugin-tech-insights-node@^0.3.1":
version "0.3.1"
resolved "https://registry.npmjs.org/@backstage/plugin-tech-insights-node/-/plugin-tech-insights-node-0.3.1.tgz#d9bf40b07c57bac67b251ac8d53c0ad26ad2e651"
integrity sha512-okfIZIVUVdhejqmd9UHaVg42VukHPT0RIVeUblALXDxip9PND+W4hKgZTRs7/2Z/IWOxGyGLEwAkRG0QSLnysg==
dependencies:
"@backstage/backend-common" "^0.14.0"
"@backstage/config" "^1.0.1"
"@backstage/plugin-tech-insights-common" "^0.2.4"
"@backstage/types" "^1.0.0"
"@types/luxon" "^2.0.5"
luxon "^2.0.2"
winston "^3.2.1"
"@backstage/theme@^0.2.15", "@backstage/theme@^0.2.6", "@backstage/theme@^0.2.7", "@backstage/theme@^0.2.9":
version "0.2.15"
resolved "https://registry.npmjs.org/@backstage/theme/-/theme-0.2.15.tgz#478491c9bca9dca85d5af08767ba512eabcd3669"
@@ -17139,26 +17052,6 @@ kleur@^4.0.3, kleur@^4.1.4:
resolved "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz#8c202987d7e577766d039a8cd461934c01cda04d"
integrity sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==
knex@^1.0.2:
version "1.0.7"
resolved "https://registry.npmjs.org/knex/-/knex-1.0.7.tgz#965f4490efc451b140aac4c5c6efa39fd877597b"
integrity sha512-89jxuRATt4qJMb9ZyyaKBy0pQ4d5h7eOFRqiNFnUvsgU+9WZ2eIaZKrAPG1+F3mgu5UloPUnkVE5Yo2sKZUs6Q==
dependencies:
colorette "2.0.16"
commander "^9.1.0"
debug "4.3.4"
escalade "^3.1.1"
esm "^3.2.25"
get-package-type "^0.1.0"
getopts "2.3.0"
interpret "^2.2.0"
lodash "^4.17.21"
pg-connection-string "2.5.0"
rechoir "^0.8.0"
resolve-from "^5.0.0"
tarn "^3.0.2"
tildify "2.0.0"
knex@^2.0.0:
version "2.1.0"
resolved "https://registry.npmjs.org/knex/-/knex-2.1.0.tgz#9348aace3a08ff5be26eb1c8e838416ddf1aa216"
@@ -20527,11 +20420,6 @@ path-case@^3.0.4:
dot-case "^3.0.4"
tslib "^2.0.3"
path-equal@1.1.2:
version "1.1.2"
resolved "https://registry.npmjs.org/path-equal/-/path-equal-1.1.2.tgz#260e7c449c4c2022f68cc5fa6e617e892858250d"
integrity sha512-p5kxPPwCdbf5AdXzT1bUBJomhgBlEjRBavYNr1XUpMFIE4Hnf2roueCMXudZK5tnaAu1tTmp3GPzqwJK45IHEA==
path-equal@^1.1.2:
version "1.2.2"
resolved "https://registry.npmjs.org/path-equal/-/path-equal-1.2.2.tgz#fa2997f0a829de22ec8f5f86461ca5590d49b832"
@@ -25330,20 +25218,6 @@ typedarray@^0.0.6:
resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
typescript-json-schema@^0.53.0:
version "0.53.1"
resolved "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.53.1.tgz#9204547f3e145169b40928998366ff6d28b81d32"
integrity sha512-Hg+RnOKUd38MOzC0rDft03a8xvwO+gCcj1F77smw2tCoZYQpFoLtrXWBGdvCX+REliko5WYel2kux17HPFqjLQ==
dependencies:
"@types/json-schema" "^7.0.9"
"@types/node" "^16.9.2"
glob "^7.1.7"
path-equal "1.1.2"
safe-stable-stringify "^2.2.0"
ts-node "^10.2.1"
typescript "~4.6.0"
yargs "^17.1.1"
typescript-json-schema@^0.54.0:
version "0.54.0"
resolved "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.54.0.tgz#b3fc42ad90df6a0f6ab57571ebc8b4d41125df4f"