UNPKG

renovate

Version:

Automated dependency updates. Flexible so you don't need to be.

75 lines (74 loc) 2.71 kB
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