send annotations to run-service (#2574)

* send annotations to run-service

* skip message deletion

* actually don't skip deletion

* enum as numbers

* fix enum

* linting

* remove unncessary file

* feedback
This commit is contained in:
Yashwanth Anantharaju
2023-05-01 08:33:03 -04:00
committed by GitHub
parent 8d74a9ead6
commit 896152d78e
13 changed files with 332 additions and 59 deletions
@@ -0,0 +1,91 @@
using GitHub.DistributedTask.WebApi;
namespace Sdk.RSWebApi.Contracts
{
public static class IssueExtensions
{
public static Annotation? ToAnnotation(this Issue issue)
{
var issueMessage = issue.Message;
if (string.IsNullOrWhiteSpace(issueMessage))
{
if (!issue.Data.TryGetValue(RunIssueKeys.Message, out issueMessage) || string.IsNullOrWhiteSpace(issueMessage))
{
return null;
}
}
var annotationLevel = GetAnnotationLevel(issue.Type);
var path = GetFilePath(issue);
var lineNumber = GetAnnotationNumber(issue, RunIssueKeys.Line) ?? 0;
var endLineNumber = GetAnnotationNumber(issue, RunIssueKeys.EndLine) ?? lineNumber;
var columnNumber = GetAnnotationNumber(issue, RunIssueKeys.Col) ?? 0;
var endColumnNumber = GetAnnotationNumber(issue, RunIssueKeys.EndColumn) ?? columnNumber;
var logLineNumber = GetAnnotationNumber(issue, RunIssueKeys.LogLineNumber) ?? 0;
if (path == null && lineNumber == 0 && logLineNumber != 0)
{
lineNumber = logLineNumber;
endLineNumber = logLineNumber;
}
return new Annotation
{
Level = annotationLevel,
Message = issueMessage,
Path = path,
StartLine = lineNumber,
EndLine = endLineNumber,
StartColumn = columnNumber,
EndColumn = endColumnNumber,
};
}
private static AnnotationLevel GetAnnotationLevel(IssueType issueType)
{
switch (issueType)
{
case IssueType.Error:
return AnnotationLevel.FAILURE;
case IssueType.Warning:
return AnnotationLevel.WARNING;
case IssueType.Notice:
return AnnotationLevel.NOTICE;
default:
return AnnotationLevel.UNKNOWN;
}
}
private static int? GetAnnotationNumber(Issue issue, string key)
{
if (issue.Data.TryGetValue(key, out var numberString) &&
int.TryParse(numberString, out var number))
{
return number;
}
return null;
}
private static string GetAnnotationField(Issue issue, string key)
{
if (issue.Data.TryGetValue(key, out var value))
{
return value;
}
return null;
}
private static string GetFilePath(Issue issue)
{
if (issue.Data.TryGetValue(RunIssueKeys.File, out var path) &&
!string.IsNullOrWhiteSpace(path))
{
return path;
}
return null;
}
}
}