(
incomingPR: PullRequestData | null,
config: { isMergeableMaxRetries?: number } = {},
)
| 96 | } |
| 97 | |
| 98 | private async checkAutoMerge( |
| 99 | incomingPR: PullRequestData | null, |
| 100 | config: { isMergeableMaxRetries?: number } = {}, |
| 101 | ): Promise<boolean> { |
| 102 | if (!incomingPR) return false; |
| 103 | |
| 104 | const prNumber = incomingPR.number; |
| 105 | this.logger.debug( |
| 106 | `#${prNumber} Checking auto merged pull request`, |
| 107 | ); |
| 108 | |
| 109 | const rule: PullRule | undefined = this.config.rules.find((r) => |
| 110 | r.base.toLowerCase() === incomingPR.base.ref.toLowerCase() && |
| 111 | (r.upstream.toLowerCase() === incomingPR.head.label.toLowerCase() || |
| 112 | r.upstream.toLowerCase() === incomingPR.head.ref.toLowerCase()) |
| 113 | ); |
| 114 | |
| 115 | if (!rule) { |
| 116 | this.logger.debug( |
| 117 | `#${prNumber} No rule found`, |
| 118 | ); |
| 119 | return false; |
| 120 | } |
| 121 | |
| 122 | if (incomingPR.mergeable === false) { |
| 123 | await this.handleMergeConflict(prNumber, rule); |
| 124 | return false; |
| 125 | } |
| 126 | |
| 127 | if ( |
| 128 | rule.mergeMethod !== "none" && |
| 129 | incomingPR.state === "open" && |
| 130 | incomingPR.user.login === appConfig.botName |
| 131 | ) { |
| 132 | return await this.processMerge(prNumber, incomingPR, rule, config); |
| 133 | } |
| 134 | |
| 135 | this.logger.debug( |
| 136 | `#${prNumber} Skip processing`, |
| 137 | ); |
| 138 | return false; |
| 139 | } |
| 140 | |
| 141 | private async handleMergeConflict( |
| 142 | prNumber: number, |
no test coverage detected