From a6580a6925e99d4dff497ea22308016b5ea403bb Mon Sep 17 00:00:00 2001 From: Michael Kriese <michael.kriese@visualon.de> Date: Mon, 9 Oct 2023 12:21:18 +0200 Subject: [PATCH] fix(changelogs): wrong release url (#25097) --- .../update/pr/changelog/gitea/index.spec.ts | 2 +- .../update/pr/changelog/gitea/index.ts | 2 +- .../update/pr/changelog/github/index.ts | 2 +- .../update/pr/changelog/gitlab/index.ts | 17 ++++--------- .../update/pr/changelog/release-notes.spec.ts | 24 ++++++++++++++----- .../update/pr/changelog/release-notes.ts | 8 +++---- .../repository/update/pr/changelog/types.ts | 2 +- .../repository/update/pr/index.spec.ts | 1 + 8 files changed, 32 insertions(+), 26 deletions(-) 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 f1c09d2d5d..a9316d67d9 100644 --- a/lib/workers/repository/update/pr/changelog/gitea/index.spec.ts +++ b/lib/workers/repository/update/pr/changelog/gitea/index.spec.ts @@ -208,7 +208,7 @@ describe('workers/repository/update/pr/changelog/gitea/index', () => { notesSourceUrl: 'https://gitea.com/api/v1/repos/meno/dropzone/releases', tag: 'v5.6.1', - url: 'https://gitea.com/api/v1/repos/meno/dropzone/releases/tag/v5.6.1', + url: 'https://gitea.com/meno/dropzone/releases/tag/v5.6.1', }, }, { version: '5.6.0' }, diff --git a/lib/workers/repository/update/pr/changelog/gitea/index.ts b/lib/workers/repository/update/pr/changelog/gitea/index.ts index 8f354fe6f1..fe99e2dfc0 100644 --- a/lib/workers/repository/update/pr/changelog/gitea/index.ts +++ b/lib/workers/repository/update/pr/changelog/gitea/index.ts @@ -83,7 +83,7 @@ export async function getReleaseList( ReleasesSchema ); return res.body.map((release) => ({ - url: `${apiUrl}/tag/${release.tag_name}`, + url: `${project.baseUrl}${project.repository}/releases/tag/${release.tag_name}`, notesSourceUrl: apiUrl, name: release.name, body: release.body, diff --git a/lib/workers/repository/update/pr/changelog/github/index.ts b/lib/workers/repository/update/pr/changelog/github/index.ts index dd03b25581..4bc1432afe 100644 --- a/lib/workers/repository/update/pr/changelog/github/index.ts +++ b/lib/workers/repository/update/pr/changelog/github/index.ts @@ -82,7 +82,7 @@ export async function getReleaseList( _release: ChangeLogRelease ): Promise<ChangeLogNotes[]> { logger.trace('github.getReleaseList()'); - const apiBaseUrl = project.apiBaseUrl!; // TODO #22198 + const apiBaseUrl = project.apiBaseUrl; const repository = project.repository; const notesSourceUrl = joinUrlParts( apiBaseUrl, diff --git a/lib/workers/repository/update/pr/changelog/gitlab/index.ts b/lib/workers/repository/update/pr/changelog/gitlab/index.ts index 711c14c329..889d7eb0d7 100644 --- a/lib/workers/repository/update/pr/changelog/gitlab/index.ts +++ b/lib/workers/repository/update/pr/changelog/gitlab/index.ts @@ -3,7 +3,6 @@ import { logger } from '../../../../../../logger'; import type { GitlabRelease } from '../../../../../../modules/datasource/gitlab-releases/types'; import type { GitlabTreeNode } from '../../../../../../types/platform/gitlab'; import { GitlabHttp } from '../../../../../../util/http/gitlab'; -import { ensureTrailingSlash } from '../../../../../../util/url'; import type { ChangeLogFile, ChangeLogNotes, @@ -21,9 +20,7 @@ export async function getReleaseNotesMd( ): Promise<ChangeLogFile | null> { logger.trace('gitlab.getReleaseNotesMd()'); const urlEncodedRepo = encodeURIComponent(repository); - const apiPrefix = `${ensureTrailingSlash( - apiBaseUrl - )}projects/${urlEncodedRepo}/repository/`; + const apiPrefix = `${apiBaseUrl}projects/${urlEncodedRepo}/repository/`; // https://docs.gitlab.com/13.2/ee/api/repositories.html#list-repository-tree const tree = ( @@ -64,20 +61,16 @@ export async function getReleaseList( _release: ChangeLogRelease ): Promise<ChangeLogNotes[]> { logger.trace('gitlab.getReleaseNotesMd()'); - // TODO #22198 - const apiBaseUrl = project.apiBaseUrl!; - // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion - const repository = project.repository!; + const apiBaseUrl = project.apiBaseUrl; + const repository = project.repository; const urlEncodedRepo = encodeURIComponent(repository); - const apiUrl = `${ensureTrailingSlash( - apiBaseUrl - )}projects/${urlEncodedRepo}/releases`; + const apiUrl = `${apiBaseUrl}projects/${urlEncodedRepo}/releases`; const res = await http.getJson<GitlabRelease[]>(`${apiUrl}?per_page=100`, { paginate: true, }); return res.body.map((release) => ({ - url: `${apiUrl}/${release.tag_name}`, + url: `${project.baseUrl}${repository}/-/releases/${release.tag_name}`, notesSourceUrl: apiUrl, name: release.name, body: release.description, diff --git a/lib/workers/repository/update/pr/changelog/release-notes.spec.ts b/lib/workers/repository/update/pr/changelog/release-notes.spec.ts index dda0633eb8..d3b72ae738 100644 --- a/lib/workers/repository/update/pr/changelog/release-notes.spec.ts +++ b/lib/workers/repository/update/pr/changelog/release-notes.spec.ts @@ -141,11 +141,21 @@ describe('workers/repository/update/pr/changelog/release-notes', () => { }); it('returns ChangeLogResult without release notes', async () => { + httpMock + .scope( + 'https://gitlab.com/api/v4/projects/gitlab-org%2Fgitter%2Fwebapp' + ) + .get('/repository/tree?per_page=100&path=lib') + .reply(200, []) + .get('/releases?per_page=100') + .reply(200, []); const input = { project: partial<ChangeLogProject>({ type: 'gitlab', - repository: 'https://gitlab.com/gitlab-org/gitter/webapp/', + repository: 'gitlab-org/gitter/webapp', sourceDirectory: 'lib', + apiBaseUrl: 'https://gitlab.com/api/v4/', + baseUrl: 'https://gitlab.com/', }), versions: [ partial<ChangeLogRelease>({ @@ -159,9 +169,11 @@ describe('workers/repository/update/pr/changelog/release-notes', () => { ).toEqual({ hasReleaseNotes: false, project: { - repository: 'https://gitlab.com/gitlab-org/gitter/webapp/', + repository: 'gitlab-org/gitter/webapp', type: 'gitlab', sourceDirectory: 'lib', + apiBaseUrl: 'https://gitlab.com/api/v4/', + baseUrl: 'https://gitlab.com/', }, versions: [ { @@ -252,13 +264,13 @@ describe('workers/repository/update/pr/changelog/release-notes', () => { notesSourceUrl: 'https://gitlab.com/api/v4/projects/some%2Fyet-other-repository/releases', tag: 'v1.0.0', - url: 'https://gitlab.com/api/v4/projects/some%2Fyet-other-repository/releases/v1.0.0', + url: 'https://gitlab.com/some/yet-other-repository/-/releases/v1.0.0', }, { notesSourceUrl: 'https://gitlab.com/api/v4/projects/some%2Fyet-other-repository/releases', tag: 'v1.0.1', - url: 'https://gitlab.com/api/v4/projects/some%2Fyet-other-repository/releases/v1.0.1', + url: 'https://gitlab.com/some/yet-other-repository/-/releases/v1.0.1', }, ]); }); @@ -291,13 +303,13 @@ describe('workers/repository/update/pr/changelog/release-notes', () => { notesSourceUrl: 'https://my.custom.domain/api/v4/projects/some%2Fyet-other-repository/releases', tag: 'v1.0.0', - url: 'https://my.custom.domain/api/v4/projects/some%2Fyet-other-repository/releases/v1.0.0', + url: 'https://my.custom.domain/some/yet-other-repository/-/releases/v1.0.0', }, { notesSourceUrl: 'https://my.custom.domain/api/v4/projects/some%2Fyet-other-repository/releases', tag: 'v1.0.1', - url: 'https://my.custom.domain/api/v4/projects/some%2Fyet-other-repository/releases/v1.0.1', + url: 'https://my.custom.domain/some/yet-other-repository/-/releases/v1.0.1', }, ]); }); diff --git a/lib/workers/repository/update/pr/changelog/release-notes.ts b/lib/workers/repository/update/pr/changelog/release-notes.ts index b03d95ecc9..1ca943247c 100644 --- a/lib/workers/repository/update/pr/changelog/release-notes.ts +++ b/lib/workers/repository/update/pr/changelog/release-notes.ts @@ -66,7 +66,7 @@ export function getCachedReleaseList( ): Promise<ChangeLogNotes[]> { const { repository, apiBaseUrl } = project; // TODO: types (#22198) - const cacheKey = `getReleaseList-${apiBaseUrl!}-${repository}`; + const cacheKey = `getReleaseList-${apiBaseUrl}-${repository}`; const cachedResult = memCache.get<Promise<ChangeLogNotes[]>>(cacheKey); // istanbul ignore if if (cachedResult !== undefined) { @@ -241,7 +241,7 @@ export async function getReleaseNotesMdFileInner( project: ChangeLogProject ): Promise<ChangeLogFile | null> { const { repository, type } = project; - const apiBaseUrl = project.apiBaseUrl!; + const apiBaseUrl = project.apiBaseUrl; const sourceDirectory = project.sourceDirectory!; try { switch (type) { @@ -295,8 +295,8 @@ export function getReleaseNotesMdFile( const { sourceDirectory, repository, apiBaseUrl } = project; // TODO: types (#22198) const cacheKey = sourceDirectory - ? `getReleaseNotesMdFile@v2-${repository}-${sourceDirectory}-${apiBaseUrl!}` - : `getReleaseNotesMdFile@v2-${repository}-${apiBaseUrl!}`; + ? `getReleaseNotesMdFile@v2-${repository}-${sourceDirectory}-${apiBaseUrl}` + : `getReleaseNotesMdFile@v2-${repository}-${apiBaseUrl}`; const cachedResult = memCache.get<Promise<ChangeLogFile | null>>(cacheKey); // istanbul ignore if if (cachedResult !== undefined) { diff --git a/lib/workers/repository/update/pr/changelog/types.ts b/lib/workers/repository/update/pr/changelog/types.ts index 4c14a6c83a..8a4a19e9a8 100644 --- a/lib/workers/repository/update/pr/changelog/types.ts +++ b/lib/workers/repository/update/pr/changelog/types.ts @@ -28,7 +28,7 @@ export type ChangeLogPlatform = 'bitbucket' | 'gitea' | 'github' | 'gitlab'; export interface ChangeLogProject { packageName?: string; type: ChangeLogPlatform; - apiBaseUrl?: string; + apiBaseUrl: string; baseUrl: string; repository: string; sourceUrl: string; diff --git a/lib/workers/repository/update/pr/index.spec.ts b/lib/workers/repository/update/pr/index.spec.ts index 6a4411f2fa..866eca46bc 100644 --- a/lib/workers/repository/update/pr/index.spec.ts +++ b/lib/workers/repository/update/pr/index.spec.ts @@ -685,6 +685,7 @@ describe('workers/repository/update/pr/index', () => { type: 'github', repository: 'some/repo', baseUrl: 'https://github.com', + apiBaseUrl: 'https://api.github.com/', sourceUrl: 'https://github.com/some/repo', }, versions: [ -- GitLab