diff --git a/lib/util/merge-confidence/index.spec.ts b/lib/util/merge-confidence/index.spec.ts index 6c9e379abe23cc..9b672ba0ef78af 100644 --- a/lib/util/merge-confidence/index.spec.ts +++ b/lib/util/merge-confidence/index.spec.ts @@ -347,6 +347,23 @@ describe('util/merge-confidence/index', () => { ); }); + it('uses a custom base url containing path', async () => { + const renovateApi = 'https://domain.com/proxy/renovate-api'; + process.env.RENOVATE_X_MERGE_CONFIDENCE_API_BASE_URL = renovateApi; + httpMock.scope(renovateApi).get(`/api/mc/availability`).reply(200); + + await expect(initMergeConfidence()).toResolve(); + + expect(logger.trace).toHaveBeenCalledWith( + expect.anything(), + 'using merge confidence API base found in environment variables', + ); + expect(logger.debug).toHaveBeenCalledWith( + expect.anything(), + 'merge confidence API - successfully authenticated', + ); + }); + it('resolves if no token', async () => { hostRules.clear(); diff --git a/lib/util/merge-confidence/index.ts b/lib/util/merge-confidence/index.ts index 95386836a04a36..56f2f177a52870 100644 --- a/lib/util/merge-confidence/index.ts +++ b/lib/util/merge-confidence/index.ts @@ -7,6 +7,7 @@ import * as packageCache from '../cache/package'; import { parseJson } from '../common'; import * as hostRules from '../host-rules'; import { Http } from '../http'; +import { ensureTrailingSlash, joinUrlParts } from '../url'; import { MERGE_CONFIDENCE } from './common'; import type { MergeConfidence } from './types'; @@ -164,7 +165,14 @@ async function queryApi( } const escapedPackageName = packageName.replace('/', '%2f'); - const url = `${apiBaseUrl}api/mc/json/${datasource}/${escapedPackageName}/${currentVersion}/${newVersion}`; + const url = joinUrlParts( + apiBaseUrl, + 'api/mc/json', + datasource, + escapedPackageName, + currentVersion, + newVersion, + ); const cacheKey = `${token}:${url}`; const cachedResult = await packageCache.get(hostType, cacheKey); @@ -217,7 +225,7 @@ export async function initMergeConfidence(): Promise { return; } - const url = `${apiBaseUrl}api/mc/availability`; + const url = joinUrlParts(apiBaseUrl, 'api/mc/availability'); try { await http.get(url); } catch (err) { @@ -246,7 +254,7 @@ function getApiBaseUrl(): string { { baseUrl: parsedBaseUrl }, 'using merge confidence API base found in environment variables', ); - return parsedBaseUrl; + return ensureTrailingSlash(parsedBaseUrl); } catch (err) { logger.warn( { err, baseFromEnv },