public UpdateMergeRequestAssignee ( NGitLab.Models.MergeRequest mergeRequest, string user ) : NGitLab.Models.MergeRequest | ||
mergeRequest | NGitLab.Models.MergeRequest | |
user | string | |
return | NGitLab.Models.MergeRequest |
static void ProcessBuildHook(GitLabWrapper gitLabWrapper, string serviceUser, BuildHookClient hook, bool supportSendingMessages, string farmTaskName) { Log.Message($"Build hook title: {hook.BuildName}"); Log.Message($"Build hook status: {hook.Status}"); if (supportSendingMessages) SendMessage(serviceUser, hook.Json, farmTaskName); if (hook.Status == BuildStatus.success) { Project project = gitLabWrapper.GetProject(hook.ProjectId); if (project == null) { Log.Message($"Can`t find project {hook.ProjectName}."); return; } Log.Message($"Project: {project.PathWithNamespace}"); var mergeRequest = CalcMergeRequest(gitLabWrapper, hook, project); if (mergeRequest == null) { Log.Message("Can`t find merge request."); return; } Log.Message($"Merge request: id = {mergeRequest.Id} title = {mergeRequest.Title}"); Log.Message($"Merge request state = {mergeRequest.State}"); if (mergeRequest.State == "opened" || mergeRequest.State == "reopened") { var latestCommit = gitLabWrapper.GetMergeRequestCommits(mergeRequest).FirstOrDefault(); if (latestCommit == null) { Log.Message("Wrong merge request found."); return; } Log.Message($"Merge request latest commit sha = {latestCommit.Id}"); if (!latestCommit.Id.Equals(new Sha1(hook.Commit.Id))) { Log.Message($"Additional commits has been added {hook.Commit.Id}"); return; } var xmlComments = gitLabWrapper.GetComments(mergeRequest).Where(x => IsXml(x.Note)); var options = xmlComments.Select(x => MergeRequestOptions.ConvertFromString(x.Note)).FirstOrDefault(); if (options?.ActionType == MergeRequestActionType.sync) { Log.Message("Sync options found."); var syncOptions = (MergeRequestSyncAction)options.Action; Log.Message($"Sync options perform testing is {syncOptions.PerformTesting}"); Log.Message($"Sync options assign to service is {syncOptions.AssignToSyncService}"); Log.Message($"Sync options sync task is {syncOptions.SyncTask}"); Log.Message($"Sync options sync service is {syncOptions.SyncService}"); if (syncOptions.PerformTesting && syncOptions.AssignToSyncService) { gitLabWrapper.UpdateMergeRequestAssignee(mergeRequest, syncOptions.SyncService); ForceBuild(syncOptions.SyncTask); } return; } Log.Message("Sync options not found."); } } }
static void AssignBackConflictedMergeRequest(GitLabWrapper gitLabWrapper, RegisteredUsers users, MergeRequest mergeRequest, string comment) { User author = users.GetUser(mergeRequest.Author.Username); var mr = gitLabWrapper.UpdateMergeRequestAssignee(mergeRequest, author.UserName); gitLabWrapper.AddCommentToMergeRequest(mr, comment); }
static int DoProcessTestResultsWork(ProcessTestsOptions clo) { Log.Message("process test results."); string targetRepoPath = GetSimpleGitHttpPath(clo.Repo); if (string.IsNullOrEmpty(targetRepoPath)) { Log.Error($"Can`t parse repo path {clo.Repo}"); return 1; } string sourceRepoPath = GetSimpleGitHttpPath(clo.SourceRepo); if (string.IsNullOrEmpty(sourceRepoPath)) { Log.Error($"Can`t parse source repo path {clo.SourceRepo}"); return 1; } string gitlabauthtoken = clo.AuthToken; string targetBranchName = clo.Branch; string gitServer = clo.Server; string sourceBranchName = clo.SourceBranch; GitLabWrapper gitLabWrapper = new GitLabWrapper(gitServer, gitlabauthtoken); Project targetProject = gitLabWrapper.FindProject(targetRepoPath); if (targetProject == null) { Log.Error($"Can`t find target project {targetRepoPath}."); return 1; } Branch targetBranch = gitLabWrapper.GetBranch(targetProject, targetBranchName); if (targetBranch == null) { Log.Error($"Can`t find targetBranch branch {targetBranchName}"); return 1; } var sourceProject = gitLabWrapper.FindProjectFromAll(sourceRepoPath); if (sourceProject == null) { Log.Error($"Can`t find source project {sourceRepoPath}"); return 1; } var sourceBranch = gitLabWrapper.GetBranch(sourceProject, sourceBranchName); if (sourceBranch == null) { Log.Error($"Source branch {sourceBranchName} was not found."); return 1; } MergeRequest mergeRequest = gitLabWrapper.GetMergeRequests(targetProject, x => x.SourceBranch == sourceBranchName && x.TargetBranch == targetBranchName).FirstOrDefault(); if (mergeRequest == null) { Log.Error($"Can`t find merge request."); return 1; } var comments = gitLabWrapper.GetComments(mergeRequest); var mergeRequestSyncOptions = comments?.Where(x => IsXml(x.Note)).Where(x => { var mr = MergeRequestOptions.ConvertFromString(x.Note); return mr?.ActionType == MergeRequestActionType.sync; }).Select(x => (MergeRequestSyncAction)MergeRequestOptions.ConvertFromString(x.Note).Action).LastOrDefault(); if (mergeRequestSyncOptions == null) { Log.Message("Merge request sync options not found. Nothing to do."); return 0; } if (!mergeRequestSyncOptions.PerformTesting) { Log.Message("Testing is disabled in config."); return 0; } Log.Message("Testing is enabled in config."); var commit = gitLabWrapper.GetMergeRequestCommits(mergeRequest).FirstOrDefault(); if (commit == null) { Log.Message("Merge request has no commits."); return 0; } var mergeRequestBuild = gitLabWrapper.GetBuilds(mergeRequest, commit.Id).FirstOrDefault(); if (mergeRequestBuild == null) { Log.Message("Merge request has no build."); return 0; } Log.Message($"Build has {mergeRequestBuild.Status} status."); if (mergeRequestBuild.Status == BuildStatus.success) { if (mergeRequestSyncOptions.AssignToSyncService) { gitLabWrapper.UpdateMergeRequestAssignee(mergeRequest, mergeRequestSyncOptions.SyncTask); Log.Message($"Success tests. Assigning to sync service {mergeRequestSyncOptions.SyncTask}"); return 0; } else { gitLabWrapper.UpdateMergeRequestAssignee(mergeRequest, mergeRequest.Author.Username); Log.Message($"Success tests. Assigning to back to author {mergeRequest.Author.Username}"); return 0; } } if (mergeRequestBuild.Status == BuildStatus.failed) { Log.Message($"Failed tests."); return 0; } Log.Message("Nothing happens."); return 0; }