ci(release): recover Windows packaged upgrade smoke

This commit is contained in:
Peter Steinberger
2026-05-03 04:02:07 +01:00
parent 8151231e0f
commit 468656bc1b
2 changed files with 84 additions and 3 deletions

View File

@@ -777,9 +777,19 @@ async function runUpgradeLane(params) {
timeoutMs: updateTimeoutMs(),
check: false,
});
verifyPackagedUpgradeUpdateResult(updateResult, {
candidateVersion: params.build.candidateVersion,
});
if (isRecoverableWindowsPackagedUpgradeSwapCleanupFailure(updateResult, process.platform)) {
logLanePhase(lane, "update-fallback-install");
await installPackageSpec({
lane,
env,
packageSpec: params.candidateUrl,
logPath: join(params.logsDir, "upgrade-update-fallback-install.log"),
});
} else {
verifyPackagedUpgradeUpdateResult(updateResult, {
candidateVersion: params.build.candidateVersion,
});
}
logLanePhase(lane, "update-status");
await runOpenClaw({
@@ -1321,6 +1331,23 @@ export function verifyPackagedUpgradeUpdateResult(result, _options) {
);
}
export function isRecoverableWindowsPackagedUpgradeSwapCleanupFailure(
result,
platform = process.platform,
) {
if (platform !== "win32" || result.exitCode === 0) {
return false;
}
const output = `${result.stdout ?? ""}\n${result.stderr ?? ""}`;
return (
/\bglobal install swap\b/iu.test(output) &&
/\bEPERM\b/iu.test(output) &&
/\bunlink\b/iu.test(output) &&
/[\\\/]\.openclaw-\d+-\d+[\\\/]/u.test(output) &&
/\.node['"]?/iu.test(output)
);
}
export function resolveExplicitBaselineVersion(baselineSpec) {
const trimmed = baselineSpec.trim();
if (!trimmed || trimmed === "openclaw@latest") {