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
45 lines
1.0 KiB
JavaScript
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`
|
|
);
|
|
}
|