diff --git a/lib/workers/branch/index.ts b/lib/workers/branch/index.ts index 6c27807825300f3be3974994e046e953c851414b..ad9278d363a235fd7a6ece099fa2d0487977e2a1 100644 --- a/lib/workers/branch/index.ts +++ b/lib/workers/branch/index.ts @@ -451,6 +451,9 @@ export async function processBranch( if (pr === 'needs-pr-approval') { return 'needs-pr-approval'; } + if (pr === 'pending') { + return 'pending'; + } if (pr) { const topic = emojify(':warning: Artifact update problem'); if (config.artifactErrors && config.artifactErrors.length) { diff --git a/lib/workers/pr/index.ts b/lib/workers/pr/index.ts index 8a08faf529bba93f85b68f3073ca029dbb12bf3f..e8494a65fb3ca2bd4da064bc887b2688482a6afa 100644 --- a/lib/workers/pr/index.ts +++ b/lib/workers/pr/index.ts @@ -59,7 +59,7 @@ async function addAssigneesReviewers(config, pr: Pr): Promise<void> { // Ensures that PR exists with matching title/body export async function ensurePr( prConfig: BranchConfig -): Promise<Pr | 'needs-pr-approval'> { +): Promise<Pr | 'needs-pr-approval' | 'pending'> { const config: BranchConfig = { ...prConfig }; logger.trace({ config }, 'ensurePr'); @@ -127,7 +127,7 @@ export async function ensurePr( logger.debug( `Branch status is "${await getBranchStatus()}" - not creating PR` ); - return null; + return 'pending'; } logger.debug('Branch status success'); } else if ( @@ -159,7 +159,7 @@ export async function ensurePr( logger.debug( `Branch is ${elapsedHours} hours old - skipping PR creation` ); - return null; + return 'pending'; } logger.debug( `prNotPendingHours=${config.prNotPendingHours} threshold hit - creating PR` diff --git a/test/workers/branch/index.spec.ts b/test/workers/branch/index.spec.ts index cb198a68e19811b38202e1c1b504a49a3f85163f..0995ca95317fb72464378ce2ddc8cadfb0957e04 100644 --- a/test/workers/branch/index.spec.ts +++ b/test/workers/branch/index.spec.ts @@ -257,6 +257,19 @@ describe('workers/branch', () => { 'needs-pr-approval' ); }); + it('returns if branch exists but pending', async () => { + getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce({ + updatedPackageFiles: [{}], + } as never); + npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({ + artifactErrors: [], + updatedArtifacts: [{}], + } as never); + platform.branchExists.mockResolvedValueOnce(true); + automerge.tryBranchAutomerge.mockResolvedValueOnce('failed'); + prWorker.ensurePr.mockResolvedValueOnce('pending'); + expect(await branchWorker.processBranch(config)).toEqual('pending'); + }); it('ensures PR and tries automerge', async () => { getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce({ updatedPackageFiles: [{}], diff --git a/test/workers/pr/index.spec.ts b/test/workers/pr/index.spec.ts index 912ee3f0252ece098d87f614b77dd3ceb00345c1..dc5ba567485d603504d5e9335d23e47a5fba788e 100644 --- a/test/workers/pr/index.spec.ts +++ b/test/workers/pr/index.spec.ts @@ -155,7 +155,7 @@ describe('workers/pr', () => { platform.getBranchStatus.mockResolvedValueOnce('failed'); config.prCreation = 'status-success'; const pr = await prWorker.ensurePr(config); - expect(pr).toBeNull(); + expect(pr).toEqual('pending'); }); it('should return needs-approval if prCreation set to approval', async () => { platform.getBranchStatus.mockResolvedValueOnce('success'); @@ -236,7 +236,7 @@ describe('workers/pr', () => { ); config.prCreation = 'not-pending'; const pr = await prWorker.ensurePr(config); - expect(pr).toBeNull(); + expect(pr).toEqual('pending'); }); it('should create PR if pending timeout hit', async () => { platform.getBranchStatus.mockResolvedValueOnce('pending');