renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
75 lines (74 loc) • 2.71 kB
JavaScript
import { parseYaml } from "../../../util/yaml.js";
import { readLocalFile } from "../../../util/fs/index.js";
import { GlasskubePackagesDatasource } from "../../datasource/glasskube-packages/index.js";
import { GlasskubeResource } from "./schema.js";
import { isFalsy } from "@sindresorhus/is";
//#region lib/modules/manager/glasskube/extract.ts
function parseResources(content, packageFile) {
const resources = parseYaml(content, {
customSchema: GlasskubeResource,
failureBehaviour: "filter"
});
const packages = [];
const repositories = [];
for (const resource of resources) if (resource.kind === "ClusterPackage" || resource.kind === "Package") packages.push(resource);
else if (resource.kind === "PackageRepository") repositories.push(resource);
return {
packageFile,
repositories,
packages
};
}
function resolvePackageDependencies(packages, repositories) {
const deps = [];
for (const pkg of packages) {
const dep = {
depName: pkg.spec.packageInfo.name,
currentValue: pkg.spec.packageInfo.version,
datasource: GlasskubePackagesDatasource.id
};
const repository = findRepository(pkg.spec.packageInfo.repositoryName ?? null, repositories);
if (repository === null) dep.skipReason = "unknown-registry";
else dep.registryUrls = [repository.spec.url];
deps.push(dep);
}
return deps;
}
function findRepository(name, repositories) {
for (const repository of repositories) {
if (name === repository.metadata.name) return repository;
if (isFalsy(name) && isDefaultRepository(repository)) return repository;
}
return null;
}
function isDefaultRepository(repository) {
return repository.metadata.annotations?.["packages.glasskube.dev/default-repository"] === "true";
}
function extractPackageFile(content, packageFile, _config) {
const { packages, repositories } = parseResources(content, packageFile);
return { deps: resolvePackageDependencies(packages, repositories) };
}
async function extractAllPackageFiles(_config, packageFiles) {
const allRepositories = [];
const glasskubeResourceFiles = [];
for (const packageFile of packageFiles) {
const content = await readLocalFile(packageFile, "utf8");
if (content !== null) {
const resources = parseResources(content, packageFile);
allRepositories.push(...resources.repositories);
glasskubeResourceFiles.push(resources);
}
}
const result = [];
for (const file of glasskubeResourceFiles) {
const deps = resolvePackageDependencies(file.packages, allRepositories);
if (deps.length > 0) result.push({
packageFile: file.packageFile,
deps
});
}
return result.length ? result : null;
}
//#endregion
export { extractAllPackageFiles, extractPackageFile };
//# sourceMappingURL=extract.js.map