private bool IsPushedToIgnoredBranch(PushInfoModel pushInfo) { var branchName = pushInfo.GetPushedBranchName(); if (branchName.Name.StartsWith(_cfg.CreatedBranchesPrefix)) { _logger.LogDebug("Push is on branch {branchName} which is created by us", branchName); return(true); } return(false); }
public void RetryMergePullRequestsCreatedBefore(PushInfoModel pushInfo, IRepositoryConnectionContext repoContext) { var targetBranchName = pushInfo.GetPushedBranchName().Name; _logger.LogInformation("Retrying merging pull requests created by AutomergeBot before and not merged yet to branch {targetBranch}", targetBranchName); var openPullRequestsTargetingBranch = GetOpenPullRequestsTargetingBranch(repoContext, targetBranchName); if (openPullRequestsTargetingBranch.Any()) { _logger.LogDebug("There is {openPullRequestsCount} pull requests which potentially could be merged", openPullRequestsTargetingBranch.Count); foreach (var pullRequest in openPullRequestsTargetingBranch) { _mergePerformer.TryMergeExistingPullRequest(pullRequest, repoContext); } } }
private bool TryCreatePullRequest(BranchName sourceBranch, BranchName destinationBranchName, IRepositoryConnectionContext repoContext, out PullRequest pullRequest, PushInfoModel pushInfo, string changesOriginalAuthor) { var title = $"{Consts.AutomergeBotPullRequestTitlePrefix} {pushInfo.GetPushedBranchName()} @{pushInfo.GetHeadCommitShaShort()} -> {destinationBranchName}"; var body = $"Last change author: {changesOriginalAuthor}"; try { pullRequest = repoContext.CreatePullRequest(sourceBranch, destinationBranchName, title, body); return(true); } catch (Exception e) { _logger.LogError(e, "Creating pull request failed."); pullRequest = null; return(false); } }
private void TryDoMerges(PushInfoModel pushInfo, IRepositoryConnectionContext repoContext) { if (!TryGetMergeDestinationBranches(pushInfo.GetPushedBranchName(), out var destinationBranchNames)) { return; } _logger.LogInformation("Merging to {destinationBranchesCount} branches: {destinationBranchNames}", destinationBranchNames.Length, destinationBranchNames); foreach (var destinationBranchName in destinationBranchNames) { try { _mergePerformer.TryMergePushedChanges(pushInfo, destinationBranchName, repoContext); } catch (Exception e) { _logger.LogCritical(e, "Failed merging {commitSha} to {branchName}", pushInfo.HeadCommitSha, pushInfo.GetPushedBranchName()); } } }
public void TryMergePushedChanges( PushInfoModel pushInfo, BranchName destinationBranchName, IRepositoryConnectionContext repoContext) { var branchForPullRequest = CreateBranchNameForPush(pushInfo.GetPushedBranchName(), pushInfo.HeadCommitSha, destinationBranchName); repoContext.CreateBranch(branchForPullRequest, pushInfo.HeadCommitSha); var changesOriginalAuthor = RetrieveChangesOriginalAuthorFromPush(pushInfo, repoContext, out var coAuthorString); var createPullRequestSucceeded = TryCreatePullRequest(branchForPullRequest, destinationBranchName, repoContext, out var pullRequest, pushInfo, changesOriginalAuthor); if (!createPullRequestSucceeded) { _logger.LogWarning("Temp branch {branchName} for not created pull request has to be removed manually", branchForPullRequest); return; } var mergeCommitMessage = CreateMergeCommitMessage(pullRequest, coAuthorString); if (repoContext.MergePullRequest(pullRequest.Number, mergeCommitMessage)) { _logger.LogInformation("Pull request {pullRequestNumber} created and merged", pullRequest.Number); } else { _logger.LogInformation("Pull request {pullRequestNumber} created but could not be merged automatically", pullRequest.Number); _userNotifier.NotifyUserAboutPullRequestWithUnresolvedConflicts( pullRequest.Number, changesOriginalAuthor, repoContext, branchForPullRequest.Name, destinationBranchName.Name, pullRequest.HtmlUrl); } }