@axis-backstage/plugin-readme-backend 0.13.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +14 -0
- package/config.d.ts +6 -0
- package/dist/service/config.cjs.js +12 -0
- package/dist/service/config.cjs.js.map +1 -0
- package/dist/service/router.cjs.js +25 -15
- package/dist/service/router.cjs.js.map +1 -1
- package/package.json +12 -11
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -46,6 +46,20 @@ readme:
|
|
|
46
46
|
- README.markdown
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
+
To override the default TTL of the internal cache a duration can be set using the `cacheTtl` key. This can be either a string
|
|
50
|
+
or an object. The following examples should be equal.
|
|
51
|
+
|
|
52
|
+
```yaml
|
|
53
|
+
readme:
|
|
54
|
+
cacheTtl:
|
|
55
|
+
hours: 2
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
```yaml
|
|
59
|
+
readme:
|
|
60
|
+
cacheTtl: '2h'
|
|
61
|
+
```
|
|
62
|
+
|
|
49
63
|
### Troubleshooting
|
|
50
64
|
|
|
51
65
|
If the backend fails to provide README content for an entity, it could be due to several reasons.
|
package/config.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { HumanDuration } from '@backstage/types';
|
|
2
|
+
|
|
1
3
|
export interface Config {
|
|
2
4
|
/**
|
|
3
5
|
* Configuration options for the Readme backend plugin
|
|
@@ -8,5 +10,9 @@ export interface Config {
|
|
|
8
10
|
* when looking for a README file and which order to use.
|
|
9
11
|
*/
|
|
10
12
|
fileNames?: string[];
|
|
13
|
+
/**
|
|
14
|
+
* Optional cache TTL, defaults to 1 hour.
|
|
15
|
+
*/
|
|
16
|
+
cacheTtl?: HumanDuration | string;
|
|
11
17
|
};
|
|
12
18
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var config = require('@backstage/config');
|
|
4
|
+
var types = require('@backstage/types');
|
|
5
|
+
|
|
6
|
+
const CACHE_CONFIG_KEY = "readme.cacheTtl";
|
|
7
|
+
const getCacheTtl = (config$1) => config$1.has(CACHE_CONFIG_KEY) ? types.durationToMilliseconds(
|
|
8
|
+
config.readDurationFromConfig(config$1, { key: CACHE_CONFIG_KEY })
|
|
9
|
+
) : 36e5;
|
|
10
|
+
|
|
11
|
+
exports.getCacheTtl = getCacheTtl;
|
|
12
|
+
//# sourceMappingURL=config.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.cjs.js","sources":["../../src/service/config.ts"],"sourcesContent":["import { Config, readDurationFromConfig } from '@backstage/config';\nimport { durationToMilliseconds } from '@backstage/types';\n\nconst CACHE_CONFIG_KEY = 'readme.cacheTtl';\n\nexport const getCacheTtl = (config: Config): number =>\n config.has(CACHE_CONFIG_KEY)\n ? durationToMilliseconds(\n readDurationFromConfig(config, { key: CACHE_CONFIG_KEY }),\n )\n : 3_600_000;\n"],"names":["config","durationToMilliseconds","readDurationFromConfig"],"mappings":";;;;;AAGA,MAAM,gBAAmB,GAAA,iBAAA;AAElB,MAAM,cAAc,CAACA,QAAA,KAC1BA,QAAO,CAAA,GAAA,CAAI,gBAAgB,CACvB,GAAAC,4BAAA;AAAA,EACEC,6BAAuB,CAAAF,QAAA,EAAQ,EAAE,GAAA,EAAK,kBAAkB;AAC1D,CACA,GAAA;;;;"}
|
|
@@ -8,6 +8,7 @@ var errors = require('@backstage/errors');
|
|
|
8
8
|
var express = require('express');
|
|
9
9
|
var Router = require('express-promise-router');
|
|
10
10
|
var lib = require('../lib.cjs.js');
|
|
11
|
+
var config = require('./config.cjs.js');
|
|
11
12
|
var constants = require('./constants.cjs.js');
|
|
12
13
|
|
|
13
14
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
@@ -16,10 +17,11 @@ var express__default = /*#__PURE__*/_interopDefaultCompat(express);
|
|
|
16
17
|
var Router__default = /*#__PURE__*/_interopDefaultCompat(Router);
|
|
17
18
|
|
|
18
19
|
async function createRouter(options) {
|
|
19
|
-
const { auth, logger, config, reader, discovery, cache } = options;
|
|
20
|
+
const { auth, logger, config: config$1, reader, discovery, cache } = options;
|
|
20
21
|
const catalogClient$1 = new catalogClient.CatalogClient({ discoveryApi: discovery });
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
const cacheTtl = config.getCacheTtl(config$1);
|
|
23
|
+
logger.info(`Initializing readme backend. Cache TTL: ${cacheTtl}ms`);
|
|
24
|
+
const integrations = integration.ScmIntegrations.fromConfig(config$1);
|
|
23
25
|
const router = Router__default.default();
|
|
24
26
|
router.use(express__default.default.json());
|
|
25
27
|
router.get("/health", (_, response) => {
|
|
@@ -60,7 +62,7 @@ async function createRouter(options) {
|
|
|
60
62
|
response.status(500).json({ error: `No integration found for ${source.target}` });
|
|
61
63
|
return;
|
|
62
64
|
}
|
|
63
|
-
const readmeTypes = constants.getReadmeTypes(config);
|
|
65
|
+
const readmeTypes = constants.getReadmeTypes(config$1);
|
|
64
66
|
for (const fileType of readmeTypes) {
|
|
65
67
|
const url = integration.resolveUrl({
|
|
66
68
|
url: fileType.name,
|
|
@@ -80,11 +82,15 @@ async function createRouter(options) {
|
|
|
80
82
|
const symLinkUrlResponse = await reader.readUrl(symLinkUrl);
|
|
81
83
|
content = (await symLinkUrlResponse.buffer()).toString("utf-8");
|
|
82
84
|
}
|
|
83
|
-
cache.set(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
85
|
+
cache.set(
|
|
86
|
+
entityRef,
|
|
87
|
+
{
|
|
88
|
+
name: fileType.name,
|
|
89
|
+
type: fileType.type,
|
|
90
|
+
content
|
|
91
|
+
},
|
|
92
|
+
{ ttl: cacheTtl }
|
|
93
|
+
);
|
|
88
94
|
logger.info(
|
|
89
95
|
`Found README for ${entityRef}: ${url} type ${fileType.type}`
|
|
90
96
|
);
|
|
@@ -102,14 +108,18 @@ async function createRouter(options) {
|
|
|
102
108
|
}
|
|
103
109
|
}
|
|
104
110
|
logger.info(`Readme not found for ${entityRef}`);
|
|
105
|
-
cache.set(
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
111
|
+
cache.set(
|
|
112
|
+
entityRef,
|
|
113
|
+
{
|
|
114
|
+
name: constants.NOT_FOUND_PLACEHOLDER,
|
|
115
|
+
type: "",
|
|
116
|
+
content: ""
|
|
117
|
+
},
|
|
118
|
+
{ ttl: cacheTtl }
|
|
119
|
+
);
|
|
110
120
|
throw new errors.NotFoundError("Readme could not be found");
|
|
111
121
|
});
|
|
112
|
-
const middleware = rootHttpRouter.MiddlewareFactory.create({ logger, config });
|
|
122
|
+
const middleware = rootHttpRouter.MiddlewareFactory.create({ logger, config: config$1 });
|
|
113
123
|
router.use(middleware.error());
|
|
114
124
|
return router;
|
|
115
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.cjs.js","sources":["../../src/service/router.ts"],"sourcesContent":["import { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';\nimport {\n AuthService,\n CacheService,\n DiscoveryService,\n LoggerService,\n RootConfigService,\n UrlReaderService,\n} from '@backstage/backend-plugin-api';\nimport { ScmIntegrations } from '@backstage/integration';\nimport {\n getEntitySourceLocation,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport { CatalogClient } from '@backstage/catalog-client';\nimport { isError, NotFoundError } from '@backstage/errors';\nimport express from 'express';\nimport Router from 'express-promise-router';\nimport { isSymLink } from '../lib';\nimport { NOT_FOUND_PLACEHOLDER, getReadmeTypes } from './constants';\nimport { ReadmeFile } from './types';\n\n/**\n * Constructs a readme router.\n *\n */\ninterface RouterOptions {\n auth: AuthService;\n config: RootConfigService;\n discovery: DiscoveryService;\n logger: LoggerService;\n reader: UrlReaderService;\n cache: CacheService;\n}\n\n/**\n * Constructs a readme router.\n *\n */\nexport async function createRouter(\n options: RouterOptions,\n): Promise<express.Router> {\n const { auth, logger, config, reader, discovery, cache } = options;\n const catalogClient = new CatalogClient({ discoveryApi: discovery });\n\n logger.info(
|
|
1
|
+
{"version":3,"file":"router.cjs.js","sources":["../../src/service/router.ts"],"sourcesContent":["import { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';\nimport {\n AuthService,\n CacheService,\n DiscoveryService,\n LoggerService,\n RootConfigService,\n UrlReaderService,\n} from '@backstage/backend-plugin-api';\nimport { ScmIntegrations } from '@backstage/integration';\nimport {\n getEntitySourceLocation,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport { CatalogClient } from '@backstage/catalog-client';\nimport { isError, NotFoundError } from '@backstage/errors';\nimport express from 'express';\nimport Router from 'express-promise-router';\nimport { isSymLink } from '../lib';\nimport { getCacheTtl } from './config';\nimport { NOT_FOUND_PLACEHOLDER, getReadmeTypes } from './constants';\nimport { ReadmeFile } from './types';\n\n/**\n * Constructs a readme router.\n *\n */\ninterface RouterOptions {\n auth: AuthService;\n config: RootConfigService;\n discovery: DiscoveryService;\n logger: LoggerService;\n reader: UrlReaderService;\n cache: CacheService;\n}\n\n/**\n * Constructs a readme router.\n *\n */\nexport async function createRouter(\n options: RouterOptions,\n): Promise<express.Router> {\n const { auth, logger, config, reader, discovery, cache } = options;\n const catalogClient = new CatalogClient({ discoveryApi: discovery });\n const cacheTtl = getCacheTtl(config);\n\n logger.info(`Initializing readme backend. Cache TTL: ${cacheTtl}ms`);\n const integrations = ScmIntegrations.fromConfig(config);\n const router = Router();\n router.use(express.json());\n\n router.get('/health', (_, response) => {\n response.json({ status: 'ok' });\n });\n\n router.get('/:kind/:namespace/:name', async (request, response) => {\n const { kind, namespace, name } = request.params;\n const entityRef = stringifyEntityRef({ kind, namespace, name });\n const cacheDoc = (await cache.get(entityRef)) as ReadmeFile | undefined;\n\n if (cacheDoc && cacheDoc.name === NOT_FOUND_PLACEHOLDER) {\n throw new NotFoundError('Readme could not be found');\n }\n if (cacheDoc) {\n logger.info(`Loading README for ${entityRef} from cache.`);\n response.type(cacheDoc.type);\n response.send(cacheDoc.content);\n return;\n }\n const { token } = await auth.getPluginRequestToken({\n onBehalfOf: await auth.getOwnServiceCredentials(),\n targetPluginId: 'catalog',\n });\n const entity = await catalogClient.getEntityByRef(entityRef, { token });\n if (!entity) {\n logger.info(`No integration found for ${entityRef}`);\n response\n .status(500)\n .json({ error: `No integration found for ${entityRef}` });\n return;\n }\n const source = getEntitySourceLocation(entity);\n\n if (!source || source.type !== 'url') {\n const errorMessage = `Not valid location for ${source.target}`;\n logger.info(errorMessage);\n throw new NotFoundError(errorMessage);\n }\n const integration = integrations.byUrl(source.target);\n\n if (!integration) {\n logger.info(`No integration found for ${source.target}`);\n response\n .status(500)\n .json({ error: `No integration found for ${source.target}` });\n return;\n }\n\n const readmeTypes = getReadmeTypes(config);\n\n for (const fileType of readmeTypes) {\n const url = integration.resolveUrl({\n url: fileType.name,\n base: source.target,\n });\n\n let content;\n\n try {\n logger.debug(`Trying README location: ${url} for ${entityRef} `);\n response.type(fileType.type);\n\n const urlResponse = await reader.readUrl(url);\n content = (await urlResponse.buffer()).toString('utf-8');\n\n if (isSymLink(content)) {\n const symLinkUrl = integration.resolveUrl({\n url: content,\n base: source.target,\n });\n const symLinkUrlResponse = await reader.readUrl(symLinkUrl);\n content = (await symLinkUrlResponse.buffer()).toString('utf-8');\n }\n\n cache.set(\n entityRef,\n {\n name: fileType.name,\n type: fileType.type,\n content: content,\n },\n { ttl: cacheTtl },\n );\n logger.info(\n `Found README for ${entityRef}: ${url} type ${fileType.type}`,\n );\n response.send(content);\n return;\n } catch (error: unknown) {\n if (isError(error) && error.name === 'NotFoundError') {\n continue;\n } else {\n response.status(500).json({\n error: `Readme failure: ${error}`,\n });\n return;\n }\n }\n }\n logger.info(`Readme not found for ${entityRef}`);\n cache.set(\n entityRef,\n {\n name: NOT_FOUND_PLACEHOLDER,\n type: '',\n content: '',\n },\n { ttl: cacheTtl },\n );\n throw new NotFoundError('Readme could not be found');\n });\n\n const middleware = MiddlewareFactory.create({ logger, config });\n router.use(middleware.error());\n return router;\n}\n"],"names":["config","catalogClient","CatalogClient","getCacheTtl","ScmIntegrations","Router","express","stringifyEntityRef","NOT_FOUND_PLACEHOLDER","NotFoundError","getEntitySourceLocation","getReadmeTypes","isSymLink","isError","MiddlewareFactory"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axis-backstage/plugin-readme-backend",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"main": "dist/index.cjs.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -31,20 +31,21 @@
|
|
|
31
31
|
"postpack": "backstage-cli package postpack"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@backstage/backend-defaults": "^0.
|
|
35
|
-
"@backstage/backend-plugin-api": "^1.
|
|
36
|
-
"@backstage/catalog-client": "^1.
|
|
37
|
-
"@backstage/catalog-model": "^1.7.
|
|
34
|
+
"@backstage/backend-defaults": "^0.11.0",
|
|
35
|
+
"@backstage/backend-plugin-api": "^1.4.0",
|
|
36
|
+
"@backstage/catalog-client": "^1.10.1",
|
|
37
|
+
"@backstage/catalog-model": "^1.7.4",
|
|
38
|
+
"@backstage/config": "^1.3.2",
|
|
38
39
|
"@backstage/errors": "^1.2.7",
|
|
39
|
-
"@backstage/integration": "^1.
|
|
40
|
+
"@backstage/integration": "^1.17.0",
|
|
41
|
+
"@backstage/types": "^1.2.1",
|
|
40
42
|
"@types/express": "*",
|
|
41
43
|
"express": "^4.17.1",
|
|
42
44
|
"express-promise-router": "^4.1.0"
|
|
43
45
|
},
|
|
44
46
|
"devDependencies": {
|
|
45
|
-
"@backstage/backend-test-utils": "^1.
|
|
46
|
-
"@backstage/cli": "^0.
|
|
47
|
-
"@backstage/config": "^1.3.2",
|
|
47
|
+
"@backstage/backend-test-utils": "^1.6.0",
|
|
48
|
+
"@backstage/cli": "^0.33.0",
|
|
48
49
|
"@types/supertest": "^2.0.12",
|
|
49
50
|
"msw": "^2.7.3",
|
|
50
51
|
"supertest": "^6.2.4"
|
|
@@ -56,8 +57,8 @@
|
|
|
56
57
|
"configSchema": "config.d.ts",
|
|
57
58
|
"typesVersions": {
|
|
58
59
|
"*": {
|
|
59
|
-
"
|
|
60
|
-
"
|
|
60
|
+
"package.json": [
|
|
61
|
+
"package.json"
|
|
61
62
|
]
|
|
62
63
|
}
|
|
63
64
|
},
|