From 1405689cf87869371b8b51b43d2edf962e0ff518 Mon Sep 17 00:00:00 2001 From: RahulGautamSingh <rahultesnik@gmail.com> Date: Thu, 26 Sep 2024 00:54:54 +0530 Subject: [PATCH] fix(datasource/custom): better logging for jsonata errors (#31520) --- lib/modules/datasource/custom/index.spec.ts | 26 +++++++++++++++++++++ lib/modules/datasource/custom/index.ts | 12 ++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/lib/modules/datasource/custom/index.spec.ts b/lib/modules/datasource/custom/index.spec.ts index 2d997c6b30..2eb0f46212 100644 --- a/lib/modules/datasource/custom/index.spec.ts +++ b/lib/modules/datasource/custom/index.spec.ts @@ -3,6 +3,7 @@ import { getPkgReleases } from '..'; import { Fixtures } from '../../../../test/fixtures'; import * as httpMock from '../../../../test/http-mock'; import { fs } from '../../../../test/util'; +import { logger } from '../../../logger'; import { CustomDatasource } from './index'; jest.mock('../../../util/fs'); @@ -228,6 +229,31 @@ describe('modules/datasource/custom/index', () => { expect(result).toEqual(expected); }); + it('returns null if transformation using jsonata rules fail', async () => { + httpMock + .scope('https://example.com') + .get('/v1') + .reply(200, '1.0.0 \n2.0.0 \n 3.0.0 ', { + 'Content-Type': 'text/plain', + }); + const result = await getPkgReleases({ + datasource: `${CustomDatasource.id}.foo`, + packageName: 'myPackage', + customDatasources: { + foo: { + defaultRegistryUrlTemplate: 'https://example.com/v1', + transformTemplates: ['$[.name = "Alice" and'], + format: 'plain', + }, + }, + }); + expect(result).toBeNull(); + expect(logger.debug).toHaveBeenCalledWith( + { err: expect.any(Object), transformTemplate: '$[.name = "Alice" and' }, + 'Error while transforming response', + ); + }); + it('return releases for plain text API when only returns a single version', async () => { const expected = { releases: [ diff --git a/lib/modules/datasource/custom/index.ts b/lib/modules/datasource/custom/index.ts index d230e14179..0ecdc11bc8 100644 --- a/lib/modules/datasource/custom/index.ts +++ b/lib/modules/datasource/custom/index.ts @@ -46,8 +46,16 @@ export class CustomDatasource extends Datasource { logger.trace({ data }, `Custom manager fetcher '${format}' returned data.`); for (const transformTemplate of transformTemplates) { - const expression = jsonata(transformTemplate); - data = await expression.evaluate(data); + try { + const expression = jsonata(transformTemplate); + data = await expression.evaluate(data); + } catch (err) { + logger.debug( + { err, transformTemplate }, + 'Error while transforming response', + ); + return null; + } } try { -- GitLab