Files
tutti/apps/desktop/scripts/lib/claimDesktopRelease.mjs
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

45 lines
1.0 KiB
JavaScript

import { resolveDesktopRelease } from "./resolveDesktopRelease.mjs";
function isExplicitStrategy(strategy) {
return strategy === "explicit_tag" || strategy === "explicit_version";
}
export async function claimDesktopRelease({
currentVersion,
explicitTag = "",
explicitVersion = "",
listTags,
maxAttempts = 20,
reserveTag,
strategy
}) {
if (typeof listTags !== "function") {
throw new Error("listTags must be provided");
}
if (typeof reserveTag !== "function") {
throw new Error("reserveTag must be provided");
}
for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
const release = resolveDesktopRelease({
currentVersion,
explicitTag,
explicitVersion,
strategy,
tags: await listTags()
});
if (await reserveTag(release.tag)) {
return release;
}
if (isExplicitStrategy(strategy)) {
throw new Error(`Release tag already exists: ${release.tag}`);
}
}
throw new Error(
`Unable to reserve a unique release tag after ${maxAttempts} attempts`
);
}