Roo-Code/scripts/install-vsix.js
2026-01-23 10:35:32 -07:00

109 lines
3.3 KiB
JavaScript
Raw Permalink 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 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()