| 110 | } |
| 111 | |
| 112 | export function runUpgradeInstaller(version?: string, spawnImpl: typeof spawn = spawn): Promise<void> { |
| 113 | return new Promise((resolve, reject) => { |
| 114 | const env = version ? { ...process.env, ROO_VERSION: version } : process.env |
| 115 | const child = spawnImpl("sh", ["-c", INSTALL_SCRIPT_COMMAND], { stdio: "inherit", env }) |
| 116 | |
| 117 | child.once("error", (error) => { |
| 118 | reject(error) |
| 119 | }) |
| 120 | |
| 121 | child.once("close", (code, signal) => { |
| 122 | if (code === 0) { |
| 123 | resolve() |
| 124 | return |
| 125 | } |
| 126 | |
| 127 | const reason = signal ? `signal ${signal}` : `exit code ${code ?? "unknown"}` |
| 128 | reject(new Error(`Upgrade installer failed (${reason}).`)) |
| 129 | }) |
| 130 | }) |
| 131 | } |
| 132 | |
| 133 | export async function upgrade(options: UpgradeOptions = {}): Promise<void> { |
| 134 | const currentVersion = options.currentVersion ?? VERSION |