mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-08-28 05:27:24 +00:00
109 lines
3.3 KiB
JavaScript
109 lines
3.3 KiB
JavaScript
const { execSync } = require("child_process")
|
||
const fs = require("fs")
|
||
const readline = require("readline")
|
||
|
||
// detect "yes" flags
|
||
const autoYes = process.argv.includes("-y")
|
||
|
||
// detect nightly flag
|
||
const isNightly = process.argv.includes("--nightly")
|
||
|
||
// 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 {
|
||
let name, version, publisher
|
||
|
||
if (isNightly) {
|
||
// For nightly, read the nightly-specific package.json and get publisher from src
|
||
const nightlyPackageJson = JSON.parse(
|
||
fs.readFileSync("./apps/vscode-nightly/package.nightly.json", "utf-8"),
|
||
)
|
||
const srcPackageJson = JSON.parse(fs.readFileSync("./src/package.json", "utf-8"))
|
||
name = nightlyPackageJson.name
|
||
version = nightlyPackageJson.version
|
||
publisher = srcPackageJson.publisher
|
||
} else {
|
||
const packageJson = JSON.parse(fs.readFileSync("./src/package.json", "utf-8"))
|
||
name = packageJson.name
|
||
version = packageJson.version
|
||
publisher = packageJson.publisher
|
||
}
|
||
|
||
const vsixFileName = `./bin/${name}-${version}.vsix`
|
||
const extensionId = `${publisher}.${name}`
|
||
const buildType = isNightly ? "Nightly" : "Regular"
|
||
|
||
console.log(`\n🚀 Roo Code VSIX Installer (${buildType})`)
|
||
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()
|