From dc34060cedc70f3a2d10a0804b4833d5b075e2d0 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov <zharinov@users.noreply.github.com> Date: Wed, 22 Jun 2022 12:56:55 +0300 Subject: [PATCH] fix(onboarding): warnings for external host errors (#15587) Co-authored-by: Rhys Arkins <rhys@arkins.net> --- lib/workers/repository/process/fetch.spec.ts | 66 ++++++++++++++++++++ lib/workers/repository/process/fetch.ts | 25 ++++++-- 2 files changed, 87 insertions(+), 4 deletions(-) diff --git a/lib/workers/repository/process/fetch.spec.ts b/lib/workers/repository/process/fetch.spec.ts index 284a06c42d..f641ea1a4f 100644 --- a/lib/workers/repository/process/fetch.spec.ts +++ b/lib/workers/repository/process/fetch.spec.ts @@ -1,6 +1,7 @@ import { RenovateConfig, getConfig, mocked } from '../../../../test/util'; import { MavenDatasource } from '../../../modules/datasource/maven'; import type { PackageFile } from '../../../modules/manager/types'; +import { ExternalHostError } from '../../../types/errors/external-host-error'; import { fetchUpdates } from './fetch'; import * as lookup from './lookup'; @@ -141,5 +142,70 @@ describe('workers/repository/process/fetch', () => { await fetchUpdates(config, packageFiles); expect(packageFiles.maven[0].deps[0].updates).toHaveLength(2); }); + + it('throws lookup errors for onboarded repos', async () => { + config.rangeStrategy = 'auto'; + const packageFiles: any = { + maven: [ + { + packageFile: 'pom.xml', + deps: [{ datasource: MavenDatasource.id, depName: 'bbb' }], + }, + ], + }; + lookupUpdates.mockRejectedValueOnce(new Error('some error')); + + await expect( + fetchUpdates({ ...config, repoIsOnboarded: true }, packageFiles) + ).rejects.toThrow(); + }); + + it('throws lookup errors for not onboarded repos', async () => { + config.rangeStrategy = 'auto'; + const packageFiles: any = { + maven: [ + { + packageFile: 'pom.xml', + deps: [{ datasource: MavenDatasource.id, depName: 'bbb' }], + }, + ], + }; + lookupUpdates.mockRejectedValueOnce(new Error('some error')); + + await expect( + fetchUpdates({ ...config, repoIsOnboarded: true }, packageFiles) + ).rejects.toThrow(); + }); + + it('produces external host warnings for not onboarded repos', async () => { + config.rangeStrategy = 'auto'; + const packageFiles: any = { + maven: [ + { + packageFile: 'pom.xml', + deps: [{ datasource: MavenDatasource.id, depName: 'bbb' }], + }, + ], + }; + const err = new ExternalHostError(new Error('some error')); + lookupUpdates.mockRejectedValueOnce(err); + + await fetchUpdates({ ...config, repoIsOnboarded: false }, packageFiles); + + expect(packageFiles).toMatchObject({ + maven: [ + { + deps: [ + { + depName: 'bbb', + warnings: [ + { topic: 'Lookup Error', message: 'bbb: some error' }, + ], + }, + ], + }, + ], + }); + }); }); }); diff --git a/lib/workers/repository/process/fetch.ts b/lib/workers/repository/process/fetch.ts index 38e690b12c..2bb90311aa 100644 --- a/lib/workers/repository/process/fetch.ts +++ b/lib/workers/repository/process/fetch.ts @@ -9,6 +9,7 @@ import type { PackageDependency, PackageFile, } from '../../../modules/manager/types'; +import { ExternalHostError } from '../../../types/errors/external-host-error'; import { clone } from '../../../util/clone'; import { applyPackageRules } from '../../../util/package-rules'; import { PackageFiles } from '../package-files'; @@ -47,10 +48,26 @@ async function fetchDepUpdates( dep.skipReason = 'disabled'; } else { if (depConfig.datasource) { - dep = { - ...dep, - ...(await lookupUpdates(depConfig as LookupUpdateConfig)), - }; + try { + dep = { + ...dep, + ...(await lookupUpdates(depConfig as LookupUpdateConfig)), + }; + } catch (err) { + if ( + packageFileConfig.repoIsOnboarded || + !(err instanceof ExternalHostError) + ) { + throw err; + } + + const cause = err.err; + dep.warnings ??= []; + dep.warnings.push({ + topic: 'Lookup Error', + message: `${depName}: ${cause.message}`, + }); + } } dep.updates = dep.updates ?? []; } -- GitLab