Select Git revision
index.js 6.46 KiB
const ghGot = require('gh-got');
const got = require('got');
const semver = require('semver');
const stable = require('semver-stable');
const token = process.env.RENOVATE_TOKEN;
const repoName = process.argv[2];
const userName = repoName.split('/')[0];
const packageFile = process.argv[3] || 'package.json';
let masterSHA;
let masterPackageJson;
ghGot(`repos/${repoName}/git/refs/head`, {token: token}).then(res => {
// First, get the SHA for master branch
res.body.forEach(function(branch) {
// Loop through all branches because master may not be the first
if (branch.ref === 'refs/heads/master') {
// This is the SHA we will create new branches from
masterSHA = branch.object.sha;
}
});
// Now, retrieve the master package.json
ghGot(`repos/${repoName}/contents/${packageFile}`, {token: token}).then(res => {
masterPackageJson = JSON.parse(new Buffer(res.body.content, 'base64').toString());
// Iterate through dependencies and then devDependencies
return iterateDependencies('dependencies')
.then(() => iterateDependencies('devDependencies'));
}).catch(err => {
console.log('Error reading master package.json');
});
});
function iterateDependencies(depType) {
const deps = masterPackageJson[depType];
if (!deps) {
return;
}
return Object.keys(deps).reduce((total, depName) => {
return total.then(() => {
const currentVersion = deps[depName].replace(/[^\d.]/g, '');
if (!semver.valid(currentVersion)) {
console.log('Invalid current version');
return;
}
// supports scoped packages, e.g. @user/package
return got(`https://registry.npmjs.org/${depName.replace('/', '%2F')}`, { json: true })
.then(res => {
let allUpgrades = {};
Object.keys(res.body['versions']).forEach(function(version) {
if (stable.is(currentVersion) && !stable.is(version)) {
return;
}
if (semver.gt(version, currentVersion)) {
var thisMajor = semver.major(version);
if (!allUpgrades[thisMajor] || semver.gt(version, allUpgrades[thisMajor])) {
allUpgrades[thisMajor] = version;
}
}
});
let upgradePromises = [];
Object.keys(allUpgrades).forEach(function(upgrade) {
const nextVersion = allUpgrades[upgrade];
upgradePromises.push(updateDependency(depType, depName, currentVersion, nextVersion));
});