diff --git a/lib/workers/pr/changelog/index.js b/lib/workers/pr/changelog/index.js index bed8520f03f9bc66a79ef39277c3bdd32979ff3a..ad458ece326e35c26970305a47d16b1855420a7f 100644 --- a/lib/workers/pr/changelog/index.js +++ b/lib/workers/pr/changelog/index.js @@ -6,13 +6,6 @@ module.exports = { getChangeLogJSON, }; -const cacheNamespace = 'changelog'; -function getCacheKey({ repositoryUrl, releases }) { - return `${repositoryUrl}-${ - releases ? releases.map(release => release.version).join('-') : '' - }`; -} - async function getChangeLogJSON(args) { const { repositoryUrl, versionScheme, fromVersion, toVersion } = args; if (!repositoryUrl) { @@ -25,23 +18,8 @@ async function getChangeLogJSON(args) { 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 cacheMinutes = 60; - await renovateCache.set( - cacheNamespace, - getCacheKey(args), - res, - cacheMinutes - ); return res; } catch (err) /* istanbul ignore next */ { logger.error( diff --git a/lib/workers/pr/changelog/release-notes.js b/lib/workers/pr/changelog/release-notes.js index b1ece9e2ad632cbfdce16ad4026220e355174f3a..e29ddc19d76bf91befb5b16aee79c083ee8a728a 100644 --- a/lib/workers/pr/changelog/release-notes.js +++ b/lib/workers/pr/changelog/release-notes.js @@ -182,23 +182,39 @@ async function addReleaseNotes(input) { } const output = { ...input, versions: [] }; const repository = input.project.github.replace(/\.git$/, ''); + const cacheNamespace = 'changelog-github-notes'; + function getCacheKey(version) { + return `${repository}:${version}`; + } for (const v of input.versions) { - let releaseNotes = await getReleaseNotesMd( - repository, - v.version, - input.project.githubBaseURL - ); + let releaseNotes; + const cacheKey = getCacheKey(v.version); + releaseNotes = await renovateCache.get(cacheNamespace, cacheKey); if (!releaseNotes) { - logger.trace('No markdown release notes found for v' + v.version); - releaseNotes = await getReleaseNotes( + releaseNotes = await getReleaseNotesMd( repository, v.version, input.project.githubBaseURL ); - } - // Small hack to force display of release notes when there is a compare url - if (!releaseNotes && v.compare.url) { - releaseNotes = { url: v.compare.url }; + if (!releaseNotes) { + logger.trace('No markdown release notes found for v' + v.version); + releaseNotes = await getReleaseNotes( + repository, + v.version, + input.project.githubBaseURL + ); + } + // Small hack to force display of release notes when there is a compare url + if (!releaseNotes && v.compare.url) { + releaseNotes = { url: v.compare.url }; + } + const cacheMinutes = 30; + await renovateCache.set( + cacheNamespace, + cacheKey, + releaseNotes, + cacheMinutes + ); } output.versions.push({ ...v, diff --git a/lib/workers/pr/changelog/source-github.js b/lib/workers/pr/changelog/source-github.js index cc1068f1093669db52b7986c22794641d2171707..fd8bb8b4f58e8168a316d891fecef746fac2474a 100644 --- a/lib/workers/pr/changelog/source-github.js +++ b/lib/workers/pr/changelog/source-github.js @@ -108,6 +108,11 @@ async function getChangeLogJSON({ return getDateRef(config.endpoint, repository, release.releaseTimestamp); } + const cacheNamespace = 'changelog-github-release'; + function getCacheKey(version) { + return `${repository}:${version}`; + } + const changelogReleases = []; // compare versions const include = version => @@ -116,17 +121,30 @@ async function getChangeLogJSON({ const prev = validReleases[i - 1]; const next = validReleases[i]; if (include(next.version)) { - const release = { - version: next.version, - date: next.releaseTimestamp, - // put empty changes so that existing templates won't break - changes: [], - compare: {}, - }; - const prevHead = await getRef(prev); - const nextHead = await getRef(next); - if (prevHead && nextHead) { - release.compare.url = `${githubBaseURL}${repository}/compare/${prevHead}...${nextHead}`; + let release = await renovateCache.get( + cacheNamespace, + getCacheKey(next.version) + ); + if (!release) { + release = { + version: next.version, + date: next.releaseTimestamp, + // put empty changes so that existing templates won't break + changes: [], + compare: {}, + }; + const prevHead = await getRef(prev); + const nextHead = await getRef(next); + if (prevHead && nextHead) { + release.compare.url = `${githubBaseURL}${repository}/compare/${prevHead}...${nextHead}`; + } + const cacheMinutes = 30; + await renovateCache.set( + cacheNamespace, + getCacheKey(next.version), + release, + cacheMinutes + ); } changelogReleases.unshift(release); } diff --git a/test/workers/pr/changelog/__snapshots__/index.spec.js.snap b/test/workers/pr/changelog/__snapshots__/index.spec.js.snap index fd951caaa20866d50401442cf1b663bcfa1321ab..67581a19c878f369e10037190059c3d25f425bd6 100644 --- a/test/workers/pr/changelog/__snapshots__/index.spec.js.snap +++ b/test/workers/pr/changelog/__snapshots__/index.spec.js.snap @@ -163,12 +163,14 @@ Object { Object { "changes": Array [], "compare": Object {}, + "releaseNotes": undefined, "version": "2.5.2", }, Object { "changes": Array [], "compare": Object {}, "date": "2017-12-24T03:20:46.238Z", + "releaseNotes": undefined, "version": "2.4.2", }, Object {