(
prNumber: number,
incomingPR: PullRequestData,
rule: PullRule,
config: { isMergeableMaxRetries?: number },
)
| 174 | } |
| 175 | |
| 176 | private async processMerge( |
| 177 | prNumber: number, |
| 178 | incomingPR: PullRequestData, |
| 179 | rule: PullRule, |
| 180 | config: { isMergeableMaxRetries?: number }, |
| 181 | ): Promise<boolean> { |
| 182 | const mergeableStatus = await this.getMergeableStatus( |
| 183 | prNumber, |
| 184 | incomingPR, |
| 185 | rule, |
| 186 | config, |
| 187 | ); |
| 188 | |
| 189 | if (!mergeableStatus?.mergeable) return false; |
| 190 | |
| 191 | if (rule.mergeMethod === "hardreset") { |
| 192 | try { |
| 193 | this.logger.debug( |
| 194 | `#${prNumber} Performing hard reset`, |
| 195 | ); |
| 196 | await this.hardResetCommit(incomingPR.base.ref, incomingPR.head.sha); |
| 197 | this.logger.info( |
| 198 | `#${prNumber} Hard reset successful`, |
| 199 | ); |
| 200 | return true; |
| 201 | } catch (err) { |
| 202 | this.logger.error( |
| 203 | { err }, |
| 204 | `#${prNumber} Hard reset failed`, |
| 205 | ); |
| 206 | return false; |
| 207 | } |
| 208 | } else if (rule.mergeMethod === "none") { |
| 209 | this.logger.debug( |
| 210 | `#${prNumber} Merge method is none, skip merging`, |
| 211 | ); |
| 212 | return true; |
| 213 | } else { |
| 214 | let mergeMethod = rule.mergeMethod; |
| 215 | if (mergeMethod === "rebase" && !mergeableStatus.rebaseable) { |
| 216 | mergeMethod = "merge"; |
| 217 | } |
| 218 | await this.mergePR(prNumber, mergeMethod); |
| 219 | this.logger.info( |
| 220 | `#${prNumber} Auto merged pull request using ${mergeMethod}`, |
| 221 | ); |
| 222 | return true; |
| 223 | } |
| 224 | } |
| 225 | |
| 226 | private async getMergeableStatus( |
| 227 | prNumber: number, |
no test coverage detected