summaryrefslogtreecommitdiff
path: root/src/marlin.core
diff options
context:
space:
mode:
authorMelodi <62381002+Melodi17@users.noreply.github.com>2026-10-27 23:04:59 +1000
committerMelodi <62381002+Melodi17@users.noreply.github.com>2026-10-27 23:04:59 +1000
commitecd5f5d13936dd097b12766cb95a568ad5b073a9 (patch)
treef360b08e656a98faca4f2b9f10dc44602e6ca289 /src/marlin.core
parent88ee626cb3686dc176cd7911b073c4e65fa54d34 (diff)
feat: lots of stuff
Diffstat (limited to 'src/marlin.core')
-rw-r--r--src/marlin.core/Class1.cs3
-rw-r--r--src/marlin.core/contracts/InstanceService.cs43
-rw-r--r--src/marlin.core/functional/GitBinaryClient.cs9
-rw-r--r--src/marlin.core/functional/IGitClient.cs1
-rw-r--r--src/marlin.core/marlin.core.csproj1
-rw-r--r--src/marlin.core/models/ISourceSecretStore.cs1
-rw-r--r--src/marlin.core/models/JobStatus.cs10
-rw-r--r--src/marlin.core/models/plan/ExecutionCommand.cs7
-rw-r--r--src/marlin.core/util/CommonPaths.cs10
9 files changed, 80 insertions, 5 deletions
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<string[]> 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<Dictionary<string, string>> GetRemoteRefs(string remote);
Task Init(string repoPath);
Task FetchTrees(string repoPath, string remote, IEnumerable<string> refs, bool skipBlobs = false);
+ Task Checkout(string repoPath, string remote, string branch, string commit);
Task<string[]> ListTree(string repoPath, string hash, string filterPath = ".");
Task<byte[]> 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 @@
</PropertyGroup>
<ItemGroup>
+ <PackageReference Include="protobuf-net.Grpc" Version="1.3.14" />
<PackageReference Include="YamlDotNet" Version="18.1.0" />
</ItemGroup>
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<ISecret?> GetAsync(Guid id, CancellationToken ct);
+ //Task<IEnumerable<ISecret>> 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