using System.Text.Json; using System.Text.Json.Serialization; namespace ControlPlane.Core.Models; public enum BuildStatus { Running, Succeeded, Failed } public enum BuildKind { DockerImage, DotnetProject, NpmProject } /// /// Persisted record of a single build run — image build, dotnet build, or npm build. /// Stored in ClientAssets/builds.json. /// public class BuildRecord { public string Id { get; set; } = Guid.NewGuid().ToString("N")[..8]; public BuildKind Kind { get; set; } public string Target { get; set; } = string.Empty; // image name or project path public BuildStatus Status { get; set; } = BuildStatus.Running; public DateTimeOffset StartedAt { get; set; } = DateTimeOffset.UtcNow; public DateTimeOffset? FinishedAt { get; set; } public int? DurationMs { get; set; } public string? ImageDigest { get; set; } // populated for DockerImage builds public string? CommitSha { get; set; } // HEAD SHA at build time public List Log { get; set; } = []; }