Skip to content
Snippets Groups Projects
Select Git revision
  • 35b2ce8b42de9668a8c32532c16b240e643379de
  • master default
2 results

index.js

Blame
  • index.js 1.48 KiB
    const versioning = require('../../../versioning');
    const { addReleaseNotes } = require('../release-notes');
    
    const sourceGithub = require('./source-github');
    
    module.exports = {
      getChangeLogJSON,
    };
    
    const cacheNamespace = 'changelog';
    function getCacheKey({
      versionScheme,
      fromVersion,
      toVersion,
      repositoryUrl,
      releases,
    }) {
      return `${repositoryUrl}-${versionScheme}-${fromVersion}-${toVersion}-${
        releases ? releases.map(release => release.version).join('-') : ''
      }`;
    }
    
    async function getChangeLogJSON(args) {
      const { repositoryUrl, versionScheme, fromVersion, toVersion } = args;
      if (!repositoryUrl) {
        return null;
      }
      // releases is too noisy in the logs
      const { releases, ...param } = args;
      logger.debug({ param }, `getChangeLogJSON(args)`);
      const { equals } = versioning(versionScheme);
      if (!fromVersion || equals(fromVersion, toVersion)) {
        return null;
      }
      const cachedResult = await renovateCache.get(
        cacheNamespace,
        getCacheKey(args)
      );
      if (cachedResult) {
        return cachedResult;
      }
    
      try {
        const res = await sourceGithub.getChangeLogJSON({ ...args });
        const output = await addReleaseNotes(res);
        const cacheMinutes = 60;
        await renovateCache.set(
          cacheNamespace,
          getCacheKey(args),
          output,
          cacheMinutes
        );
        return output;
      } catch (err) /* istanbul ignore next */ {
        logger.error(
          { err, message: err.message, stack: err.stack },
          'getChangeLogJSON error'
        );
        return null;
      }
    }