mirror of
https://github.com/renovatebot/renovate.git
synced 2026-11-09 05:32:24 +00:00
65 lines
1.8 KiB
JavaScript
65 lines
1.8 KiB
JavaScript
const ghGot = require('../platform/github/gh-got-wrapper');
|
|
const { isPinnedVersion, sortVersions } = require('../versioning/semver');
|
|
|
|
module.exports = {
|
|
getDependency,
|
|
getRepoTags,
|
|
};
|
|
|
|
async function getDependency(repo, options = {}) {
|
|
const ref = options.ref || 'tag';
|
|
const clean = options.clean === 'true';
|
|
let versions;
|
|
try {
|
|
if (ref === 'tag') {
|
|
const url = `repos/${repo}/git/refs/tags?per_page=100`;
|
|
const tagPrefix = 'refs/tags/';
|
|
versions = (await ghGot(url, { paginate: true })).body
|
|
.filter(o => o.ref && o.ref.startsWith(tagPrefix))
|
|
.map(o => o.ref.replace(tagPrefix, ''));
|
|
} else if (ref === 'release') {
|
|
const url = `repos/${repo}/releases?per_page=100`;
|
|
versions = (await ghGot(url, { paginate: true })).body.map(
|
|
o => o.tag_name
|
|
);
|
|
}
|
|
} catch (err) {
|
|
logger.warn(
|
|
{ repo, err, message: err.message },
|
|
'Error retrieving from github'
|
|
);
|
|
}
|
|
if (!versions) {
|
|
return null;
|
|
}
|
|
versions = versions.filter(isPinnedVersion);
|
|
if (clean) {
|
|
versions = versions.map(version => version.replace(/^v/, ''));
|
|
}
|
|
const dependency = {
|
|
repositoryUrl: 'https://github.com/' + repo,
|
|
versions: {},
|
|
};
|
|
versions.forEach(version => {
|
|
dependency.versions[version] = {};
|
|
});
|
|
return dependency;
|
|
}
|
|
|
|
async function getRepoTags(repo) {
|
|
try {
|
|
const url = `repos/${repo}/git/refs/tags?per_page=100`;
|
|
const res = (await ghGot(url, { paginate: true })).body;
|
|
logger.trace({ res });
|
|
const tagPrefix = 'refs/tags/';
|
|
return res
|
|
.filter(o => o.ref.startsWith(tagPrefix))
|
|
.map(o => o.ref.replace(tagPrefix, ''))
|
|
.filter(isPinnedVersion)
|
|
.sort(sortVersions);
|
|
} catch (err) /* istanbul ignore next */ {
|
|
logger.warn({ repo }, 'Could not fetch repo tags');
|
|
return [];
|
|
}
|
|
}
|