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 f1c09d2d5dbb7d0d34c5ba5fb40c680ce1ab0eba..a9316d67d937b8edfa2c093bb9a565d26b18a7f6 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 8f354fe6f1712a30c61be45c59c3ae3963978f6b..fe99e2dfc025e138d7c7ce4c69f4d745a09f05f5 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 dd03b255818bc3717f89d284b452a739482be4e7..4bc1432afefb705f7ad5bc73e017cccf9823f3c2 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 711c14c329251c5bd00cc1f985a4f6e04470da5e..889d7eb0d7cd684aafbfa2ee0b98989c1f340f95 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 dda0633eb8ae08a25ec9ad9634b1c28552053ce2..d3b72ae73836f7bfd1693d7b35a56f9649e9d23b 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 b03d95ecc9d13df15ca43af409206cd08248b58b..1ca943247c2a09f1a567cc368c64d981b5b6ffbe 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 4c14a6c83af56f99b9d54e71815ef3b6cc0052be..8a4a19e9a8feadc1fc8481a8c46cd9d7aca9e621 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 6a4411f2fa521fa570374d729e3d9c39325190c8..866eca46bccda8766e57119b8a527af9d62b41dd 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: [