Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(darasource): checks and massage url in metadata #16632

Merged
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 27 additions & 16 deletions lib/modules/datasource/metadata.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,27 @@ import parse from 'github-url-from-git';
import { DateTime } from 'luxon';
import * as hostRules from '../../util/host-rules';
import { regEx } from '../../util/regex';
import { validateUrl } from '../../util/url';
import { parseUrl, validateUrl } from '../../util/url';
import { manualChangelogUrls, manualSourceUrls } from './metadata-manual';
import type { ReleaseResult } from './types';

const githubPages = regEx('^https://([^.]+).github.com/([^/]+)$');
const gitPrefix = regEx('^git:/?/?');

export function massageUrl(sourceUrl: string): string {
let massagedUrl = '';
const parsedUrl = URL.parse(sourceUrl);
if (parsedUrl.hostname === null) {
return massagedUrl;
}
if (parsedUrl.hostname.includes('gitlab.com')) {
Fixed Show fixed Hide fixed
massagedUrl = massageGitlabUrl(sourceUrl);
} else {
massagedUrl = massageGithubUrl(sourceUrl);
}
return massagedUrl;
}

export function massageGithubUrl(url: string): string {
let massagedUrl = url;

Expand Down Expand Up @@ -114,12 +128,15 @@ export function addMetaData(
) {
dep.sourceUrl = dep.changelogUrl;
}
// prettier-ignore
if (dep.homepage?.includes('github.com')) { // lgtm [js/incomplete-url-substring-sanitization]
if (!dep.sourceUrl) {
dep.sourceUrl = dep.homepage;

if (dep.homepage) {
const parsedHomePage = parseUrl(dep.homepage);
if (parsedHomePage?.hostname.includes('github.com')) {
Fixed Show fixed Hide fixed
if (!dep.sourceUrl) {
dep.sourceUrl = dep.homepage;
}
delete dep.homepage;
}
delete dep.homepage;
}
const extraBaseUrls = [];
// istanbul ignore next
Expand All @@ -128,21 +145,15 @@ export function addMetaData(
});
extraBaseUrls.push('gitlab.com');
if (dep.sourceUrl) {
const parsedUrl = URL.parse(dep.sourceUrl);
if (parsedUrl?.hostname) {
let massagedUrl;
if (parsedUrl.hostname.includes('gitlab')) {
massagedUrl = massageGitlabUrl(dep.sourceUrl);
} else {
massagedUrl = massageGithubUrl(dep.sourceUrl);
}
const massagedUrl = massageUrl(dep.sourceUrl);
if (is.emptyString(massagedUrl)) {
delete dep.sourceUrl;
} else {
// try massaging it
dep.sourceUrl =
parse(massagedUrl, {
extraBaseUrls,
}) || dep.sourceUrl;
} else {
delete dep.sourceUrl;
}
}

Expand Down