From ffb441fc43092dc6d8e0ffebfe0d2cae6d1cdb2f Mon Sep 17 00:00:00 2001 From: David Pine Date: Mon, 5 Apr 2021 09:07:54 -0500 Subject: [PATCH] Do not create issue when unable to determine if issue already exists (#37) * Do not create issue when unable to determine if issue already exists. * Update logic per peer feedback. * Added is error true. --- src/DotNet.GitHub/GitHubGraphQLClient.cs | 13 +++++++------ src/DotNet.GitHub/GitHubLabelService.cs | 1 - src/DotNet.GitHub/ModelExtensions.cs | 10 +++++----- src/DotNet.VersionSweeper/Program.cs | 10 +++++++--- test/DotNet.GitHubActionsTests/JobServiceTests.cs | 12 ++++++++++++ .../DotNet.ReleasesTests.csproj | 2 +- test/DotNet.ReleasesTests/LabeledVersionTests.cs | 2 ++ 7 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/DotNet.GitHub/GitHubGraphQLClient.cs b/src/DotNet.GitHub/GitHubGraphQLClient.cs index 9c3d72e..97fe93a 100644 --- a/src/DotNet.GitHub/GitHubGraphQLClient.cs +++ b/src/DotNet.GitHub/GitHubGraphQLClient.cs @@ -33,7 +33,7 @@ ... on Issue { }"; readonly Uri _graphQLUri = new("https://api.github.com/graphql"); - readonly static JsonSerializerOptions _options = new() + readonly static JsonSerializerOptions s_options = new() { Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase) }, PropertyNameCaseInsensitive = true @@ -45,7 +45,7 @@ ... on Issue { public GitHubGraphQLClient(HttpClient httpClient, ILogger logger) => (_httpClient, _logger) = (httpClient, logger); - public async Task GetIssueAsync( + public async Task<(bool IsError, ExistingIssue? Issue)> GetIssueAsync( string owner, string name, string token, string title) { try @@ -68,20 +68,21 @@ public GitHubGraphQLClient(HttpClient httpClient, ILogger l request.Headers.Add("Accepts", MediaTypeNames.Application.Json); using var response = await _httpClient.PostAsync(_graphQLUri, request); + response.EnsureSuccessStatusCode(); var json = await response.Content.ReadAsStringAsync(); - var result = json.FromJson>(_options); + var result = json.FromJson>(s_options); - return result?.Data?.Search?.Nodes + return (false, result?.Data?.Search?.Nodes ?.Where(i => i.State == ItemState.Open) ?.OrderByDescending(i => i.CreatedAt.GetValueOrDefault()) - ?.FirstOrDefault(); + ?.FirstOrDefault()); } catch (Exception ex) { _logger.LogWarning(ex, ex.Message); - return default; + return (true, default); } } } diff --git a/src/DotNet.GitHub/GitHubLabelService.cs b/src/DotNet.GitHub/GitHubLabelService.cs index 8bed1f2..9f4c89b 100644 --- a/src/DotNet.GitHub/GitHubLabelService.cs +++ b/src/DotNet.GitHub/GitHubLabelService.cs @@ -8,7 +8,6 @@ using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging; using Octokit; -using Octokit.Extensions; namespace DotNet.GitHub { diff --git a/src/DotNet.GitHub/ModelExtensions.cs b/src/DotNet.GitHub/ModelExtensions.cs index ec9c640..29e428d 100644 --- a/src/DotNet.GitHub/ModelExtensions.cs +++ b/src/DotNet.GitHub/ModelExtensions.cs @@ -76,11 +76,11 @@ public static string ToMarkdownBody( var tfms = psr.TargetFrameworkMonikerSupports; document.AppendTable( new MarkdownTableHeader( - new MarkdownTableHeaderCell("TFM in project"), - new MarkdownTableHeaderCell("Target version"), - new MarkdownTableHeaderCell("End of life"), - new MarkdownTableHeaderCell("Release notes"), - new MarkdownTableHeaderCell("Nearest LTS TFM version")), + new("TFM in project"), + new("Target version"), + new("End of life"), + new("Release notes"), + new("Nearest LTS TFM version")), tfms.Where(_ => _.IsUnsupported) .Select(tfm => { diff --git a/src/DotNet.VersionSweeper/Program.cs b/src/DotNet.VersionSweeper/Program.cs index 27f3d2a..0859763 100644 --- a/src/DotNet.VersionSweeper/Program.cs +++ b/src/DotNet.VersionSweeper/Program.cs @@ -49,12 +49,16 @@ static async Task CreateAndEnqueueAsync( IJobService job, string title, Options options, Func getBody) { - var existingIssue = + var (isError, existingIssue) = await client.GetIssueAsync( options.Owner, options.Name, options.Token, title); - if (existingIssue?.State == ItemState.Open) + if (isError) { - job.Info($"Re-discovered but ignoring, latent non-LTS version in {existingIssue}."); + job.Debug($"Error checking for existing issue, best not to create an issue as it may be a duplicate."); + } + else if (existingIssue is { State: ItemState.Open }) + { + job.Info($"Re-discovered but ignoring, latent issue: {existingIssue}."); } else { diff --git a/test/DotNet.GitHubActionsTests/JobServiceTests.cs b/test/DotNet.GitHubActionsTests/JobServiceTests.cs index 8b88249..ee4a745 100644 --- a/test/DotNet.GitHubActionsTests/JobServiceTests.cs +++ b/test/DotNet.GitHubActionsTests/JobServiceTests.cs @@ -56,6 +56,18 @@ public void WriteSaveStateCommandTest( public static IEnumerable WriteSetOutputInput = new[] { + new object[] + { + new Dictionary + { + ["name"] = "summary" + }, + "Everything worked as expected", + new[] + { + $"::{Commands.SetOutput} name=summary::Everything worked as expected" + } + }, new object[] { null, diff --git a/test/DotNet.ReleasesTests/DotNet.ReleasesTests.csproj b/test/DotNet.ReleasesTests/DotNet.ReleasesTests.csproj index 3158694..9ad46d5 100644 --- a/test/DotNet.ReleasesTests/DotNet.ReleasesTests.csproj +++ b/test/DotNet.ReleasesTests/DotNet.ReleasesTests.csproj @@ -1,4 +1,4 @@ - + net5.0 diff --git a/test/DotNet.ReleasesTests/LabeledVersionTests.cs b/test/DotNet.ReleasesTests/LabeledVersionTests.cs index 7ab3e4e..c3d5ceb 100644 --- a/test/DotNet.ReleasesTests/LabeledVersionTests.cs +++ b/test/DotNet.ReleasesTests/LabeledVersionTests.cs @@ -16,6 +16,8 @@ public class LabeledVersionTests new object[] { "5.0.2", new LabeledVersion(new Version(5, 0, 2)) }, new object[] { "3.1.405", new LabeledVersion(new Version(3, 1, 405)) }, new object[] { "2.2.207", new LabeledVersion(new Version(2, 2, 207)) }, + new object[] { "8.1.0.314-preview1", new LabeledVersion(new Version(8, 1, 0, 314), "preview1") }, + new object[] { "7.7.84.34-beta", new LabeledVersion(new Version(7, 7, 84, 34), "beta") }, new object[] { "3.5.0-sp1", new LabeledVersion(new Version(3, 5, 0), "sp1") }, new object[] { "pickles", new LabeledVersion(null) } };