fix postinstall script for node

This commit is contained in:
Dax Raad 2025-06-15 13:10:58 -04:00
parent 46ff2c0ae0
commit 230d0a1510
3 changed files with 30 additions and 22 deletions

View file

@ -64,7 +64,7 @@ for (const [os, arch] of targets) {
await $`mkdir -p ./dist/${pkg.name}`
await $`cp -r ./bin ./dist/${pkg.name}/bin`
await $`cp ./script/postinstall.js ./dist/${pkg.name}/postinstall.js`
await $`cp ./script/postinstall.mjs ./dist/${pkg.name}/postinstall.mjs`
await Bun.file(`./dist/${pkg.name}/package.json`).write(
JSON.stringify(
{
@ -73,7 +73,7 @@ await Bun.file(`./dist/${pkg.name}/package.json`).write(
[pkg.name]: `./bin/${pkg.name}`,
},
scripts: {
postinstall: "node ./postinstall.js",
postinstall: "node ./postinstall.mjs",
},
version,
optionalDependencies,

View file

@ -122,7 +122,7 @@ export const UpgradeCommand = {
UI.empty()
UI.println(UI.logo(" "))
UI.empty()
prompts.intro("upgrade")
prompts.intro("Upgrade")
if (!process.execPath.includes(path.join(".opencode", "bin")) && false) {
prompts.log.error(
@ -132,10 +132,16 @@ export const UpgradeCommand = {
return
}
const release = args.target ? await specific(args.target) : await latest()
const target = release.tag_name
const release = args.target
? await specific(args.target).catch(() => {})
: await latest().catch(() => {})
if (!release) {
prompts.log.error("Failed to fetch release information")
prompts.outro("Done")
return
}
prompts.log.info(`Upgrade ${VERSION}${target}`)
const target = release.tag_name
if (VERSION !== "dev" && compare(VERSION, target) >= 0) {
prompts.log.success(`Already up to date`)
@ -143,6 +149,8 @@ export const UpgradeCommand = {
return
}
prompts.log.info(`From ${VERSION}${target}`)
const name = asset()
const found = release.assets.find((a) => a.name === name)
@ -155,30 +163,30 @@ export const UpgradeCommand = {
const spinner = prompts.spinner()
spinner.start("Downloading update...")
let downloadPath: string
try {
downloadPath = await download(found.browser_download_url)
spinner.stop("Download complete")
} catch (downloadError) {
const downloadPath = await download(found.browser_download_url).catch(
() => {},
)
if (!downloadPath) {
spinner.stop("Download failed")
prompts.log.error(
`Download failed: ${downloadError instanceof Error ? downloadError.message : String(downloadError)}`,
)
prompts.log.error("Download failed")
prompts.outro("Done")
return
}
try {
await fs.rename(downloadPath, process.execPath)
prompts.log.success(`Successfully upgraded to ${target}`)
} catch (installError) {
prompts.log.error(
`Install failed: ${installError instanceof Error ? installError.message : String(installError)}`,
)
// Clean up downloaded file
spinner.stop("Download complete")
const renamed = await fs
.rename(downloadPath, process.execPath)
.catch(() => {})
if (renamed === undefined) {
prompts.log.error("Install failed")
await fs.unlink(downloadPath).catch(() => {})
prompts.outro("Done")
return
}
prompts.log.success(`Successfully upgraded to ${target}`)
prompts.outro("Done")
},
}