diff --git a/lib/workers/repository/update/pr/changelog/gitea/index.spec.ts b/lib/workers/repository/update/pr/changelog/gitea/index.spec.ts index bff07ba853a1dcf96a5d04e14989ca51461591a0..f1c09d2d5dbb7d0d34c5ba5fb40c680ce1ab0eba 100644 --- a/lib/workers/repository/update/pr/changelog/gitea/index.spec.ts +++ b/lib/workers/repository/update/pr/changelog/gitea/index.spec.ts @@ -109,7 +109,6 @@ describe('workers/repository/update/pr/changelog/gitea/index', () => { httpMock .scope(matchHost) .get('/api/v1/repos/meno/dropzone/tags') - .times(8) .reply(200, [ { name: 'v5.2.0', @@ -223,7 +222,6 @@ describe('workers/repository/update/pr/changelog/gitea/index', () => { httpMock .scope(matchHost) .get('/api/v1/repos/meno/dropzone/tags') - .times(8) .reply(200, []) .get('/api/v1/repos/meno/dropzone/contents') .times(4) @@ -259,7 +257,6 @@ describe('workers/repository/update/pr/changelog/gitea/index', () => { httpMock .scope(matchHost) .get('/api/v1/repos/meno/dropzone/tags') - .times(8) .replyWithError('Unknown gitea Repo') .get('/api/v1/repos/meno/dropzone/contents') .times(4) diff --git a/lib/workers/repository/update/pr/changelog/source.ts b/lib/workers/repository/update/pr/changelog/source.ts index 699eca945c67b2f26e47d9011856422cf2da79bd..92c5f610efe7cb0316903a99792b27d0df308b28 100644 --- a/lib/workers/repository/update/pr/changelog/source.ts +++ b/lib/workers/repository/update/pr/changelog/source.ts @@ -4,6 +4,7 @@ import { getPkgReleases } from '../../../../../modules/datasource'; import type { Release } from '../../../../../modules/datasource/types'; import * as allVersioning from '../../../../../modules/versioning'; import * as packageCache from '../../../../../util/cache/package'; +import { memoize } from '../../../../../util/memoize'; import { regEx } from '../../../../../util/regex'; import { parseUrl, trimSlashes } from '../../../../../util/url'; import type { BranchUpgradeConfig } from '../../../../types'; @@ -120,6 +121,7 @@ export abstract class ChangeLogSource { version.isGreaterThan(v, currentVersion) && !version.isGreaterThan(v, newVersion); + const getTags = memoize(() => this.getAllTags(apiBaseUrl, repository)); for (let i = 1; i < validReleases.length; i += 1) { const prev = validReleases[i - 1]; const next = validReleases[i]; @@ -139,20 +141,9 @@ export abstract class ChangeLogSource { changes: [], compare: {}, }; - const prevHead = await this.getRef( - version, - packageName, - prev, - apiBaseUrl, - repository - ); - const nextHead = await this.getRef( - version, - packageName, - next, - apiBaseUrl, - repository - ); + const tags = await getTags(); + const prevHead = this.getRef(version, packageName, prev, tags); + const nextHead = this.getRef(version, packageName, next, tags); if (is.nonEmptyString(prevHead) && is.nonEmptyString(nextHead)) { release.compare.url = this.getCompareURL( baseUrl, @@ -207,15 +198,12 @@ export abstract class ChangeLogSource { .find((tag) => version.equals(tag.replace(regex, ''), depNewVersion)); } - private async getRef( + private getRef( version: allVersioning.VersioningApi, packageName: string, release: Release, - apiBaseUrl: string, - repository: string - ): Promise<string | null> { - const tags = await this.getAllTags(apiBaseUrl, repository); - + tags: string[] + ): string | null { const tagName = this.findTagOfRelease( version, packageName,