| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- 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()
|