renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
64 lines (63 loc) • 2.45 kB
JavaScript
import { logger } from "../../../logger/index.js";
import { coerceArray } from "../../../util/array.js";
import { id } from "../../versioning/aws-eks-addon/index.js";
import { withCache } from "../../../util/cache/package/with-cache.js";
import { Datasource } from "../datasource.js";
import { EksAddonsFilter } from "./schema.js";
import { isTruthy } from "@sindresorhus/is";
import { DescribeAddonVersionsCommand, EKSClient } from "@aws-sdk/client-eks";
import { fromNodeProviderChain } from "@aws-sdk/credential-providers";
//#region lib/modules/datasource/aws-eks-addon/index.ts
var AwsEKSAddonDataSource = class AwsEKSAddonDataSource extends Datasource {
static id = "aws-eks-addon";
defaultVersioning = id;
caching = true;
clients = {};
constructor() {
super(AwsEKSAddonDataSource.id);
}
async _getReleases({ packageName: serializedFilter }) {
const res = EksAddonsFilter.safeParse(serializedFilter);
if (!res.success) {
logger.warn({
err: res.error,
serializedFilter
}, "Error parsing eks-addons config.");
return null;
}
const filter = res.data;
const cmd = new DescribeAddonVersionsCommand({
kubernetesVersion: filter.kubernetesVersion,
addonName: filter.addonName,
maxResults: 1
});
return { releases: coerceArray((await this.getClient(filter).send(cmd)).addons).flatMap((addon) => {
return addon.addonVersions;
}).filter(isTruthy).map((versionInfo) => ({
version: versionInfo.addonVersion ?? "",
default: versionInfo.compatibilities?.some((comp) => comp.defaultVersion) ?? false,
compatibleWith: versionInfo.compatibilities?.flatMap((comp) => comp.clusterVersion)
})).filter((release) => release.version && release.version !== "").filter((release) => {
if (filter.default) return release.default && release.default === filter.default;
return true;
}) };
}
getReleases(config) {
return withCache({
namespace: `datasource-${AwsEKSAddonDataSource.id}`,
key: `getReleases:${config.packageName}`,
fallback: true
}, () => this._getReleases(config));
}
getClient({ region, profile }) {
const cacheKey = `${region ?? "default"}#${profile ?? "default"}`;
if (!(cacheKey in this.clients)) this.clients[cacheKey] = new EKSClient({
...region && { region },
credentials: fromNodeProviderChain(profile ? { profile } : void 0)
});
return this.clients[cacheKey];
}
};
//#endregion
export { AwsEKSAddonDataSource };
//# sourceMappingURL=index.js.map