diff --git a/README.md b/README.md index 373432d..6b34033 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,8 @@ jobs: requiredLabels: auto-merge # Required at least 2 approves (default: 0) requiredApprovals: 2 + # Required approvals from all requested reviewers + allRequestedReviewersMustApprove: true # Required these status checks success requiredStatusChecks: | build_pr diff --git a/action.yml b/action.yml index 1f3fd5b..bf6932d 100644 --- a/action.yml +++ b/action.yml @@ -14,18 +14,22 @@ inputs: default: 'MERGE' requiredLabels: required: false - description: 'Labels need to be present for a pull request.' + description: 'Labels must be present before merging.' requiredApprovals: required: false - description: 'Count of required approval' + description: 'Count of approvals must be this number before merging.' default: '0' + allRequestedReviewersMustApprove: + required: false + description: 'Must get approvals from all requested reviewers before merging.' + default: 'true' requiredStatusChecks: required: false - description: 'Multiple status checks required to be success' + description: 'Multiple status checks required to be success.' default: '' protectedBranchNamePattern: required: false - description: 'The name pattern of the base branch that your pull request wants to merge into. Branch protection rule with the same name pattern must be existed. If not set, the default behavior is to find the name pattern of main or master.' + description: 'The name pattern of GitHub branch protection rules to apply. The default behavior is to find the name pattern of main or master. Require personal access token to let this feature work.' default: '' runs: using: 'node12' diff --git a/package.json b/package.json index dc0aaaf..e54fdfa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "update-branch", - "version": "3.1.4", + "version": "3.1.5", "private": true, "description": "Merge your pull request in order.", "main": "lib/main.js", diff --git a/src/main.ts b/src/main.ts index 60d205b..e02912c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -29,6 +29,8 @@ async function run(): Promise { .split('\n') .filter(s => s !== '') const requiredApprovals = parseInt(core.getInput('requiredApprovals')) + const allRequestedReviewersMustApprove = + core.getInput('allRequestedReviewersMustApprove') === 'true' const requiredStatusChecks = core .getInput('requiredStatusChecks') .split('\n') @@ -51,6 +53,7 @@ async function run(): Promise { requiredApprovals: requiredApprovals || (branchProtectionRule?.requiredApprovingReviewCount ?? 0), + allRequestedReviewersMustApprove, requiredStatusChecks: [ ...requiredStatusChecks, ...(branchProtectionRule?.requiredStatusCheckContexts ?? []) diff --git a/src/type.ts b/src/type.ts index 4251100..46206c3 100644 --- a/src/type.ts +++ b/src/type.ts @@ -11,6 +11,7 @@ export interface Condition { branchNamePattern?: string requiredApprovals: number requiredStatusChecks: string[] + allRequestedReviewersMustApprove: boolean requiredLabels: string[] } diff --git a/src/utils.ts b/src/utils.ts index 6bd4162..8898bff 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -37,7 +37,8 @@ function isSatisfyBasicConditionPr( !pr.merged && pr.mergeable === 'MERGEABLE' && pr.reviews.totalCount >= condition.requiredApprovals && - pr.reviewRequests.totalCount === 0 && + (pr.reviewRequests.totalCount === 0 || + !condition.allRequestedReviewersMustApprove) && hasLabels(pr, condition) && minimatch(pr.baseRefName, condition.branchNamePattern ?? '*') )