Skip to content
Snippets Groups Projects
Unverified Commit 965b3ca8 authored by Trim21's avatar Trim21 Committed by GitHub
Browse files

feat(pypi): changelog lookup in project_urls (#6421)

parent 3a4e153a
No related branches found
No related tags found
No related merge requests found
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`datasource/pypi getReleases find url from project_urls 1`] = `
Object {
"changelogUrl": "https://github.com/Flexget/wiki/blob/master/ChangeLog.md",
"homepage": "https://flexget.com",
"releases": Array [],
"sourceUrl": "https://github.com/Flexget/Flexget",
}
`;
exports[`datasource/pypi getReleases process data from +simple endpoint 1`] = `
Object {
"releases": Array [
......@@ -206,14 +215,6 @@ Object {
}
`;
exports[`datasource/pypi getReleases return sourceUrl in project_urls 1`] = `
Object {
"homepage": "https://flexget.com",
"releases": Array [],
"sourceUrl": "https://github.com/Flexget/Flexget",
}
`;
exports[`datasource/pypi getReleases returns non-github home_page 1`] = `
Object {
"homepage": "https://microsoft.com",
......
......@@ -122,25 +122,28 @@ describe('datasource/pypi', () => {
})
).toMatchSnapshot();
});
it('return sourceUrl in project_urls', async () => {
got.mockReturnValueOnce({
body: {
info: {
it('find url from project_urls', async () => {
const info = {
name: 'flexget',
home_page: 'https://flexget.com',
project_urls: {
Forum: 'https://discuss.flexget.com',
Homepage: 'https://flexget.com',
changelog: 'https://github.com/Flexget/wiki/blob/master/ChangeLog.md',
'Issue Tracker': 'https://github.com/Flexget/Flexget/issues',
Repository: 'https://github.com/Flexget/Flexget',
},
},
};
got.mockReturnValueOnce({
body: {
info,
},
});
const result = await pypi.getReleases({
lookupName: 'flexget',
});
expect(result.sourceUrl).toBe('https://github.com/Flexget/Flexget');
expect(result.sourceUrl).toBe(info.project_urls.Repository);
expect(result.changelogUrl).toBe(info.project_urls.changelog);
expect(result).toMatchSnapshot();
});
it('returns null if mismatched name', async () => {
......
import url from 'url';
import is from '@sindresorhus/is';
import changelogFilenameRegex from 'changelog-filename-regex';
import { parse } from 'node-html-parser';
import { logger } from '../../logger';
import { Http } from '../../util/http';
......@@ -83,17 +84,34 @@ async function getDependency(
}
}
if (dep.info?.project_urls && !dependency.sourceUrl) {
if (dep.info?.project_urls) {
for (const [name, projectUrl] of Object.entries(dep.info.project_urls)) {
const lower = name.toLowerCase();
if (
lower.startsWith('repo') ||
!dependency.sourceUrl &&
(lower.startsWith('repo') ||
lower === 'code' ||
lower === 'source' ||
github_repo_pattern.exec(projectUrl)
github_repo_pattern.exec(projectUrl))
) {
dependency.sourceUrl = projectUrl;
break;
}
if (
!dependency.changelogUrl &&
([
'changelog',
'change log',
'changes',
'release notes',
'news',
"what's new",
].includes(lower) ||
changelogFilenameRegex.exec(lower))
) {
// from https://github.com/pypa/warehouse/blob/418c7511dc367fb410c71be139545d0134ccb0df/warehouse/templates/packaging/detail.html#L24
dependency.changelogUrl = projectUrl;
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment