Files
renovate/lib/datasource/github.js
T
2018-06-01 16:23:13 +02:00

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 [];
}
}