Roo-Code/scripts/install-vsix.js

91 lines
2.7 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const { execSync } = require("child_process")
const fs = require("fs")
const readline = require("readline")
// detect "yes" flags
const autoYes = process.argv.includes("-y")
// detect editor command from args or default to "code"
const editorArg = process.argv.find((arg) => arg.startsWith("--editor="))
const defaultEditor = editorArg ? editorArg.split("=")[1] : "code"
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
})
const askQuestion = (question) => {
return new Promise((resolve) => {
rl.question(question, (answer) => {
resolve(answer)
})
})
}
async function main() {
try {
const packageJson = JSON.parse(fs.readFileSync("./src/package.json", "utf-8"))
const name = packageJson.name
const version = packageJson.version
const vsixFileName = `./bin/${name}-${version}.vsix`
const publisher = packageJson.publisher
const extensionId = `${publisher}.${name}`
console.log("\n🚀 Roo Code VSIX Installer")
console.log("========================")
console.log("\nThis script will:")
console.log("1. Uninstall any existing version of the Roo Code extension")
console.log("2. Install the newly built VSIX package")
console.log(`\nExtension: ${extensionId}`)
console.log(`VSIX file: ${vsixFileName}`)
// Ask for editor command if not provided
let editorCommand = defaultEditor
if (!editorArg && !autoYes) {
const editorAnswer = await askQuestion(
"\nWhich editor command to use? (code/cursor/code-insiders) [default: code]: ",
)
if (editorAnswer.trim()) {
editorCommand = editorAnswer.trim()
}
}
// skip prompt if auto-yes
const answer = autoYes ? "y" : await askQuestion("\nDo you wish to continue? (y/n): ")
if (answer.toLowerCase() !== "y") {
console.log("Installation cancelled.")
rl.close()
process.exit(0)
}
console.log(`\nProceeding with installation using '${editorCommand}' command...`)
try {
execSync(`${editorCommand} --uninstall-extension ${extensionId}`, { stdio: "inherit" })
} catch (e) {
console.log("Extension not installed, skipping uninstall step")
}
if (!fs.existsSync(vsixFileName)) {
console.error(`\n❌ VSIX file not found: ${vsixFileName}`)
console.error("Make sure the build completed successfully")
rl.close()
process.exit(1)
}
execSync(`${editorCommand} --install-extension ${vsixFileName}`, { stdio: "inherit" })
console.log(`\n✅ Successfully installed extension from ${vsixFileName}`)
console.log("\n⚠ IMPORTANT: You need to restart VS Code for the changes to take effect.")
console.log(" Please close and reopen VS Code to use the updated extension.\n")
rl.close()
} catch (error) {
console.error("\n❌ Failed to install extension:", error.message)
rl.close()
process.exit(1)
}
}
main()