mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-08-28 05:27:24 +00:00
81 lines
2 KiB
JavaScript
81 lines
2 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import { spawnSync } from "child_process"
|
|
import { existsSync, writeFileSync } from "fs"
|
|
|
|
if (process.env.BOOTSTRAP_IN_PROGRESS) {
|
|
console.log("⏭️ Bootstrap already in progress, continuing with normal installation...")
|
|
process.exit(0)
|
|
}
|
|
|
|
// If we're already using pnpm, just exit normally.
|
|
if (process.env.npm_execpath && process.env.npm_execpath.includes("pnpm")) {
|
|
process.exit(0)
|
|
}
|
|
|
|
console.log("🚀 Bootstrapping to pnpm...")
|
|
|
|
/**
|
|
* Run pnpm install with bootstrap environment variable.
|
|
*/
|
|
function runPnpmInstall(pnpmCommand) {
|
|
return spawnSync(pnpmCommand, ["install"], {
|
|
stdio: "inherit",
|
|
shell: true,
|
|
env: {
|
|
...process.env,
|
|
BOOTSTRAP_IN_PROGRESS: "1", // Set environment variable to indicate bootstrapping
|
|
},
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Create a temporary package.json if it doesn't exist.
|
|
*/
|
|
function ensurePackageJson() {
|
|
if (!existsSync("package.json")) {
|
|
console.log("📦 Creating temporary package.json...")
|
|
writeFileSync("package.json", JSON.stringify({ name: "temp", private: true }, null, 2))
|
|
}
|
|
}
|
|
|
|
try {
|
|
// Check if pnpm is installed globally.
|
|
const pnpmCheck = spawnSync("pnpm", ["-v"], { shell: true })
|
|
|
|
let pnpmInstall
|
|
|
|
if (pnpmCheck.status === 0) {
|
|
console.log("✨ Found pnpm")
|
|
pnpmInstall = runPnpmInstall("pnpm")
|
|
} else {
|
|
console.log("⚠️ Unable to find pnpm, installing it temporarily...")
|
|
ensurePackageJson()
|
|
|
|
console.log("📥 Installing pnpm locally...")
|
|
|
|
const npmInstall = spawnSync("npm", ["install", "--no-save", "pnpm"], {
|
|
stdio: "inherit",
|
|
shell: true,
|
|
})
|
|
|
|
if (npmInstall.status !== 0) {
|
|
console.error("❌ Failed to install pnpm locally")
|
|
process.exit(1)
|
|
}
|
|
|
|
console.log("🔧 Running pnpm install with local installation...")
|
|
pnpmInstall = runPnpmInstall("node_modules/.bin/pnpm")
|
|
}
|
|
|
|
if (pnpmInstall.status !== 0) {
|
|
console.error("❌ pnpm install failed")
|
|
process.exit(pnpmInstall.status)
|
|
}
|
|
|
|
console.log("🎉 Bootstrap completed successfully!")
|
|
process.exit(0)
|
|
} catch (error) {
|
|
console.error("💥 Bootstrap failed:", error.message)
|
|
process.exit(1)
|
|
}
|