From 339574d28bcd63dde162e10346f15a696a240ca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20St=C3=BChmer?= Date: Thu, 7 Mar 2024 08:19:32 +0100 Subject: [PATCH] chore: Rebased and rebuild to latest `main` --- __tests__/utils.test.js | 12 +- dist/index.js | 282 ++++++++++++++++++++-------------------- src/utils.js | 12 +- 3 files changed, 155 insertions(+), 151 deletions(-) diff --git a/__tests__/utils.test.js b/__tests__/utils.test.js index f727438..4cf8bfe 100644 --- a/__tests__/utils.test.js +++ b/__tests__/utils.test.js @@ -8,7 +8,7 @@ const basePullRequest = { base: { ref: '' }, - head:{ + head: { ref: '' } } @@ -17,14 +17,14 @@ const mockCompare = jest.fn() mockCompare.mockReturnValue({ data: { status: 'before', - 'behind_by': 0 + behind_by: 0 } }) const mockGetPullRequest = jest.fn() mockGetPullRequest.mockReturnValue({ data: { - mergeable: true, + mergeable: true } }) // Mock for the object `github` that is passed to the action @@ -341,15 +341,15 @@ describe('Tests for `validatePullRequest` function', () => { 'The pull-request is associated with a dependency group but the action is not configured to handle dependency groups.' ) }) - + test('should return `true` after compare commits', async () => { mockCompare.mockReturnValueOnce({ data: { status: 'behind', - 'behind_by': 2 + behind_by: 2 } }) - + const pullRequest = { ...basePullRequest, merged: false, diff --git a/dist/index.js b/dist/index.js index 05e19cb..522aa1f 100644 --- a/dist/index.js +++ b/dist/index.js @@ -24730,12 +24730,11 @@ async function approvePullRequest(github, repo, pull_request, body) { }) } -async function comparePullRequestToBase(github, repo, pull_request) { - return await github.rest.repos.compareCommits({ +async function comparePullRequest(github, repo, pull_request) { + return await github.rest.repos.compare({ owner: repo.owner.login, repo: repo.name, - base: pull_request.base.ref, - head: pull_request.head.ref + basehead: `${pull_request.base.ref}...${pull_request.head.ref}` }) } @@ -24750,6 +24749,7 @@ async function getPullRequest(github, repo, pull_request) { module.exports = { addComment, approvePullRequest, + comparePullRequest, getPullRequest } @@ -24856,7 +24856,12 @@ module.exports = async function run({ github, context, inputs, metadata }) { const core = __nccwpck_require__(2186) -const cmd = __nccwpck_require__(612) +const { + addComment, + approvePullRequest, + comparePullRequest, + getPullRequest +} = __nccwpck_require__(612) const dependabotUser = 'dependabot[bot]' // const dependabotCommitter = 'GitHub' @@ -24937,180 +24942,171 @@ function getMetadata(metadata) { } async function validatePullRequest(github, repository, pull_request, config) { - core.startGroup('Validate Pull Request') - try { - if (pull_request.state !== 'open' || pull_request.merged) { - return { - execute: false, - validationState: state.skipped, - validationMessage: 'Pull request is not open or already merged.' - } - } - - if (pull_request.draft) { - return { - execute: false, - validationState: state.skipped, - validationMessage: 'Pull request is a draft.' - } + if (pull_request.state !== 'open' || pull_request.merged) { + return { + execute: false, + validationState: state.skipped, + validationMessage: 'Pull request is not open or already merged.' } + } - if ( - !config.inputs.skipVerification && - pull_request.user.login !== dependabotUser - ) { - return { - execute: false, - validationState: state.skipped, - validationMessage: `The Commit/PullRequest was not created by ${dependabotUser}.` - } + if (pull_request.draft) { + return { + execute: false, + validationState: state.skipped, + validationMessage: 'Pull request is a draft.' } + } - let targetUpdateType = config.inputs.target - if (config.metadata.ecosystem === 'gitsubmodule') { - if (!config.inputs.handleSubmodule) { - return { - execute: false, - validationState: state.skipped, - validationMessage: - 'The pull-request is associated with a submodule but the action is not configured to handle submodules.' - } - } else { - targetUpdateType = updateTypes.any - } + if ( + !config.inputs.skipVerification && + pull_request.user.login !== dependabotUser + ) { + return { + execute: false, + validationState: state.skipped, + validationMessage: `The Commit/PullRequest was not created by ${dependabotUser}.` } + } - if ( - !config.inputs.handleDependencyGroup && - config.metadata.dependecyGroup !== '' - ) { + let targetUpdateType = config.inputs.target + if (config.metadata.ecosystem === 'gitsubmodule') { + if (!config.inputs.handleSubmodule) { return { execute: false, validationState: state.skipped, validationMessage: - 'The pull-request is associated with a dependency group but the action is not configured to handle dependency groups.' + 'The pull-request is associated with a submodule but the action is not configured to handle submodules.' } + } else { + targetUpdateType = updateTypes.any } + } - const { data: compareData } = await cmd.comparePullRequestToBase( - github, - repository, - pull_request - ) - if (compareData.status === 'behind' && compareData.behind_by > 0) { - return { - execute: true, - body: `@dependabot ${commandText.rebase}`, - cmd: cmd.addComment, - validationState: state.rebased, - validationMessage: 'The pull request will be rebased.' - } + if ( + !config.inputs.handleDependencyGroup && + config.metadata.dependecyGroup !== '' + ) { + return { + execute: false, + validationState: state.skipped, + validationMessage: + 'The pull-request is associated with a dependency group but the action is not configured to handle dependency groups.' } + } - let retryCount = 0 - let mergeabilityResolved = pull_request.mergeable !== null - - while (!mergeabilityResolved && retryCount < 5) { - try { - core.info( - `Pull request mergeability is not resolved. Retry count: ${retryCount}` - ) - - const { data: prData } = await cmd.getPullRequest( - github, - repository, - pull_request - ) - - if (prData.mergeable === null || prData.mergeable === undefined) { - core.info( - `Pull request mergeability is not yet resolved... retrying in 5 seconds.` - ) - retryCount++ - await new Promise(resolve => setTimeout(resolve, 5000)) - } else { - mergeabilityResolved = true - } - } catch (apiError) { - return { - execute: false, - validationState: state.skipped, - validationMessage: `An error occurred fetching the PR from Github: ${JSON.stringify( - apiError - )}` - } - } + const { data: compareData } = await comparePullRequest( + github, + repository, + pull_request + ) + if ( + compareData && + compareData.status === 'behind' && + compareData.behind_by > 0 + ) { + return { + execute: true, + body: `@dependabot ${commandText.rebase}`, + cmd: addComment, + validationState: state.rebased, + validationMessage: 'The pull request will be rebased.' } + } - if (pull_request.mergeable_state === 'behind') { - return { - execute: true, - body: `@dependabot ${commandText.rebase}`, - cmd: cmd.addComment, - validationState: state.rebased, - validationMessage: 'The pull request will be rebased.' - } - } + let retryCount = 0 + let mergeabilityResolved = pull_request.mergeable !== null - if ( - pull_request.mergeable_state === 'blocked' || - pull_request.mergeable_state === 'dirty' - ) { + while (!mergeabilityResolved && retryCount < 5) { + try { core.info( - `Pull request merge is blocked by conflicts. State: ${pull_request.mergeable_state}` + `Pull request mergeability is not resolved. Retry count: ${retryCount}` ) + + const { data: prData } = await getPullRequest( + github, + repository, + pull_request + ) + + if (prData.mergeable === null || prData.mergeable === undefined) { + core.info( + `Pull request mergeability is not yet resolved... retrying in 5 seconds.` + ) + retryCount++ + await new Promise(resolve => setTimeout(resolve, 5000)) + } else { + mergeabilityResolved = true + } + } catch (apiError) { return { execute: false, validationState: state.skipped, - validationMessage: - 'Pull request merge is blocked by conflicts, please resolve them manually.' + validationMessage: `An error occurred fetching the PR from Github: ${JSON.stringify( + apiError + )}` } } + } - const treatVersion = - targetUpdateType === updateTypes.any || - updateTypesPriority.indexOf(config.metadata.updateType) <= - updateTypesPriority.indexOf(targetUpdateType) + if (pull_request.mergeable_state === 'behind') { + return { + execute: true, + body: `@dependabot ${commandText.rebase}`, + cmd: addComment, + validationState: state.rebased, + validationMessage: 'The pull request will be rebased.' + } + } + if ( + pull_request.mergeable_state === 'blocked' || + pull_request.mergeable_state === 'dirty' + ) { core.info( - `Check package '${config.metadata.dependecyNames}' - Old: '${config.metadata.previousVersion}' New: '${config.metadata.newVersion}'` + `Pull request merge is blocked by conflicts. State: ${pull_request.mergeable_state}` ) - core.info(`Is the package version treated? - ${treatVersion}`) - if (!treatVersion) { - return { - execute: false, - validationState: state.skipped, - validationMessage: `The package version is not treated by the action.` - } + return { + execute: false, + validationState: state.skipped, + validationMessage: + 'Pull request merge is blocked by conflicts, please resolve them manually.' } + } - if (config.inputs.approveOnly) { - return { - execute: true, - body: 'Approved by DependaMerge.', - cmd: cmd.approvePullRequest, - validationState: state.approved, - validationMessage: 'The pull request will be approved.' - } - } + const treatVersion = + targetUpdateType === updateTypes.any || + updateTypesPriority.indexOf(config.metadata.updateType) <= + updateTypesPriority.indexOf(targetUpdateType) + core.info( + `Check package '${config.metadata.dependecyNames}' - Old: '${config.metadata.previousVersion}' New: '${config.metadata.newVersion}'` + ) + core.info(`Is the package version treated? - ${treatVersion}`) + if (!treatVersion) { return { - execute: true, - body: `@dependabot ${config.inputs.commandMethod}`, - cmd: cmd.approvePullRequest, - validationState: state.merged, - validationMessage: 'The pull request will be merged.' + execute: false, + validationState: state.skipped, + validationMessage: `The package version is not treated by the action.` } - } catch (validationError) { + } + + if (config.inputs.approveOnly) { return { - execute: false, - validationState: state.failed, - validationMessage: `An error occurred validating the PR: ${JSON.stringify( - validationError - )}` + execute: true, + body: 'Approved by DependaMerge.', + cmd: approvePullRequest, + validationState: state.approved, + validationMessage: 'The pull request will be approved.' } - } finally { - core.endGroup() + } + + return { + execute: true, + body: `@dependabot ${config.inputs.commandMethod}`, + cmd: approvePullRequest, + validationState: state.merged, + validationMessage: 'The pull request will be merged.' } } diff --git a/src/utils.js b/src/utils.js index f8f26b6..7f8abd5 100644 --- a/src/utils.js +++ b/src/utils.js @@ -140,8 +140,16 @@ async function validatePullRequest(github, repository, pull_request, config) { } } - const { data: compareData } = await comparePullRequest(github, repository, pull_request) - if (compareData && compareData.status === 'behind' && compareData.behind_by > 0) { + const { data: compareData } = await comparePullRequest( + github, + repository, + pull_request + ) + if ( + compareData && + compareData.status === 'behind' && + compareData.behind_by > 0 + ) { return { execute: true, body: `@dependabot ${commandText.rebase}`,