mirror of
https://github.com/renovatebot/renovate.git
synced 2026-11-01 10:09:50 +00:00
46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import { regEx } from '../../../util/regex';
|
|
import type { HelmRelease, RepoSource } from './types';
|
|
|
|
const chartRepo = regEx(/charts?|helm|helm-charts/i);
|
|
const githubUrl = regEx(
|
|
/^(?<url>https:\/\/github\.com\/[^/]+\/(?<repo>[^/]+))(:?\/|\/tree\/[^/]+\/(?<path>.+))?$/
|
|
);
|
|
const githubRelease = regEx(
|
|
/^(https:\/\/github\.com\/[^/]+\/[^/]+)\/releases\//
|
|
);
|
|
|
|
export function findSourceUrl(release: HelmRelease): RepoSource {
|
|
// it's a github release :)
|
|
const releaseMatch = githubRelease.exec(release.urls[0]);
|
|
if (releaseMatch) {
|
|
return { sourceUrl: releaseMatch[1] };
|
|
}
|
|
|
|
if (release.home) {
|
|
const githubUrlMatch = githubUrl.exec(release.home);
|
|
if (githubUrlMatch?.groups && chartRepo.test(githubUrlMatch?.groups.repo)) {
|
|
return {
|
|
sourceUrl: githubUrlMatch.groups.url,
|
|
sourceDirectory: githubUrlMatch.groups.path,
|
|
};
|
|
}
|
|
}
|
|
|
|
if (!release.sources?.length) {
|
|
return {};
|
|
}
|
|
|
|
for (const url of release.sources) {
|
|
const githubUrlMatch = githubUrl.exec(url);
|
|
if (githubUrlMatch?.groups && chartRepo.test(githubUrlMatch?.groups.repo)) {
|
|
return {
|
|
sourceUrl: githubUrlMatch.groups.url,
|
|
sourceDirectory: githubUrlMatch.groups.path,
|
|
};
|
|
}
|
|
}
|
|
|
|
// fallback
|
|
return { sourceUrl: release.sources[0] };
|
|
}
|