From ecd5f5d13936dd097b12766cb95a568ad5b073a9 Mon Sep 17 00:00:00 2001 From: Melodi <62381002+Melodi17@users.noreply.github.com> Date: Tue, 27 Oct 2026 23:04:59 +1000 Subject: feat: lots of stuff --- src/marlin.core/Class1.cs | 3 -- src/marlin.core/contracts/InstanceService.cs | 43 +++++++++++++++++++++++++ src/marlin.core/functional/GitBinaryClient.cs | 9 +++++- src/marlin.core/functional/IGitClient.cs | 1 + src/marlin.core/marlin.core.csproj | 1 + src/marlin.core/models/ISourceSecretStore.cs | 1 + src/marlin.core/models/JobStatus.cs | 10 ++++++ src/marlin.core/models/plan/ExecutionCommand.cs | 7 +++- src/marlin.core/util/CommonPaths.cs | 10 ++++++ 9 files changed, 80 insertions(+), 5 deletions(-) delete mode 100644 src/marlin.core/Class1.cs create mode 100644 src/marlin.core/contracts/InstanceService.cs create mode 100644 src/marlin.core/models/JobStatus.cs create mode 100644 src/marlin.core/util/CommonPaths.cs (limited to 'src/marlin.core') diff --git a/src/marlin.core/Class1.cs b/src/marlin.core/Class1.cs deleted file mode 100644 index ec0b3d9..0000000 --- a/src/marlin.core/Class1.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace marlin.core; - -public class Class1 { } \ No newline at end of file diff --git a/src/marlin.core/contracts/InstanceService.cs b/src/marlin.core/contracts/InstanceService.cs new file mode 100644 index 0000000..73e7229 --- /dev/null +++ b/src/marlin.core/contracts/InstanceService.cs @@ -0,0 +1,43 @@ +namespace marlin.core.contracts; + +using System.Runtime.Serialization; +using System.ServiceModel; +using models; +using ProtoBuf.Grpc; + +[ServiceContract] +public interface IInstanceService +{ + [OperationContract] + Task SendLogEvent(LogEventRequest request, CallContext context = default); + + [OperationContract] + Task SendStatusUpdate(StatusUpdateRequest request, CallContext context = default); +} + +[DataContract] +public class LogEventRequest +{ + [DataMember(Order = 1)] + public DateTime At + { + get => field; + set => field = DateTime.SpecifyKind(value, DateTimeKind.Utc); + } + + [DataMember(Order = 2)] + public string Message { get; set; } + + [DataMember(Order = 3)] + public bool Error { get; set; } + + [DataMember(Order = 4)] + public string StepId { get; set; } +} + +[DataContract] +public class StatusUpdateRequest +{ + [DataMember(Order = 1)] + public JobStatus Status { get; set; } +} \ No newline at end of file diff --git a/src/marlin.core/functional/GitBinaryClient.cs b/src/marlin.core/functional/GitBinaryClient.cs index 3a703da..b2751c0 100644 --- a/src/marlin.core/functional/GitBinaryClient.cs +++ b/src/marlin.core/functional/GitBinaryClient.cs @@ -41,6 +41,13 @@ public class GitBinaryClient : IGitClient await this.RunAsync(authenticate: true, args.ToArray()); } + public async Task Checkout(string repoPath, string remote, string branch, string commit) + { + await this.RunAsync(authenticate: true, "clone", "--revision", branch, remote, repoPath); + // await this.RunAsync(authenticate: true, "clone", "--branch", branch, remote, repoPath); + await this.RunAsync(authenticate: false, "-C", repoPath, "checkout", commit); + } + public async Task ListTree(string repoPath, string hash, string filterPath = ".") { string stdout = await this.RunAsync( @@ -84,7 +91,7 @@ public class GitBinaryClient : IGitClient foreach (string arg in arguments) psi.ArgumentList.Add(arg); - + psi.Environment["GIT_TERMINAL_PROMPT"] = "0"; IAsyncDisposable? credentialScope = authenticate && this._credential != null diff --git a/src/marlin.core/functional/IGitClient.cs b/src/marlin.core/functional/IGitClient.cs index 69cffa3..69476d3 100644 --- a/src/marlin.core/functional/IGitClient.cs +++ b/src/marlin.core/functional/IGitClient.cs @@ -5,6 +5,7 @@ public interface IGitClient Task> GetRemoteRefs(string remote); Task Init(string repoPath); Task FetchTrees(string repoPath, string remote, IEnumerable refs, bool skipBlobs = false); + Task Checkout(string repoPath, string remote, string branch, string commit); Task ListTree(string repoPath, string hash, string filterPath = "."); Task CatFile(string repoPath, string hash, string fileName); } \ No newline at end of file diff --git a/src/marlin.core/marlin.core.csproj b/src/marlin.core/marlin.core.csproj index 5b65fba..044c698 100644 --- a/src/marlin.core/marlin.core.csproj +++ b/src/marlin.core/marlin.core.csproj @@ -7,6 +7,7 @@ + diff --git a/src/marlin.core/models/ISourceSecretStore.cs b/src/marlin.core/models/ISourceSecretStore.cs index 0d5053e..2534d62 100644 --- a/src/marlin.core/models/ISourceSecretStore.cs +++ b/src/marlin.core/models/ISourceSecretStore.cs @@ -6,4 +6,5 @@ using core.models; public interface ISourceSecretStore { Task GetAsync(Guid id, CancellationToken ct); + //Task> ListAsync(CancellationToken ct); } \ No newline at end of file diff --git a/src/marlin.core/models/JobStatus.cs b/src/marlin.core/models/JobStatus.cs new file mode 100644 index 0000000..d606eb0 --- /dev/null +++ b/src/marlin.core/models/JobStatus.cs @@ -0,0 +1,10 @@ +namespace marlin.core.models; + +public enum JobStatus +{ + Pending, + Active, + Cancelled, + Success, + Failed +} \ No newline at end of file diff --git a/src/marlin.core/models/plan/ExecutionCommand.cs b/src/marlin.core/models/plan/ExecutionCommand.cs index 124da63..4bf19c3 100644 --- a/src/marlin.core/models/plan/ExecutionCommand.cs +++ b/src/marlin.core/models/plan/ExecutionCommand.cs @@ -10,6 +10,11 @@ public class ExecutionCommand public required CommandRole Role; public required bool Deferred; public CommandResultSelector? ResultSelector; - + public required FailBehavior FailBehavior; + + public override string ToString() + { + return $"Id={Id}, Name={Name}, Command={Command}, Role={Role}, Deferred={Deferred}, ResultSelector={ResultSelector}, FailBehavior={FailBehavior}"; + } } \ No newline at end of file diff --git a/src/marlin.core/util/CommonPaths.cs b/src/marlin.core/util/CommonPaths.cs new file mode 100644 index 0000000..6659d8b --- /dev/null +++ b/src/marlin.core/util/CommonPaths.cs @@ -0,0 +1,10 @@ +namespace marlin.core.util; + +public static class CommonPaths +{ + public static readonly string Root = Environment.GetEnvironmentVariable("MARLIN_ROOT") + ?? throw new Exception("MARLIN_ROOT is not set"); + + public static readonly string WebRoot = Path.Join(Root, "run"); + public static readonly string AgentRoot = Path.Join(Root, "local-run"); +} \ No newline at end of file -- cgit v1.3.1