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.Client; DotNetEnv.Env.NoClobber().TraversePath().Load(); var jobInstanceDir = Path.Combine(CommonPaths.AgentRoot, "instance"); Directory.CreateDirectory(jobInstanceDir); var client = MarlinApiClient.FromEnvironment(); var capabilities = new CapabilitySet(); capabilities.Items.Add(KnownCapabilities.Architecture, RuntimeInformation.OSArchitecture.ToString()); capabilities.Items.Add(KnownCapabilities.CoreCount, Environment.ProcessorCount.ToString()); capabilities.Items.Add(KnownCapabilities.Memory, (GC.GetGCMemoryInfo().TotalAvailableMemoryBytes / (1024 * 1024)).ToString()); var status = new AgentStatus(capabilities); AgentConfiguration config = await client.Handshake(status); Console.WriteLine($"IAM: {config.Name}"); Console.WriteLine($"MCJ: {config.MaxConcurrentJobs}"); while (true) { var job = await client.QueueNextJob(); Console.WriteLine(job == null ? "No pending jobs." : $"Claimed job {job.Id}: {job.Recipe}"); if (job != null) { GitBinaryClient gitClient = new(); var uow = new JobUnitOfWork(job, client, gitClient); await uow.Run(); } await Task.Delay(TimeSpan.FromSeconds(5)); }