using System.Runtime.InteropServices; using System.Threading.Channels; using Grpc.Net.Client; using marlin.agents.shell; using marlin.core.contracts; using marlin.core.functional; using marlin.core.models; using marlin.core.models.meta; using marlin.core.models.plan; using marlin.core.util; using ProtoBuf.Grpc; using ProtoBuf.Grpc.Client; DotNetEnv.Env.NoClobber().TraversePath().Load(); if (args.Length == 0) { SlaveLoop loop = new(); await loop.Start(); } else { string recipe = args[0]; string repoPath = args.Length > 1 ? args[1] : Environment.CurrentDirectory; JobUnitOfWork uow = new(new LocalInstanceService(), repoPath, recipe); await uow.Run(); } public class LocalInstanceService : IInstanceService { public async Task SendLogEvent(LogEventRequest request, CallContext context = default) { TextWriter writer = request.Error ? Console.Error : Console.Out; await writer.WriteLineAsync(request.Message); } public Task SendStatusUpdate(StatusUpdateRequest request, CallContext context = default) => Task.CompletedTask; }