mirror of
https://github.com/actions/runner.git
synced 2025-12-19 00:36:55 +00:00
Compare updated template evaluator (#4092)
This commit is contained in:
70
src/Sdk/WorkflowParser/IStepJsonConverter.cs
Normal file
70
src/Sdk/WorkflowParser/IStepJsonConverter.cs
Normal file
@@ -0,0 +1,70 @@
|
||||
#nullable disable // Consider removing in the future to minimize likelihood of NullReferenceException; refer https://learn.microsoft.com/en-us/dotnet/csharp/nullable-references
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace GitHub.Actions.WorkflowParser
|
||||
{
|
||||
internal sealed class IStepJsonConverter : JsonConverter
|
||||
{
|
||||
public override Boolean CanWrite
|
||||
{
|
||||
get
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public override Boolean CanConvert(Type objectType)
|
||||
{
|
||||
return typeof(IStep).GetTypeInfo().IsAssignableFrom(objectType.GetTypeInfo());
|
||||
}
|
||||
|
||||
public override Object ReadJson(
|
||||
JsonReader reader,
|
||||
Type objectType,
|
||||
Object existingValue,
|
||||
JsonSerializer serializer)
|
||||
{
|
||||
if (reader.TokenType != JsonToken.StartObject)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
JObject value = JObject.Load(reader);
|
||||
Object newValue = null;
|
||||
|
||||
if (value.TryGetValue("Uses", StringComparison.OrdinalIgnoreCase, out _))
|
||||
{
|
||||
newValue = new ActionStep();
|
||||
}
|
||||
else if (value.TryGetValue("Run", StringComparison.OrdinalIgnoreCase, out _))
|
||||
{
|
||||
newValue = new RunStep();
|
||||
}
|
||||
else
|
||||
{
|
||||
return existingValue;
|
||||
}
|
||||
|
||||
|
||||
if (value != null)
|
||||
{
|
||||
using JsonReader objectReader = value.CreateReader();
|
||||
serializer.Populate(objectReader, newValue);
|
||||
}
|
||||
|
||||
return newValue;
|
||||
}
|
||||
|
||||
public override void WriteJson(
|
||||
JsonWriter writer,
|
||||
Object value,
|
||||
JsonSerializer serializer)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user