Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,14 @@ fi
if [ "$OS" = "Windows_NT" ]; then
pnpm_cmd="pnpm.cmd"
else
pnpm_cmd="pnpm"
if command -v pnpm >/dev/null 2>&1; then
pnpm_cmd="pnpm"
else
pnpm_cmd="npx pnpm"
fi
fi

"$pnpm_cmd" --filter roo-cline generate-types
$pnpm_cmd --filter roo-cline generate-types

if [ -n "$(git diff --name-only src/exports/roo-code.d.ts)" ]; then
echo "Error: There are unstaged changes to roo-code.d.ts after running 'pnpm --filter roo-cline generate-types'."
Expand All @@ -27,5 +31,5 @@ else
npx_cmd="npx"
fi

"$npx_cmd" lint-staged
"$pnpm_cmd" lint
$npx_cmd lint-staged
$pnpm_cmd lint
8 changes: 6 additions & 2 deletions .husky/pre-push
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,14 @@ fi
if [ "$OS" = "Windows_NT" ]; then
pnpm_cmd="pnpm.cmd"
else
pnpm_cmd="pnpm"
if command -v pnpm >/dev/null 2>&1; then
pnpm_cmd="pnpm"
else
pnpm_cmd="npx pnpm"
fi
fi

"$pnpm_cmd" run check-types
$pnpm_cmd run check-types

# Check for new changesets.
NEW_CHANGESETS=$(find .changeset -name "*.md" ! -name "README.md" | wc -l | tr -d ' ')
Expand Down
6 changes: 5 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,18 @@
"node": "20.18.1"
},
"scripts": {
"preinstall": "npx only-allow pnpm",
"preinstall": "node scripts/bootstrap.js",
"prepare": "husky",
"install": "node scripts/bootstrap.js",
"install:all": "node scripts/bootstrap.js",
"lint": "turbo lint --log-order grouped --output-logs new-only",
"check-types": "turbo check-types --log-order grouped --output-logs new-only",
"test": "turbo test --log-order grouped --output-logs new-only",
"format": "turbo format --log-order grouped --output-logs new-only",
"clean": "turbo clean --log-order grouped --output-logs new-only && rimraf dist out bin .vite-port .turbo",
"build": "pnpm --filter roo-cline vsix",
"compile": "pnpm --filter roo-cline bundle",
"vsix": "pnpm --filter roo-cline vsix",
"build:nightly": "pnpm --filter @roo-code/vscode-nightly vsix",
"changeset:version": "cp CHANGELOG.md src/CHANGELOG.md && changeset version && cp -vf src/CHANGELOG.md .",
"knip": "pnpm --filter @roo-code/build build && knip --include files",
Expand Down
86 changes: 86 additions & 0 deletions scripts/bootstrap.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
#!/usr/bin/env node

const { spawnSync } = require("child_process")

// Check if we're already bootstrapping
if (process.env.BOOTSTRAP_IN_PROGRESS) {
console.log("Bootstrap already in progress, continuing with normal installation...")
process.exit(0)
}

// Check if we're running under pnpm
const isPnpm = process.env.npm_execpath && process.env.npm_execpath.includes("pnpm")

// If we're already using pnpm, just exit normally
if (isPnpm) {
console.log("Already using pnpm, continuing with normal installation...")
process.exit(0)
}

console.log("Bootstrapping to pnpm...")

try {
// Check if pnpm is installed
const pnpmCheck = spawnSync("command", ["-v", "pnpm"], { shell: true })

let pnpmInstall

if (pnpmCheck.status === 0) {
// If pnpm is available, use it directly
console.log("pnpm found, using it directly...")
pnpmInstall = spawnSync("pnpm", ["install"], {
stdio: "inherit",
shell: true,
env: {
...process.env,
BOOTSTRAP_IN_PROGRESS: "1", // Set environment variable to indicate bootstrapping
},
})
} else {
// If pnpm is not available, install it temporarily in the project
console.log("pnpm not found, installing it temporarily...")

// Create a temporary package.json if it doesn't exist
const tempPkgJson = spawnSync(
"node",
[
"-e",
'if(!require("fs").existsSync("package.json")){require("fs").writeFileSync("package.json", JSON.stringify({name:"temp",private:true}))}',
],
{ shell: true },
)

// Install pnpm locally without saving it as a dependency
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)
}

// Use the locally installed pnpm
console.log("Running pnpm install...")
pnpmInstall = spawnSync("node_modules/.bin/pnpm", ["install"], {
stdio: "inherit",
shell: true,
env: {
...process.env,
BOOTSTRAP_IN_PROGRESS: "1", // Set environment variable to indicate bootstrapping
},
})
}

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)
process.exit(1)
}
Loading