public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestMessage req, TraceWriter log) { log.Info($"{nameof(GithubMergedBranchSweepTrigger)} : C# HTTP trigger function processed a request."); var token = req.Headers.Where(x => x.Key == tokenHeader) .SelectMany(x => x.Value) .FirstOrDefault(); if (string.IsNullOrEmpty(token)) { return(req.CreateResponse(HttpStatusCode.BadRequest, $"Missing AccessToken from Header : {tokenHeader}")); } var json = await req.Content.ReadAsStringAsync(); var request = JsonConvert.DeserializeObject <GithubMergedBranchSweepRequest>(json); // Validation if (request.DaysPast < 0) { return(req.CreateResponse(HttpStatusCode.BadRequest, $"{nameof(request.DaysPast)} element must be larger equal than 1.")); } if (request.PrPageCount < 0) { return(req.CreateResponse(HttpStatusCode.BadRequest, $"{nameof(request.PrPageCount)} element must be larger equal than 1.")); } if (request.PrPageSize < 0) { return(req.CreateResponse(HttpStatusCode.BadRequest, $"{nameof(request.PrPageSize)} element must be larger equal than 1.")); } try { // Execute var sweeper = new GithubMergedBranchSweeper(request.Owner, token, request.Repository) { DaysPast = request.DaysPast, DryRun = request.DryRun, ExcludeBranches = request.ExcludeBranches, PrPageCount = request.PrPageCount, PrPageSize = request.PrPageSize, }; Action <SweeptargetBranchResult[]> action = branches => log.Info($@"DryRun - {nameof(GithubMergedBranchSweepTimer)}: remove candidates are following. {branches.Select(x => x.BranchName).ToJoinedString(Environment.NewLine)}"); var results = await sweeper.SweepAsync(log, action); // Response var response = new SweepResponse() { DryRun = request.DryRun, Value = results }; var responseJson = JsonConvert.SerializeObject(response); return(req.CreateResponse(HttpStatusCode.OK, responseJson)); } catch (Exception ex) { log.Error($"{ex.Message} {ex.GetType().FullName} {ex.StackTrace}"); return(req.CreateResponse(HttpStatusCode.InternalServerError, $"Error when running sweep. {ex.GetType()} {ex.Message}")); } }
public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestMessage req, TraceWriter log) { log.Info($"{nameof(GithubBranchDetailTigger)} : C# HTTP trigger function processed a request."); var token = req.Headers.Where(x => x.Key == tokenHeader) .SelectMany(x => x.Value) .FirstOrDefault(); if (string.IsNullOrEmpty(token)) { return(req.CreateResponse(HttpStatusCode.BadRequest, $"Missing AccessToken from Header : {tokenHeader}")); } var json = await req.Content.ReadAsStringAsync(); var request = JsonConvert.DeserializeObject <GithubBranchDetailRequest>(json); // Validation if (string.IsNullOrEmpty(token)) { return(req.CreateResponse(HttpStatusCode.BadRequest, $"{nameof(token)} query element must be included.")); } if (string.IsNullOrEmpty(request.Owner)) { return(req.CreateResponse(HttpStatusCode.BadRequest, $"{nameof(request.Owner)} posted json element must be included.")); } if (string.IsNullOrEmpty(request.Repository)) { return(req.CreateResponse(HttpStatusCode.BadRequest, $"{nameof(request.Repository)} posted json element must be included.")); } try { // Execute var sweeper = new GithubMergedBranchSweeper(request.Owner, token, request.Repository) { ExcludeBranches = request.ExcludeBranches, }; var branches = await sweeper.GetBranchesAsync(); var results = await sweeper.GetBranchDetailsAsync(branches); // Response var response = new BranchResponse() { Count = results.Length, Owner = request.Owner, Repository = request.Repository, Value = results }; var responseJson = JsonConvert.SerializeObject(response); return(req.CreateResponse(HttpStatusCode.OK, responseJson)); } catch (Exception ex) { log.Error($"{ex.Message} {ex.GetType().FullName} {ex.StackTrace}"); return(req.CreateResponse(HttpStatusCode.InternalServerError, $"Error when running sweep. {ex.GetType()} {ex.Message}")); } }
public static async Task Run([TimerTrigger("0 0 0 * * *")] TimerInfo myTimer, TraceWriter log) { log.Info($"{nameof(GithubMergedBranchSweepTimer)} : C# Timer trigger function executed at: {DateTime.Now}"); // get value from Environment variable var owner = GetOrDefault(envOwner, ""); var token = GetOrDefault(envToken, ""); var dryRun = GetOrDefault(envDryRun, true); var daysPast = GetOrDefault(envDaysPast, 1); var targetRepositories = GetOrDefault(envTargetRepositories, (string[])null); var excludeBranches = GetOrDefault(envExcludeBranches, GithubMergedBranchSweeper.DefaultExcludeBranchRule); // max pageSize : 100 // prPageSize * prPageCount = 2000 is pretty enough for 95 percentile var prPageSize = GetOrDefault(envPRPageSize, 100); int?prPageCount = GetOrDefault(envPRPageCount, 20);; // Show log log.Info($@"{envOwner} : {owner} {envToken} : {(!string.IsNullOrEmpty(token) ? "******" : "")} {envDryRun} : {dryRun} {envDaysPast} : {daysPast} {envPRPageSize} : {prPageSize} {envPRPageCount} : {prPageCount} {envTargetRepositories} : {targetRepositories.ToJoinedString(",")} {envExcludeBranches} : {excludeBranches.ToJoinedString(",")}"); // Run try { foreach (var repository in targetRepositories) { var sweeper = new GithubMergedBranchSweeper(owner, token, repository) { DaysPast = daysPast, DryRun = dryRun, ExcludeBranches = excludeBranches, PrPageCount = prPageCount, PrPageSize = prPageSize, }; Action <SweeptargetBranchResult[]> action = branches => log.Info($@"DryRun - {nameof(GithubMergedBranchSweepTimer)}: remove candidates are following. {branches.Select(x => x.BranchName).ToJoinedString(Environment.NewLine)}"); var results = await sweeper.SweepAsync(log, action); } } catch (Exception ex) { log.Error($"{ex.Message} {ex.GetType().FullName} {ex.StackTrace}"); throw; } }