Skip to content
Snippets Groups Projects
Select Git revision
  • 24d23dfc11f82e714d351f126587edd642d1299c
  • master default
2 results

index.js

Blame
  • user avatar
    Rhys Arkins authored
    Closes #15
    24d23dfc
    History
    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));
              });