mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-06-20 23:54:26 +08:00
Introduce install checkpoint support and resume logic for updates, plus related locking and validation. Adds InstallCheckpoint model, AppJsonContext serialization, and UpdatePaths helpers for deployment lock, apply-in-progress lock and install-checkpoint path. UpdateEngineService gains checkpoint load/save/delete, incoming-state validation, resume logic for PLONDS and legacy updates, apply lock handling, and safer cleanup; ApplyPendingPlondsUpdateAsync and ApplyPendingUpdate flow updated accordingly. Add DeploymentLock contract and extend UpdateState with pause/resume/cancel helpers. Tests updated to cover stale/valid checkpoint resume and legacy/PLONDS flows. CI: enhance ddss-publish to detect release channel, validate S3 assets, prepare and atomically publish channel pointer; add ddss-rollback workflow to publish rollbacks; adjust plonds-build concurrency and release events.
164 lines
3.7 KiB
C#
164 lines
3.7 KiB
C#
namespace LanMountainDesktop.Launcher.Models;
|
|
|
|
internal sealed class SignedFileMap
|
|
{
|
|
public string? FromVersion { get; set; }
|
|
|
|
public string? ToVersion { get; set; }
|
|
|
|
public string? Platform { get; set; }
|
|
|
|
public string? Arch { get; set; }
|
|
|
|
public List<UpdateFileEntry> Files { get; set; } = [];
|
|
}
|
|
|
|
internal sealed class UpdateFileEntry
|
|
{
|
|
public string Path { get; set; } = string.Empty;
|
|
|
|
public string? ArchivePath { get; set; }
|
|
|
|
public string Action { get; set; } = "replace";
|
|
|
|
public string? Sha256 { get; set; }
|
|
}
|
|
|
|
internal sealed class SnapshotMetadata
|
|
{
|
|
public string SnapshotId { get; set; } = string.Empty;
|
|
|
|
public string SourceVersion { get; set; } = string.Empty;
|
|
|
|
public string? TargetVersion { get; set; }
|
|
|
|
public DateTimeOffset CreatedAt { get; set; }
|
|
|
|
public string SourceDirectory { get; set; } = string.Empty;
|
|
|
|
public string? TargetDirectory { get; set; }
|
|
|
|
public string Status { get; set; } = "pending";
|
|
}
|
|
|
|
internal sealed class InstallCheckpoint
|
|
{
|
|
public string SnapshotId { get; set; } = string.Empty;
|
|
|
|
public string SourceVersion { get; set; } = string.Empty;
|
|
|
|
public string? TargetVersion { get; set; }
|
|
|
|
public string? SourceDirectory { get; set; }
|
|
|
|
public string TargetDirectory { get; set; } = string.Empty;
|
|
|
|
public bool IsInitialDeployment { get; set; }
|
|
|
|
public int AppliedCount { get; set; }
|
|
|
|
public int VerifiedCount { get; set; }
|
|
}
|
|
|
|
internal sealed class UpdateApplyResult
|
|
{
|
|
public bool Success { get; init; }
|
|
|
|
public string Message { get; init; } = string.Empty;
|
|
|
|
public string? FromVersion { get; init; }
|
|
|
|
public string? ToVersion { get; init; }
|
|
|
|
public string? RolledBackTo { get; init; }
|
|
}
|
|
|
|
internal sealed class PlondsUpdateMetadata
|
|
{
|
|
public string? DistributionId { get; set; }
|
|
|
|
public string? Channel { get; set; }
|
|
|
|
public string? SubChannel { get; set; }
|
|
|
|
public string? FromVersion { get; set; }
|
|
|
|
public string? ToVersion { get; set; }
|
|
|
|
public string? FileMapPath { get; set; }
|
|
|
|
public string? FileMapSignaturePath { get; set; }
|
|
|
|
public Dictionary<string, string> Metadata { get; set; } = [];
|
|
}
|
|
|
|
internal sealed class PlondsFileMap
|
|
{
|
|
public string? DistributionId { get; set; }
|
|
|
|
public string? FromVersion { get; set; }
|
|
|
|
public string? ToVersion { get; set; }
|
|
|
|
public string? Version { get; set; }
|
|
|
|
public string? Platform { get; set; }
|
|
|
|
public string? Arch { get; set; }
|
|
|
|
public Dictionary<string, string> Metadata { get; set; } = [];
|
|
|
|
public List<PlondsComponentEntry> Components { get; set; } = [];
|
|
|
|
public List<PlondsFileEntry> Files { get; set; } = [];
|
|
}
|
|
|
|
internal sealed class PlondsComponentEntry
|
|
{
|
|
public string Name { get; set; } = string.Empty;
|
|
|
|
public string? Version { get; set; }
|
|
|
|
public Dictionary<string, string> Metadata { get; set; } = [];
|
|
|
|
public List<PlondsFileEntry> Files { get; set; } = [];
|
|
}
|
|
|
|
internal sealed class PlondsFileEntry
|
|
{
|
|
public string Path { get; set; } = string.Empty;
|
|
|
|
public string? Action { get; set; } = "replace";
|
|
|
|
public string? Url { get; set; }
|
|
|
|
public string? ObjectUrl { get; set; }
|
|
|
|
public string? ObjectPath { get; set; }
|
|
|
|
public string? ObjectKey { get; set; }
|
|
|
|
public string? ArchivePath { get; set; }
|
|
|
|
public string? Sha256 { get; set; }
|
|
|
|
public string? Sha512 { get; set; }
|
|
|
|
public string? Sha512Base64 { get; set; }
|
|
|
|
public byte[]? Sha512Bytes { get; set; }
|
|
|
|
public PlondsHashDescriptor? Hash { get; set; }
|
|
|
|
public Dictionary<string, string> Metadata { get; set; } = [];
|
|
}
|
|
|
|
internal sealed class PlondsHashDescriptor
|
|
{
|
|
public string? Algorithm { get; set; }
|
|
|
|
public string? Value { get; set; }
|
|
|
|
public byte[]? Bytes { get; set; }
|
|
}
|