diff --git a/src/__tests__/Search/fetchRevisionFromLando.test.tsx b/src/__tests__/Search/fetchRevisionFromLando.test.tsx index 5c55b137e..1a2b24d7d 100644 --- a/src/__tests__/Search/fetchRevisionFromLando.test.tsx +++ b/src/__tests__/Search/fetchRevisionFromLando.test.tsx @@ -53,6 +53,27 @@ describe('Lando to commit validating', () => { (console.error as jest.Mock).mockClear(); }); + it('should use the new Lando instance when landoInstance=lando-prod-2025', async () => { + jest.spyOn(console, 'error').mockImplementation(() => {}); + fetchMock.get('glob:https://lando.moz.tools/*', { status: 404 }); + await router.navigate( + '/compare-lando-results?baseLando=123&baseRepo=try&newLando=456&newRepo=try&framework=1&landoInstance=lando-prod-2025', + ); + render(); + expect(console.error).toHaveBeenCalledWith( + new Error('Error when requesting lando: (404) Not Found'), + ); + expect(fetchMock.callHistory.called('glob:https://lando.moz.tools/*')).toBe( + true, + ); + expect( + fetchMock.callHistory.called( + 'glob:https://api.lando.services.mozilla.com/*', + ), + ).toBe(false); + (console.error as jest.Mock).mockClear(); + }); + it('should reject', async () => { jest.spyOn(console, 'error').mockImplementation(() => {}); fetchMock.get( diff --git a/src/components/CompareResults/landoToCommitLoader.ts b/src/components/CompareResults/landoToCommitLoader.ts index 1cf91b07c..7f171613d 100644 --- a/src/components/CompareResults/landoToCommitLoader.ts +++ b/src/components/CompareResults/landoToCommitLoader.ts @@ -1,6 +1,6 @@ import { checkValues, getComparisonInformation } from './loader'; import { compareView } from '../../common/constants'; -import { fetchRevisionFromLandoId } from '../../logic/lando'; +import { fetchRevisionFromLandoId, LandoInstance } from '../../logic/lando'; import { Changeset, CombinedResultsItemType, @@ -24,6 +24,9 @@ export async function loader({ request }: { request: Request }) { 'newRepo', ) as Repository['name'][]; const frameworkFromUrl = url.searchParams.get('framework'); + const landoInstanceFromUrl = + (url.searchParams.get('landoInstance') as LandoInstance | null) ?? + undefined; if (!baseLandoIDFromUrl || !newLandoIDFromUrl) { throw new Error( 'Not all values were supplied please check you provided both baseLando and newLando', @@ -34,10 +37,14 @@ export async function loader({ request }: { request: Request }) { 'enable_silverman_kde', ); - const baseRevisionsFromLando = - await fetchRevisionFromLandoId(baseLandoIDFromUrl); - const newRevisionsFromLando = - await fetchRevisionFromLandoId(newLandoIDFromUrl); + const baseRevisionsFromLando = await fetchRevisionFromLandoId( + baseLandoIDFromUrl, + landoInstanceFromUrl, + ); + const newRevisionsFromLando = await fetchRevisionFromLandoId( + newLandoIDFromUrl, + landoInstanceFromUrl, + ); const testVersionFromUrl = url.searchParams.get( 'test_version', ) as TestVersion; diff --git a/src/logic/lando.ts b/src/logic/lando.ts index ce76dcc2e..8c50617bf 100644 --- a/src/logic/lando.ts +++ b/src/logic/lando.ts @@ -1,6 +1,13 @@ import { LandoToCommit } from '../types/state'; -const landoBaseUrl = 'https://api.lando.services.mozilla.com'; +const landoInstances = { + 'lando-dev': 'api.dev.lando.nonprod.cloudops.mozgcp.net', + 'lando-dev-2025': 'lando-dev.allizom.org', + 'lando-prod': 'api.lando.services.mozilla.com', + 'lando-prod-2025': 'lando.moz.tools', +}; + +export type LandoInstance = keyof typeof landoInstances; async function fetchFromLando(url: string) { const response = await fetch(url); @@ -12,8 +19,12 @@ async function fetchFromLando(url: string) { return response; } -export async function fetchRevisionFromLandoId(landoid: string) { - const url = `${landoBaseUrl}/landing_jobs/${landoid}`; +export async function fetchRevisionFromLandoId( + landoid: string, + instance: LandoInstance = 'lando-prod', +) { + const host = landoInstances[instance] ?? landoInstances['lando-prod']; + const url = `https://${host}/landing_jobs/${landoid}`; const response = await fetchFromLando(url); return response.json() as Promise; }