From 33079e7ec5d2223d59ce2e1f6ab1178c1c9d42d8 Mon Sep 17 00:00:00 2001 From: Jamie Magee Date: Sat, 23 Nov 2019 22:14:23 +0100 Subject: [PATCH] fix(helm): convert to typescript (#4859) --- lib/datasource/helm/{index.js => index.ts} | 41 +- .../__snapshots__/helm.spec.ts.snap | 438 +----------------- 2 files changed, 28 insertions(+), 451 deletions(-) rename lib/datasource/helm/{index.js => index.ts} (73%) diff --git a/lib/datasource/helm/index.js b/lib/datasource/helm/index.ts similarity index 73% rename from lib/datasource/helm/index.js rename to lib/datasource/helm/index.ts index 10722a2ab2a1aa..64fc95635b118b 100644 --- a/lib/datasource/helm/index.js +++ b/lib/datasource/helm/index.ts @@ -1,9 +1,13 @@ import yaml from 'js-yaml'; +import { PkgReleaseConfig, ReleaseResult } from '../common'; import got from '../../util/got'; import { logger } from '../../logger'; -export async function getPkgReleases({ lookupName, registryUrls }) { +export async function getPkgReleases({ + lookupName, + registryUrls, +}: PkgReleaseConfig): Promise { if (!lookupName) { logger.warn(`lookupName was not provided to getPkgReleases`); return null; @@ -18,7 +22,7 @@ export async function getPkgReleases({ lookupName, registryUrls }) { logger.warn(`Couldn't get index.yaml file from ${helmRepository}`); return null; } - const releases = repositoryData[lookupName]; + const releases = repositoryData.find(chart => chart.name === lookupName); if (!releases) { logger.warn( { dependency: lookupName }, @@ -26,19 +30,19 @@ export async function getPkgReleases({ lookupName, registryUrls }) { ); return null; } - return { - releases, - }; + return releases; } -export async function getRepositoryData(repository) { +export async function getRepositoryData( + repository: string +): Promise { const cacheNamespace = 'datasource-helm'; const cacheKey = repository; const cachedIndex = await renovateCache.get(cacheNamespace, cacheKey); if (cachedIndex) { return cachedIndex; } - let res; + let res: any; try { res = await got('index.yaml', { baseUrl: repository }); if (!res || !res.body) { @@ -60,29 +64,28 @@ export async function getRepositoryData(repository) { logger.warn({ err }, `${repository} lookup failure: Unknown error`); return null; } - let result; try { const doc = yaml.safeLoad(res.body, { json: true }); if (!doc) { logger.warn(`Failed to parse index.yaml from ${repository}`); return null; } - result = {}; - Object.keys(doc.entries).forEach(depName => { - const versions = doc.entries[depName].map(release => ({ - version: release.version, - homepage: release.home, - sources: release.sources, - urls: release.urls, - })); - result[depName] = versions; - }); + const result: ReleaseResult[] = Object.entries(doc.entries).map( + ([k, v]: [string, any]): ReleaseResult => ({ + name: k, + homepage: v[0].home, + sourceUrl: v[0].sources ? v[0].sources[0] : undefined, + releases: v.map((x: any) => ({ + version: x.version, + })), + }) + ); const cacheMinutes = 20; await renovateCache.set(cacheNamespace, cacheKey, result, cacheMinutes); + return result; } catch (err) { logger.warn(`Failed to parse index.yaml from ${repository}`); logger.debug(err); return null; } - return result; } diff --git a/test/datasource/__snapshots__/helm.spec.ts.snap b/test/datasource/__snapshots__/helm.spec.ts.snap index 26a659db9bcba3..35054eababaaa4 100644 --- a/test/datasource/__snapshots__/helm.spec.ts.snap +++ b/test/datasource/__snapshots__/helm.spec.ts.snap @@ -2,609 +2,183 @@ exports[`datasource/helm getPkgReleases returns list of versions for normal response if index.yaml is cached 1`] = ` Object { + "homepage": "https://www.getambassador.io/", + "name": "ambassador", "releases": Array [ Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.7.0.tgz", - ], "version": "2.7.0", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.6.2.tgz", - ], "version": "2.6.2", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.6.1.tgz", - ], "version": "2.6.1", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.6.0.tgz", - ], "version": "2.6.0", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.5.1.tgz", - ], "version": "2.5.1", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.5.0.tgz", - ], "version": "2.5.0", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.4.1.tgz", - ], "version": "2.4.1", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.4.0.tgz", - ], "version": "2.4.0", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.3.1.tgz", - ], "version": "2.3.1", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.3.0.tgz", - ], "version": "2.3.0", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.2.5.tgz", - ], "version": "2.2.5", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.2.4.tgz", - ], "version": "2.2.4", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.2.3.tgz", - ], "version": "2.2.3", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.2.2.tgz", - ], "version": "2.2.2", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.2.1.tgz", - ], "version": "2.2.1", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.2.0.tgz", - ], "version": "2.2.0", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.1.0.tgz", - ], "version": "2.1.0", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.0.2.tgz", - ], "version": "2.0.2", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.0.1.tgz", - ], "version": "2.0.1", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.0.0.tgz", - ], "version": "2.0.0", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-1.1.5.tgz", - ], "version": "1.1.5", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-1.1.4.tgz", - ], "version": "1.1.4", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-1.1.3.tgz", - ], "version": "1.1.3", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-1.1.2.tgz", - ], "version": "1.1.2", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-1.1.1.tgz", - ], "version": "1.1.1", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-1.1.0.tgz", - ], "version": "1.1.0", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-1.0.0.tgz", - ], "version": "1.0.0", }, ], + "sourceUrl": "https://github.com/datawire/ambassador", } `; exports[`datasource/helm getPkgReleases returns list of versions for normal response if index.yaml is not cached 1`] = ` Object { + "homepage": "https://www.getambassador.io/", + "name": "ambassador", "releases": Array [ Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.7.0.tgz", - ], "version": "2.7.0", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.6.2.tgz", - ], "version": "2.6.2", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.6.1.tgz", - ], "version": "2.6.1", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.6.0.tgz", - ], "version": "2.6.0", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.5.1.tgz", - ], "version": "2.5.1", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.5.0.tgz", - ], "version": "2.5.0", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.4.1.tgz", - ], "version": "2.4.1", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.4.0.tgz", - ], "version": "2.4.0", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.3.1.tgz", - ], "version": "2.3.1", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.3.0.tgz", - ], "version": "2.3.0", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.2.5.tgz", - ], "version": "2.2.5", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.2.4.tgz", - ], "version": "2.2.4", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.2.3.tgz", - ], "version": "2.2.3", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.2.2.tgz", - ], "version": "2.2.2", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.2.1.tgz", - ], "version": "2.2.1", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.2.0.tgz", - ], "version": "2.2.0", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.1.0.tgz", - ], "version": "2.1.0", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.0.2.tgz", - ], "version": "2.0.2", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.0.1.tgz", - ], "version": "2.0.1", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-2.0.0.tgz", - ], "version": "2.0.0", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-1.1.5.tgz", - ], "version": "1.1.5", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-1.1.4.tgz", - ], "version": "1.1.4", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-1.1.3.tgz", - ], "version": "1.1.3", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-1.1.2.tgz", - ], "version": "1.1.2", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-1.1.1.tgz", - ], "version": "1.1.1", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-1.1.0.tgz", - ], "version": "1.1.0", }, Object { - "homepage": "https://www.getambassador.io/", - "sources": Array [ - "https://github.com/datawire/ambassador", - "https://github.com/prometheus/statsd_exporter", - ], - "urls": Array [ - "https://kubernetes-charts.storage.googleapis.com/ambassador-1.0.0.tgz", - ], "version": "1.0.0", }, ], + "sourceUrl": "https://github.com/datawire/ambassador", } `;