forked from renovatebot/renovate
/
extract.ts
88 lines (77 loc) · 2.14 KB
/
extract.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import is from '@sindresorhus/is';
import { load } from 'js-yaml';
import { logger } from '../../../logger';
import { regEx } from '../../../util/regex';
import { HelmDatasource } from '../../datasource/helm';
import type {
ExtractConfig,
PackageDependency,
PackageFileContent,
} from '../types';
import type { HelmsmanDocument } from './types';
const chartRegex = regEx('^(?<registryRef>[^/]*)/(?<packageName>[^/]*)$');
function createDep(
key: string,
doc: HelmsmanDocument
): PackageDependency | null {
const dep: PackageDependency = {
depName: key,
datasource: HelmDatasource.id,
};
const anApp = doc.apps[key];
if (!anApp) {
return null;
}
if (!anApp.version) {
dep.skipReason = 'unspecified-version';
return dep;
}
dep.currentValue = anApp.version;
const regexResult = anApp.chart ? chartRegex.exec(anApp.chart) : null;
if (!regexResult?.groups) {
dep.skipReason = 'invalid-url';
return dep;
}
if (!is.nonEmptyString(regexResult.groups.packageName)) {
dep.skipReason = 'invalid-name';
return dep;
}
dep.packageName = regexResult.groups.packageName;
const registryUrl = doc.helmRepos[regexResult.groups.registryRef];
if (!is.nonEmptyString(registryUrl)) {
dep.skipReason = 'no-repository';
return dep;
}
dep.registryUrls = [registryUrl];
return dep;
}
export function extractPackageFile(
content: string,
fileName: string,
config: ExtractConfig
): PackageFileContent | null {
try {
// TODO: fix me (#9610)
const doc = load(content, {
json: true,
}) as HelmsmanDocument;
if (!(doc?.helmRepos && doc.apps)) {
logger.debug(`Missing helmRepos and/or apps keys in ${fileName}`);
return null;
}
const deps = Object.keys(doc.apps)
.map((key) => createDep(key, doc))
.filter(is.truthy); // filter null values
if (deps.length === 0) {
return null;
}
return { deps };
} catch (err) /* istanbul ignore next */ {
if (err.stack?.startsWith('YAMLException:')) {
logger.debug({ err }, 'YAML exception extracting');
} else {
logger.warn({ err }, 'Error extracting');
}
return null;
}
}