mirror of
https://github.com/actions/runner.git
synced 2025-12-12 05:37:01 +00:00
Add notice annotation level and support more annotation fields (#1175)
* Add Notice Command * Add Feature Flag For Enhanced Annotations * Fix tests * Add validation for columns and lines * Fix order to match service * Remove console.write * Make Validation Better * Cleanup * Handle empty/whitespace strings * Add more validation for line/column ranges * Make Validation Debug, Not Throw * Change casing to 🐫 from 🐍 * Give notice a well known tag * Cleanup * Sanitize invalid commands rather than fail
This commit is contained in:
@@ -75,6 +75,12 @@ namespace GitHub.Runner.Worker
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!ActionCommandManager.EnhancedAnnotationsEnabled(context) && actionCommand.Command == "notice")
|
||||
{
|
||||
context.Debug($"Enhanced Annotations not enabled on the server: 'notice' command will not be processed.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// Serialize order
|
||||
lock (_commandSerializeLock)
|
||||
{
|
||||
@@ -141,6 +147,10 @@ namespace GitHub.Runner.Worker
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
internal static bool EnhancedAnnotationsEnabled(IExecutionContext context) {
|
||||
return context.Global.Variables.GetBoolean("DistributedTask.EnhancedAnnotations") ?? false;
|
||||
}
|
||||
}
|
||||
|
||||
public interface IActionCommandExtension : IExtension
|
||||
@@ -498,6 +508,13 @@ namespace GitHub.Runner.Worker
|
||||
public override string Command => "error";
|
||||
}
|
||||
|
||||
public sealed class NoticeCommandExtension : IssueCommandExtension
|
||||
{
|
||||
public override IssueType Type => IssueType.Notice;
|
||||
|
||||
public override string Command => "notice";
|
||||
}
|
||||
|
||||
public abstract class IssueCommandExtension : RunnerService, IActionCommandExtension
|
||||
{
|
||||
public abstract IssueType Type { get; }
|
||||
@@ -512,6 +529,11 @@ namespace GitHub.Runner.Worker
|
||||
command.Properties.TryGetValue(IssueCommandProperties.Line, out string line);
|
||||
command.Properties.TryGetValue(IssueCommandProperties.Column, out string column);
|
||||
|
||||
if (!ActionCommandManager.EnhancedAnnotationsEnabled(context))
|
||||
{
|
||||
context.Debug("Enhanced Annotations not enabled on the server. The 'title', 'end_line', and 'end_column' fields are unsupported.");
|
||||
}
|
||||
|
||||
Issue issue = new Issue()
|
||||
{
|
||||
Category = "General",
|
||||
@@ -563,13 +585,73 @@ namespace GitHub.Runner.Worker
|
||||
context.AddIssue(issue);
|
||||
}
|
||||
|
||||
public static void ValidateLinesAndColumns(ActionCommand command, IExecutionContext context)
|
||||
{
|
||||
command.Properties.TryGetValue(IssueCommandProperties.Line, out string line);
|
||||
command.Properties.TryGetValue(IssueCommandProperties.EndLine, out string endLine);
|
||||
command.Properties.TryGetValue(IssueCommandProperties.Column, out string column);
|
||||
command.Properties.TryGetValue(IssueCommandProperties.EndColumn, out string endColumn);
|
||||
|
||||
var hasStartLine = int.TryParse(line, out int lineNumber);
|
||||
var hasEndLine = int.TryParse(endLine, out int endLineNumber);
|
||||
var hasStartColumn = int.TryParse(column, out int columnNumber);
|
||||
var hasEndColumn = int.TryParse(endColumn, out int endColumnNumber);
|
||||
var hasColumn = hasStartColumn || hasEndColumn;
|
||||
|
||||
if (hasEndLine && !hasStartLine)
|
||||
{
|
||||
context.Debug($"Invalid {command.Command} command value. '{IssueCommandProperties.EndLine}' can only be set if '{IssueCommandProperties.Line}' is provided");
|
||||
command.Properties[IssueCommandProperties.Line] = endLine;
|
||||
hasStartLine = true;
|
||||
line = endLine;
|
||||
}
|
||||
|
||||
if (hasEndColumn && !hasStartColumn)
|
||||
{
|
||||
context.Debug($"Invalid {command.Command} command value. '{IssueCommandProperties.EndColumn}' can only be set if '{IssueCommandProperties.Column}' is provided");
|
||||
command.Properties[IssueCommandProperties.Column] = endColumn;
|
||||
hasStartColumn = true;
|
||||
column = endColumn;
|
||||
}
|
||||
|
||||
if (!hasStartLine && hasColumn)
|
||||
{
|
||||
context.Debug($"Invalid {command.Command} command value. '{IssueCommandProperties.Column}' and '{IssueCommandProperties.EndColumn}' can only be set if '{IssueCommandProperties.Line}' value is provided.");
|
||||
command.Properties.Remove(IssueCommandProperties.Column);
|
||||
command.Properties.Remove(IssueCommandProperties.EndColumn);
|
||||
}
|
||||
|
||||
if (hasEndLine && line != endLine && hasColumn)
|
||||
{
|
||||
context.Debug($"Invalid {command.Command} command value. '{IssueCommandProperties.Column}' and '{IssueCommandProperties.EndColumn}' cannot be set if '{IssueCommandProperties.Line}' and '{IssueCommandProperties.EndLine}' are different values.");
|
||||
command.Properties.Remove(IssueCommandProperties.Column);
|
||||
command.Properties.Remove(IssueCommandProperties.EndColumn);
|
||||
}
|
||||
|
||||
if (hasStartLine && hasEndLine && endLineNumber < lineNumber)
|
||||
{
|
||||
context.Debug($"Invalid {command.Command} command value. '{IssueCommandProperties.EndLine}' cannot be less than '{IssueCommandProperties.Line}'.");
|
||||
command.Properties.Remove(IssueCommandProperties.Line);
|
||||
command.Properties.Remove(IssueCommandProperties.EndLine);
|
||||
}
|
||||
|
||||
if (hasStartColumn && hasEndColumn && endColumnNumber < columnNumber)
|
||||
{
|
||||
context.Debug($"Invalid {command.Command} command value. '{IssueCommandProperties.EndColumn}' cannot be less than '{IssueCommandProperties.Column}'.");
|
||||
command.Properties.Remove(IssueCommandProperties.Column);
|
||||
command.Properties.Remove(IssueCommandProperties.EndColumn);
|
||||
}
|
||||
}
|
||||
|
||||
private static class IssueCommandProperties
|
||||
{
|
||||
public const String File = "file";
|
||||
public const String Line = "line";
|
||||
public const String EndLine = "endLine";
|
||||
public const String Column = "col";
|
||||
public const String EndColumn = "endColumn";
|
||||
public const String Title = "title";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public sealed class GroupCommandExtension : GroupingCommandExtension
|
||||
|
||||
Reference in New Issue
Block a user