Add install checkpoint/resume and DDSS workflows

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.
This commit is contained in:
lincube
2026-05-12 08:35:48 +08:00
parent f0319b7deb
commit 563f12caa1
33 changed files with 3231 additions and 4199 deletions

View File

@@ -54,8 +54,20 @@ public static class UpdatePaths
public static string GetPlondsSignaturePath(string launcherRoot)
=> Path.Combine(GetIncomingDirectory(launcherRoot), GetPlondsSignatureName());
public static string GetPlondsUpdateMetadataPath(string launcherRoot)
=> Path.Combine(GetIncomingDirectory(launcherRoot), GetPlondsUpdateMetadataName());
public static string GetDeploymentLockName() => "deployment.lock";
public static string GetDeploymentLockPath(string launcherRoot)
=> Path.Combine(GetIncomingDirectory(launcherRoot), GetDeploymentLockName());
public static string GetApplyInProgressLockName() => "apply-in-progress.lock";
public static string GetApplyInProgressLockPath(string launcherRoot)
=> Path.Combine(GetIncomingDirectory(launcherRoot), GetApplyInProgressLockName());
public static string GetInstallCheckpointName() => "install-checkpoint.json";
public static string GetInstallCheckpointPath(string launcherRoot)
=> Path.Combine(GetIncomingDirectory(launcherRoot), GetInstallCheckpointName());
public static string GetDownloadMarkerContent(string manifestSha256, string targetVersion, int objectCount)
{