diff --git a/src/Approve.Checker/App.cs b/src/Approve.Checker/App.cs index 321413a..46ecfcd 100644 --- a/src/Approve.Checker/App.cs +++ b/src/Approve.Checker/App.cs @@ -39,11 +39,23 @@ public class App : IApp Console.WriteLine("Not in MergeRequest. Exiting."); return 0; } + var approversDict = ParseApprovers(); + if (approversDict is null) + { + return -1; + } + var mrId = int.Parse(_settings.MrPath.Split('!')[1]); var mergeRequest = await _client.MergeRequests.GetAsync(_settings.ProjectId, mrId); var commit = await _client.Commits.GetAsync(_settings.ProjectId, mergeRequest.Sha); - if (!await IsApproved(mergeRequest, commit)) + + var isCodeFreezePeriod = _settings.ReleaseCodeFreeze != "true"; + var periodDescription = isCodeFreezePeriod ? "Code-Freeze. Restrictions may apply" : "Normal"; + Console.WriteLine($"Current period is {periodDescription}."); + + approversDict = FilterApprovers(approversDict, isCodeFreezePeriod); + if (!await IsApproved(mergeRequest, commit, approversDict)) { return -1; } @@ -51,13 +63,8 @@ public class App : IApp return 0; } - private async Task IsApproved(MergeRequest mergeRequest, Commit commit) + private async Task IsApproved(MergeRequest mergeRequest, Commit commit, Dictionary approversDict) { - var approversDict = ParseApprovers(); - if (approversDict is null) - { - return false; - } var emojis = await _client.MergeRequests.GetAwardEmojisAsync(_settings.ProjectId, mergeRequest.Iid); var sb = new StringBuilder(); @@ -125,4 +132,17 @@ public class App : IApp return null; } } + + private Dictionary FilterApprovers(Dictionary approvers, bool isCodeFreezePeriod) + { + var result = new Dictionary(); + foreach (var approversDto in approvers) + { + if (approversDto.Value.ForCodeFreeze == isCodeFreezePeriod) + { + result.Add(approversDto.Key, approversDto.Value); + } + } + return result; + } } \ No newline at end of file diff --git a/src/Approve.Checker/Gitlab/ApproversDto.cs b/src/Approve.Checker/Gitlab/ApproversDto.cs index e407c97..bb5b859 100644 --- a/src/Approve.Checker/Gitlab/ApproversDto.cs +++ b/src/Approve.Checker/Gitlab/ApproversDto.cs @@ -8,6 +8,7 @@ namespace Approve.Checker.Gitlab; public class ApproversDto { + public bool ForCodeFreeze { get; set; } public int CountApprovers { get; set; } = 1; public List Users { get; set; } = new(); } \ No newline at end of file diff --git a/src/Approve.Checker/Gitlab/Settings.cs b/src/Approve.Checker/Gitlab/Settings.cs index 34f89e5..71decf3 100644 --- a/src/Approve.Checker/Gitlab/Settings.cs +++ b/src/Approve.Checker/Gitlab/Settings.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Approve.Checker.Gitlab +namespace Approve.Checker.Gitlab { public class Settings { @@ -13,6 +7,7 @@ namespace Approve.Checker.Gitlab public string MrPath = Environment.GetEnvironmentVariable("CI_OPEN_MERGE_REQUESTS")!; public string ProjectId = Environment.GetEnvironmentVariable("CI_PROJECT_ID") ?? CheckAndThrow("CI_PROJECT_ID"); public string Approvers = Environment.GetEnvironmentVariable("APPROVERS_FILEPATH") ?? CheckAndThrow("APPROVERS_FILEPATH"); + public string ReleaseCodeFreeze = Environment.GetEnvironmentVariable("RELEASE_CODEFREEZE") ?? "false"; private static string CheckAndThrow(string name) {