From a91d646b2c855a1b7274893416c25899c4ecc086 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Fri, 6 Sep 2024 19:01:33 -0300 Subject: [PATCH 1/6] refactor: Fix return type for `filterInternalChecks` function (#31259) --- .../process/lookup/filter-checks.spec.ts | 16 ++++++++-------- .../repository/process/lookup/filter-checks.ts | 5 ++--- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/lib/workers/repository/process/lookup/filter-checks.spec.ts b/lib/workers/repository/process/lookup/filter-checks.spec.ts index f0f01e38496a77..8b45e5e2b3a92f 100644 --- a/lib/workers/repository/process/lookup/filter-checks.spec.ts +++ b/lib/workers/repository/process/lookup/filter-checks.spec.ts @@ -61,7 +61,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { expect(res).toMatchSnapshot(); expect(res.pendingChecks).toBeFalse(); expect(res.pendingReleases).toHaveLength(0); - expect(res.release.version).toBe('1.0.4'); + expect(res.release?.version).toBe('1.0.4'); }); it('returns non-pending latest release if internalChecksFilter=flexible and none pass checks', async () => { @@ -76,7 +76,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { expect(res).toMatchSnapshot(); expect(res.pendingChecks).toBeFalse(); expect(res.pendingReleases).toHaveLength(0); - expect(res.release.version).toBe('1.0.4'); + expect(res.release?.version).toBe('1.0.4'); }); it('returns pending latest release if internalChecksFilter=strict and none pass checks', async () => { @@ -91,7 +91,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { expect(res).toMatchSnapshot(); expect(res.pendingChecks).toBeTrue(); expect(res.pendingReleases).toHaveLength(0); - expect(res.release.version).toBe('1.0.4'); + expect(res.release?.version).toBe('1.0.4'); }); it('returns non-latest release if internalChecksFilter=strict and some pass checks', async () => { @@ -106,7 +106,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { expect(res).toMatchSnapshot(); expect(res.pendingChecks).toBeFalse(); expect(res.pendingReleases).toHaveLength(2); - expect(res.release.version).toBe('1.0.2'); + expect(res.release?.version).toBe('1.0.2'); }); it('returns non-latest release if internalChecksFilter=flexible and some pass checks', async () => { @@ -121,7 +121,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { expect(res).toMatchSnapshot(); expect(res.pendingChecks).toBeFalse(); expect(res.pendingReleases).toHaveLength(2); - expect(res.release.version).toBe('1.0.2'); + expect(res.release?.version).toBe('1.0.2'); }); it('picks up minimumReleaseAge settings from hostRules', async () => { @@ -139,7 +139,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { expect(res).toMatchSnapshot(); expect(res.pendingChecks).toBeFalse(); expect(res.pendingReleases).toHaveLength(0); - expect(res.release.version).toBe('1.0.4'); + expect(res.release?.version).toBe('1.0.4'); }); it('picks up minimumReleaseAge settings from updateType', async () => { @@ -154,7 +154,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { expect(res).toMatchSnapshot(); expect(res.pendingChecks).toBeFalse(); expect(res.pendingReleases).toHaveLength(1); - expect(res.release.version).toBe('1.0.3'); + expect(res.release?.version).toBe('1.0.3'); }); it('picks up minimumConfidence settings from updateType', async () => { @@ -174,7 +174,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { expect(res).toMatchSnapshot(); expect(res.pendingChecks).toBeFalse(); expect(res.pendingReleases).toHaveLength(3); - expect(res.release.version).toBe('1.0.1'); + expect(res.release?.version).toBe('1.0.1'); }); }); }); diff --git a/lib/workers/repository/process/lookup/filter-checks.ts b/lib/workers/repository/process/lookup/filter-checks.ts index 47fd605f15d8ac..dbe19beeb690c0 100644 --- a/lib/workers/repository/process/lookup/filter-checks.ts +++ b/lib/workers/repository/process/lookup/filter-checks.ts @@ -16,7 +16,7 @@ import type { LookupUpdateConfig, UpdateResult } from './types'; import { getUpdateType } from './update-type'; export interface InternalChecksResult { - release: Release; + release?: Release; pendingChecks: boolean; pendingReleases?: Release[]; } @@ -117,6 +117,5 @@ export async function filterInternalChecks( } } - // TODO #22198 - return { release: release!, pendingChecks, pendingReleases }; + return { release, pendingChecks, pendingReleases }; } From 8e142a26802334cb7d0cc5b82b7ad5367465677c Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Fri, 6 Sep 2024 19:24:12 -0300 Subject: [PATCH 2/6] Move helper and types to datasource --- .../datasource/postprocess-release.spec.ts} | 32 +++++++++---------- .../datasource/postprocess-release.ts} | 11 +++---- lib/modules/datasource/types.ts | 10 ++++-- .../process/lookup/filter-checks.spec.ts | 9 ++---- .../process/lookup/filter-checks.ts | 4 +-- .../repository/process/lookup/types.ts | 6 ---- 6 files changed, 34 insertions(+), 38 deletions(-) rename lib/{workers/repository/process/lookup/intercept-release.spec.ts => modules/datasource/postprocess-release.spec.ts} (76%) rename lib/{workers/repository/process/lookup/intercept-release.ts => modules/datasource/postprocess-release.ts} (64%) diff --git a/lib/workers/repository/process/lookup/intercept-release.spec.ts b/lib/modules/datasource/postprocess-release.spec.ts similarity index 76% rename from lib/workers/repository/process/lookup/intercept-release.spec.ts rename to lib/modules/datasource/postprocess-release.spec.ts index 05615b9051a64b..e78338cf0e4cc4 100644 --- a/lib/workers/repository/process/lookup/intercept-release.spec.ts +++ b/lib/modules/datasource/postprocess-release.spec.ts @@ -1,13 +1,13 @@ -import { mocked } from '../../../../../test/util'; -import * as _datasourceCommon from '../../../../modules/datasource/common'; -import { Datasource } from '../../../../modules/datasource/datasource'; +import { mocked } from '../../../test/util'; +import * as _datasourceCommon from './common'; +import { Datasource } from './datasource'; +import { postprocessRelease } from './postprocess-release'; import type { GetReleasesConfig, + PostprocessReleaseConfig, Release, ReleaseResult, -} from '../../../../modules/datasource/types'; -import { tryInterceptRelease } from './intercept-release'; -import type { CandidateReleaseConfig } from './types'; +} from './types'; jest.mock('../../../../modules/datasource/common'); const { getDatasourceFor } = mocked(_datasourceCommon); @@ -22,10 +22,10 @@ class DummyDatasource extends Datasource { } } -describe('workers/repository/process/lookup/intercept-release', () => { +describe('modules/datasource/postprocess-release', () => { it('returns original release for empty datasource field', async () => { const releaseOrig: Release = { version: '1.2.3' }; - const release = await tryInterceptRelease({}, releaseOrig); + const release = await postprocessRelease({}, releaseOrig); expect(release).toBe(releaseOrig); }); @@ -33,7 +33,7 @@ describe('workers/repository/process/lookup/intercept-release', () => { const releaseOrig: Release = { version: '1.2.3' }; getDatasourceFor.mockReturnValueOnce(null); - const release = await tryInterceptRelease( + const release = await postprocessRelease( { datasource: 'some-datasource' }, releaseOrig, ); @@ -45,7 +45,7 @@ describe('workers/repository/process/lookup/intercept-release', () => { const releaseOrig: Release = { version: '1.2.3' }; getDatasourceFor.mockReturnValueOnce(new DummyDatasource()); - const release = await tryInterceptRelease( + const release = await postprocessRelease( { datasource: 'some-datasource' }, releaseOrig, ); @@ -58,7 +58,7 @@ describe('workers/repository/process/lookup/intercept-release', () => { class SomeDatasource extends DummyDatasource { interceptRelease( - _config: CandidateReleaseConfig, + _config: PostprocessReleaseConfig, release: Release, ): Promise { release.releaseTimestamp = '2024-09-05'; @@ -67,7 +67,7 @@ describe('workers/repository/process/lookup/intercept-release', () => { } getDatasourceFor.mockReturnValueOnce(new SomeDatasource()); - const release = await tryInterceptRelease( + const release = await postprocessRelease( { datasource: 'some-datasource' }, releaseOrig, ); @@ -83,7 +83,7 @@ describe('workers/repository/process/lookup/intercept-release', () => { class SomeDatasource extends DummyDatasource { interceptRelease( - _config: CandidateReleaseConfig, + _config: PostprocessReleaseConfig, _release: Release, ): Promise { return Promise.resolve(null); @@ -91,7 +91,7 @@ describe('workers/repository/process/lookup/intercept-release', () => { } getDatasourceFor.mockReturnValueOnce(new SomeDatasource()); - const release = await tryInterceptRelease( + const release = await postprocessRelease( { datasource: 'some-datasource' }, releaseOrig, ); @@ -104,7 +104,7 @@ describe('workers/repository/process/lookup/intercept-release', () => { class SomeDatasource extends DummyDatasource { interceptRelease( - _config: CandidateReleaseConfig, + _config: PostprocessReleaseConfig, _release: Release, ): Promise { return Promise.reject(new Error('unknown error')); @@ -112,7 +112,7 @@ describe('workers/repository/process/lookup/intercept-release', () => { } getDatasourceFor.mockReturnValueOnce(new SomeDatasource()); - const release = await tryInterceptRelease( + const release = await postprocessRelease( { datasource: 'some-datasource' }, releaseOrig, ); diff --git a/lib/workers/repository/process/lookup/intercept-release.ts b/lib/modules/datasource/postprocess-release.ts similarity index 64% rename from lib/workers/repository/process/lookup/intercept-release.ts rename to lib/modules/datasource/postprocess-release.ts index 92d4675d88a1b5..1275e7fb8275d8 100644 --- a/lib/workers/repository/process/lookup/intercept-release.ts +++ b/lib/modules/datasource/postprocess-release.ts @@ -1,10 +1,9 @@ -import { logger } from '../../../../logger'; -import { getDatasourceFor } from '../../../../modules/datasource/common'; -import type { Release } from '../../../../modules/datasource/types'; -import type { CandidateReleaseConfig } from './types'; +import { logger } from '../../logger'; +import { getDatasourceFor } from './common'; +import type { PostprocessReleaseConfig, Release } from './types'; -export async function tryInterceptRelease( - config: CandidateReleaseConfig & { datasource?: string }, +export async function postprocessRelease( + config: PostprocessReleaseConfig, release: Release, ): Promise { const { datasource } = config; diff --git a/lib/modules/datasource/types.ts b/lib/modules/datasource/types.ts index 2f969d64663250..99b63137dc62c0 100644 --- a/lib/modules/datasource/types.ts +++ b/lib/modules/datasource/types.ts @@ -3,7 +3,6 @@ import type { CustomDatasourceConfig, } from '../../config/types'; import type { ModuleApi } from '../../types'; -import type { CandidateReleaseConfig } from '../../workers/repository/process/lookup/types'; export interface GetDigestInputConfig { datasource: string; @@ -91,6 +90,13 @@ export interface ReleaseResult { packageScope?: string; } +export interface PostprocessReleaseConfig { + datasource?: string; + packageName?: string; + registryUrl?: string; + currentValue?: string; +} + export type RegistryStrategy = 'first' | 'hunt' | 'merge'; export type SourceUrlSupport = 'package' | 'release' | 'none'; export interface DatasourceApi extends ModuleApi { @@ -150,7 +156,7 @@ export interface DatasourceApi extends ModuleApi { * and `interceptRelease` is called again. */ interceptRelease?( - config: CandidateReleaseConfig, + config: PostprocessReleaseConfig, release: Release, ): Promise; } diff --git a/lib/workers/repository/process/lookup/filter-checks.spec.ts b/lib/workers/repository/process/lookup/filter-checks.spec.ts index 0995b8173283a1..4ebada0a35358e 100644 --- a/lib/workers/repository/process/lookup/filter-checks.spec.ts +++ b/lib/workers/repository/process/lookup/filter-checks.spec.ts @@ -1,6 +1,7 @@ import { mocked } from '../../../../../test/util'; import type { GetReleasesConfig, + PostprocessReleaseConfig, Release, ReleaseResult, } from '../../../../modules/datasource'; @@ -12,11 +13,7 @@ import * as _dateUtil from '../../../../util/date'; import * as _mergeConfidence from '../../../../util/merge-confidence'; import { toMs } from '../../../../util/pretty-time'; import { filterInternalChecks } from './filter-checks'; -import type { - CandidateReleaseConfig, - LookupUpdateConfig, - UpdateResult, -} from './types'; +import type { LookupUpdateConfig, UpdateResult } from './types'; jest.mock('../../../../util/date'); const dateUtil = mocked(_dateUtil); @@ -93,7 +90,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { class SomeDatasource extends DummyDatasource { interceptRelease( - _: CandidateReleaseConfig, + _: PostprocessReleaseConfig, release: Release, ): Promise { if (release.version !== '1.0.2') { diff --git a/lib/workers/repository/process/lookup/filter-checks.ts b/lib/workers/repository/process/lookup/filter-checks.ts index 1bd1822e24912c..f34639e5551510 100644 --- a/lib/workers/repository/process/lookup/filter-checks.ts +++ b/lib/workers/repository/process/lookup/filter-checks.ts @@ -12,7 +12,7 @@ import { import { coerceNumber } from '../../../../util/number'; import { applyPackageRules } from '../../../../util/package-rules'; import { toMs } from '../../../../util/pretty-time'; -import { tryInterceptRelease } from './intercept-release'; +import { postprocessRelease } from '../../../../modules/datasource/postprocess-release'; import type { LookupUpdateConfig, UpdateResult } from './types'; import { getUpdateType } from './update-type'; @@ -55,7 +55,7 @@ export async function filterInternalChecks( // Apply packageRules in case any apply to updateType releaseConfig = applyPackageRules(releaseConfig, 'update-type'); - const updatedCandidateRelease = await tryInterceptRelease( + const updatedCandidateRelease = await postprocessRelease( releaseConfig, candidateRelease, ); diff --git a/lib/workers/repository/process/lookup/types.ts b/lib/workers/repository/process/lookup/types.ts index 6e27f06b055c16..ed944ea253d5e9 100644 --- a/lib/workers/repository/process/lookup/types.ts +++ b/lib/workers/repository/process/lookup/types.ts @@ -69,9 +69,3 @@ export interface UpdateResult { versioning?: string; currentVersionTimestamp?: string; } - -export interface CandidateReleaseConfig { - packageName?: string; - registryUrl?: string; - currentValue?: string; -} From 770b4cbb467ff9696569ac63c3c653abb4c05d8e Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Fri, 6 Sep 2024 19:29:26 -0300 Subject: [PATCH 3/6] Fix test --- lib/modules/datasource/postprocess-release.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/modules/datasource/postprocess-release.spec.ts b/lib/modules/datasource/postprocess-release.spec.ts index e78338cf0e4cc4..ac2bb5e5dabbbd 100644 --- a/lib/modules/datasource/postprocess-release.spec.ts +++ b/lib/modules/datasource/postprocess-release.spec.ts @@ -9,7 +9,7 @@ import type { ReleaseResult, } from './types'; -jest.mock('../../../../modules/datasource/common'); +jest.mock('./common'); const { getDatasourceFor } = mocked(_datasourceCommon); class DummyDatasource extends Datasource { From 80350cee8e2e36589c66ce7b5c93ae61b3769fda Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Fri, 6 Sep 2024 19:32:32 -0300 Subject: [PATCH 4/6] Fix eslint --- lib/workers/repository/process/lookup/filter-checks.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/workers/repository/process/lookup/filter-checks.ts b/lib/workers/repository/process/lookup/filter-checks.ts index f34639e5551510..a336399c6965bf 100644 --- a/lib/workers/repository/process/lookup/filter-checks.ts +++ b/lib/workers/repository/process/lookup/filter-checks.ts @@ -2,6 +2,7 @@ import is from '@sindresorhus/is'; import { mergeChildConfig } from '../../../../config'; import { logger } from '../../../../logger'; import type { Release } from '../../../../modules/datasource'; +import { postprocessRelease } from '../../../../modules/datasource/postprocess-release'; import type { VersioningApi } from '../../../../modules/versioning'; import { getElapsedMs } from '../../../../util/date'; import { @@ -12,7 +13,6 @@ import { import { coerceNumber } from '../../../../util/number'; import { applyPackageRules } from '../../../../util/package-rules'; import { toMs } from '../../../../util/pretty-time'; -import { postprocessRelease } from '../../../../modules/datasource/postprocess-release'; import type { LookupUpdateConfig, UpdateResult } from './types'; import { getUpdateType } from './update-type'; From 132987be242ea845c2f43bec68ac740ff547bfa5 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sat, 7 Sep 2024 10:23:07 -0300 Subject: [PATCH 5/6] Fix renaming --- lib/modules/datasource/postprocess-release.spec.ts | 12 ++++++------ lib/modules/datasource/postprocess-release.ts | 4 ++-- lib/modules/datasource/types.ts | 4 ++-- .../repository/process/lookup/filter-checks.spec.ts | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/modules/datasource/postprocess-release.spec.ts b/lib/modules/datasource/postprocess-release.spec.ts index ac2bb5e5dabbbd..10481bb0470727 100644 --- a/lib/modules/datasource/postprocess-release.spec.ts +++ b/lib/modules/datasource/postprocess-release.spec.ts @@ -41,7 +41,7 @@ describe('modules/datasource/postprocess-release', () => { expect(release).toBe(releaseOrig); }); - it('returns original release for datasource with missing `interceptRelease` method', async () => { + it('returns original release for datasource with missing `postprocessRelease` method', async () => { const releaseOrig: Release = { version: '1.2.3' }; getDatasourceFor.mockReturnValueOnce(new DummyDatasource()); @@ -53,11 +53,11 @@ describe('modules/datasource/postprocess-release', () => { expect(release).toBe(releaseOrig); }); - it('updates release via `interceptRelease` method', async () => { + it('updates release via `postprocessRelease` method', async () => { const releaseOrig: Release = { version: '1.2.3' }; class SomeDatasource extends DummyDatasource { - interceptRelease( + postprocessRelease( _config: PostprocessReleaseConfig, release: Release, ): Promise { @@ -78,11 +78,11 @@ describe('modules/datasource/postprocess-release', () => { }); }); - it('rejects release via `interceptRelease` method', async () => { + it('rejects release via `postprocessRelease` method', async () => { const releaseOrig: Release = { version: '1.2.3' }; class SomeDatasource extends DummyDatasource { - interceptRelease( + postprocessRelease( _config: PostprocessReleaseConfig, _release: Release, ): Promise { @@ -103,7 +103,7 @@ describe('modules/datasource/postprocess-release', () => { const releaseOrig: Release = { version: '1.2.3' }; class SomeDatasource extends DummyDatasource { - interceptRelease( + postprocessRelease( _config: PostprocessReleaseConfig, _release: Release, ): Promise { diff --git a/lib/modules/datasource/postprocess-release.ts b/lib/modules/datasource/postprocess-release.ts index 1275e7fb8275d8..9d96ac19a69b8e 100644 --- a/lib/modules/datasource/postprocess-release.ts +++ b/lib/modules/datasource/postprocess-release.ts @@ -17,12 +17,12 @@ export async function postprocessRelease( return release; } - if (!ds.interceptRelease) { + if (!ds.postprocessRelease) { return release; } try { - const result = await ds.interceptRelease( + const result = await ds.postprocessRelease( { packageName: config.packageName, registryUrl: config.registryUrl, diff --git a/lib/modules/datasource/types.ts b/lib/modules/datasource/types.ts index 99b63137dc62c0..8b8fbc25e6f9bc 100644 --- a/lib/modules/datasource/types.ts +++ b/lib/modules/datasource/types.ts @@ -153,9 +153,9 @@ export interface DatasourceApi extends ModuleApi { * via some datasource-specific external call. * * In case of reject, the next candidate release is selected, - * and `interceptRelease` is called again. + * and `postprocessRelease` is called again. */ - interceptRelease?( + postprocessRelease?( config: PostprocessReleaseConfig, release: Release, ): Promise; diff --git a/lib/workers/repository/process/lookup/filter-checks.spec.ts b/lib/workers/repository/process/lookup/filter-checks.spec.ts index 4925cea16da270..6af528aaa66b9c 100644 --- a/lib/workers/repository/process/lookup/filter-checks.spec.ts +++ b/lib/workers/repository/process/lookup/filter-checks.spec.ts @@ -89,7 +89,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { config.internalChecksFilter = 'strict'; class SomeDatasource extends DummyDatasource { - interceptRelease( + postprocessRelease( _: PostprocessReleaseConfig, release: Release, ): Promise { From a4686d852fc394a84f8d10f50047e30d9de6fbea Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sat, 7 Sep 2024 10:23:59 -0300 Subject: [PATCH 6/6] Remove `currentValue` from config --- lib/modules/datasource/postprocess-release.ts | 1 - lib/modules/datasource/types.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/lib/modules/datasource/postprocess-release.ts b/lib/modules/datasource/postprocess-release.ts index 9d96ac19a69b8e..6dda15c3d581f8 100644 --- a/lib/modules/datasource/postprocess-release.ts +++ b/lib/modules/datasource/postprocess-release.ts @@ -26,7 +26,6 @@ export async function postprocessRelease( { packageName: config.packageName, registryUrl: config.registryUrl, - currentValue: config.currentValue, }, release, ); diff --git a/lib/modules/datasource/types.ts b/lib/modules/datasource/types.ts index 8b8fbc25e6f9bc..e9a89540ebc9b3 100644 --- a/lib/modules/datasource/types.ts +++ b/lib/modules/datasource/types.ts @@ -94,7 +94,6 @@ export interface PostprocessReleaseConfig { datasource?: string; packageName?: string; registryUrl?: string; - currentValue?: string; } export type RegistryStrategy = 'first' | 'hunt' | 'merge';