| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import type { Argv } from "yargs"
- import { UI } from "../ui"
- import * as prompts from "@clack/prompts"
- import { Installation } from "../../installation"
- export const UpgradeCommand = {
- command: "upgrade [target]",
- describe: "upgrade opencode to the latest or a specific version",
- builder: (yargs: Argv) => {
- return yargs
- .positional("target", {
- describe: "version to upgrade to, for ex '0.1.48' or 'v0.1.48'",
- type: "string",
- })
- .option("method", {
- alias: "m",
- describe: "installation method to use",
- type: "string",
- choices: ["curl", "npm", "pnpm", "bun", "brew"],
- })
- },
- handler: async (args: { target?: string; method?: string }) => {
- UI.empty()
- UI.println(UI.logo(" "))
- UI.empty()
- prompts.intro("Upgrade")
- const detectedMethod = await Installation.method()
- const method = (args.method as Installation.Method) ?? detectedMethod
- if (method === "unknown") {
- prompts.log.error(
- `opencode is installed to ${process.execPath} and seems to be managed by a package manager`,
- )
- prompts.outro("Done")
- return
- }
- prompts.log.info("Using method: " + method)
- const target = args.target ?? (await Installation.latest())
- prompts.log.info(`From ${Installation.VERSION} → ${target}`)
- const spinner = prompts.spinner()
- spinner.start("Upgrading...")
- const err = await Installation.upgrade(method, target).catch((err) => err)
- if (err) {
- spinner.stop("Upgrade failed")
- if (err instanceof Installation.UpgradeFailedError)
- prompts.log.error(err.data.stderr)
- else if (err instanceof Error) prompts.log.error(err.message)
- prompts.outro("Done")
- return
- }
- spinner.stop("Upgrade complete")
- prompts.outro("Done")
- },
- }
|