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,