renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
62 lines (61 loc) • 2.65 kB
JavaScript
import { newlineRegex, regEx } from "../../../util/regex.js";
import { logger } from "../../../logger/index.js";
import { withDebugMessage } from "../../../util/schema-utils/index.js";
import { id } from "../../versioning/kubernetes-api/index.js";
import { KubernetesApiDatasource, supportedApis } from "../../datasource/kubernetes-api/index.js";
import { getDep } from "../dockerfile/extract.js";
import { KubernetesManifests } from "./schema.js";
//#region lib/modules/manager/kubernetes/extract.ts
function extractPackageFile(content, packageFile, config) {
logger.trace("kubernetes.extractPackageFile()");
if (!(regEx(/\s*apiVersion\s*:/).test(content) && regEx(/\s*kind\s*:/).test(content))) return null;
const manifests = KubernetesManifests.catch(withDebugMessage([], `${packageFile} does not match Kubernetes schema`)).parse(content);
const deps = [
...extractImages(content, config),
...extractImageVolumes(manifests, config),
...extractApis(manifests)
];
return deps.length ? { deps } : null;
}
const k8sImageRegex = regEx(`^\\s*-?\\s*image:\\s*['"]?(((?:(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(?:\\.(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))*|\\[(?:[a-fA-F0-9:]+)\\])(?::[0-9]+)?/)?[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*(?:/[a-z0-9]+(?:(?:[._]|__|[-]+)[a-z0-9]+)*)*)(?::([A-Za-z0-9_][A-Za-z0-9_.-]{0,127}))?(?:@([A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*[:][0-9a-fA-F]{32,}))?)['"]?\\s*`);
function extractImages(content, config) {
const deps = [];
for (const line of content.split(newlineRegex)) {
const match = k8sImageRegex.exec(line);
if (match) {
const currentFrom = match[1];
const dep = getDep(currentFrom, true, config.registryAliases);
logger.debug({
depName: dep.depName,
currentValue: dep.currentValue,
currentDigest: dep.currentDigest
}, "Kubernetes image");
deps.push(dep);
}
}
return deps;
}
function extractImageVolumes(manifests, config) {
const deps = [];
for (const manifest of manifests) for (const currentFrom of manifest.imageVolumeReferences) {
const dep = getDep(currentFrom, true, config.registryAliases);
logger.debug({
depName: dep.depName,
currentValue: dep.currentValue,
currentDigest: dep.currentDigest
}, "Kubernetes image volume");
deps.push(dep);
}
return deps;
}
function extractApis(manifests) {
return manifests.filter((m) => supportedApis.has(m.kind)).map((configuration) => ({
depName: configuration.kind,
currentValue: configuration.apiVersion,
datasource: KubernetesApiDatasource.id,
versioning: id
}));
}
//#endregion
export { extractPackageFile };
//# sourceMappingURL=extract.js.map