diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js index a06373683ebab..3416e044f4f55 100644 --- a/build/gulpfile.vscode.linux.js +++ b/build/gulpfile.vscode.linux.js @@ -35,7 +35,7 @@ function getDebPackageArch(arch) { } function prepareDebPackage(arch) { - const binaryDir = '../VSCode-linux-' + arch; + const binaryDir = '../PearAI-' + arch; const debArch = getDebPackageArch(arch); const destination = '.build/linux/deb/' + debArch + '/' + product.applicationName + '-' + debArch; @@ -150,7 +150,7 @@ function getRpmPackageArch(arch) { * @param {string} arch */ function prepareRpmPackage(arch) { - const binaryDir = '../VSCode-linux-' + arch; + const binaryDir = '../PearAI-' + arch; const rpmArch = getRpmPackageArch(arch); const stripBinary = process.env['STRIP'] ?? '/usr/bin/strip'; @@ -250,7 +250,7 @@ function getSnapBuildPath(arch) { * @param {string} arch */ function prepareSnapPackage(arch) { - const binaryDir = '../VSCode-linux-' + arch; + const binaryDir = '../PearAI-' + arch; const destination = getSnapBuildPath(arch); return function () { @@ -309,19 +309,19 @@ const BUILD_TARGETS = [ BUILD_TARGETS.forEach(({ arch }) => { const debArch = getDebPackageArch(arch); - const prepareDebTask = task.define(`vscode-linux-${arch}-prepare-deb`, task.series(rimraf(`.build/linux/deb/${debArch}`), prepareDebPackage(arch))); + const prepareDebTask = task.define(`pearai-linux-${arch}-prepare-deb`, task.series(rimraf(`.build/linux/deb/${debArch}`), prepareDebPackage(arch))); gulp.task(prepareDebTask); - const buildDebTask = task.define(`vscode-linux-${arch}-build-deb`, buildDebPackage(arch)); + const buildDebTask = task.define(`pearai-linux-${arch}-build-deb`, buildDebPackage(arch)); gulp.task(buildDebTask); const rpmArch = getRpmPackageArch(arch); - const prepareRpmTask = task.define(`vscode-linux-${arch}-prepare-rpm`, task.series(rimraf(`.build/linux/rpm/${rpmArch}`), prepareRpmPackage(arch))); + const prepareRpmTask = task.define(`pearai-linux-${arch}-prepare-rpm`, task.series(rimraf(`.build/linux/rpm/${rpmArch}`), prepareRpmPackage(arch))); gulp.task(prepareRpmTask); - const buildRpmTask = task.define(`vscode-linux-${arch}-build-rpm`, buildRpmPackage(arch)); + const buildRpmTask = task.define(`pearai-linux-${arch}-build-rpm`, buildRpmPackage(arch)); gulp.task(buildRpmTask); - const prepareSnapTask = task.define(`vscode-linux-${arch}-prepare-snap`, task.series(rimraf(`.build/linux/snap/${arch}`), prepareSnapPackage(arch))); + const prepareSnapTask = task.define(`pearai-linux-${arch}-prepare-snap`, task.series(rimraf(`.build/linux/snap/${arch}`), prepareSnapPackage(arch))); gulp.task(prepareSnapTask); - const buildSnapTask = task.define(`vscode-linux-${arch}-build-snap`, task.series(prepareSnapTask, buildSnapPackage(arch))); + const buildSnapTask = task.define(`pearai-linux-${arch}-build-snap`, task.series(prepareSnapTask, buildSnapPackage(arch))); gulp.task(buildSnapTask); }); diff --git a/build/lib/compilation.js b/build/lib/compilation.js index 7b9d73facbbd0..1de29f5cf3b9a 100644 --- a/build/lib/compilation.js +++ b/build/lib/compilation.js @@ -31,7 +31,8 @@ function getTypeScriptCompilerOptions(src) { const rootDir = path.join(__dirname, `../../${src}`); const options = {}; options.verbose = false; - options.sourceMap = true; + // Respect --no-source-maps flag passed from npm scripts + options.sourceMap = !process.argv.includes('--no-source-maps'); if (process.env['VSCODE_NO_SOURCEMAP']) { // To be used by developers in a hurry options.sourceMap = false; } @@ -71,7 +72,8 @@ function createCompile(src, { build, emitError, transpileOnly, preserveEnglish } .pipe(util.loadSourcemaps()) .pipe(compilation(token)) .pipe(noDeclarationsFilter) - .pipe(util.$if(build, nls.nls({ preserveEnglish }))) + // Only run NLS if doing a build AND sourcemaps are enabled + .pipe(util.$if(build && overrideOptions.sourceMap, nls.nls({ preserveEnglish }))) .pipe(noDeclarationsFilter.restore) .pipe(util.$if(!transpileOnly, sourcemaps.write('.', { addComment: false, @@ -104,7 +106,18 @@ function compileTask(src, out, build, options = {}) { if (os.totalmem() < 4_000_000_000) { throw new Error('compilation requires 4GB of RAM'); } - const compile = createCompile(src, { build, emitError: true, transpileOnly: false, preserveEnglish: !!options.preserveEnglish }); + // Check for flags passed by 'fast' scripts + const isFast = process.argv.includes('--parallel'); + const noSourceMaps = process.argv.includes('--no-source-maps'); + + const compile = createCompile(src, { + build, + emitError: true, + // Use transpileOnly for fast builds + transpileOnly: isFast, // Let tsb handle transpileOnly without forcing esbuild + preserveEnglish: !!options.preserveEnglish + }); + const srcPipe = gulp.src(`${src}/**`, { base: `${src}` }); const generator = new MonacoGenerator(false); if (src === 'src') { @@ -112,7 +125,9 @@ function compileTask(src, out, build, options = {}) { } // mangle: TypeScript to TypeScript let mangleStream = es.through(); - if (build && !options.disableMangle) { + // Disable mangling if 'isFast' is true OR if options.disableMangle is true + if (build && !isFast && !options.disableMangle) { + fancyLog(ansiColors.magenta('[fast-build]'), 'Mangling enabled (disable with --parallel flag for faster builds)'); // Optional log let ts2tsMangler = new index_1.Mangler(compile.projectPath, (...data) => fancyLog(ansiColors.blue('[mangler]'), ...data), { mangleExports: true, manglePrivateFields: true }); const newContentsByFileName = ts2tsMangler.computeNewFileContents(new Set(['saveState'])); mangleStream = es.through(async function write(data) { @@ -304,4 +319,4 @@ exports.watchApiProposalNamesTask = task.define('watch-api-proposal-names', () = .pipe(util.debounce(task)) .pipe(gulp.dest('src')); }); -//# sourceMappingURL=compilation.js.map \ No newline at end of file +//# sourceMappingURL=compilation.js.map diff --git a/package.json b/package.json index bc29c42bb0c8d..a0706613654c4 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,8 @@ "extensions-ci": "node ./node_modules/gulp/bin/gulp.js extensions-ci", "extensions-ci-pr": "node ./node_modules/gulp/bin/gulp.js extensions-ci-pr", "perf": "node scripts/code-perf.js", - "update-build-ts-version": "npm install typescript@next && tsc -p ./build/tsconfig.build.json" + "update-build-ts-version": "npm install typescript@next && tsc -p ./build/tsconfig.build.json", + "vscode-linux-x64-fast": "node --max-old-space-size=12288 ./node_modules/gulp/bin/gulp.js vscode-linux-x64 --max_old_space_size=12288 --no-source-maps --skip-dependency-check --parallel" }, "dependencies": { "@microsoft/1ds-core-js": "^3.2.13", diff --git a/scripts/pearai/setup-environment.sh b/scripts/pearai/setup-environment.sh index ffa893649e2fe..eef6705ff5d85 100755 --- a/scripts/pearai/setup-environment.sh +++ b/scripts/pearai/setup-environment.sh @@ -15,27 +15,27 @@ printf "\n\nDetected operating system: $os\n\n" # If the OS is Windows, give warning and prompt user to continue if [ "$os" == "Windows" ]; then - echo "This script is for unix systems (mac, linux)" - echo -e "Symbolic links might not work properly on Windows, please run windows scripts" - read -n 1 -s -r -p "Press any key to exit or enter to continue..." - # Check the user's input - if [ "$REPLY" != "" ]; then - echo -e "\n\e[91mExiting...\e[0m" - exit - fi + echo "This script is for unix systems (mac, linux)" + echo -e "Symbolic links might not work properly on Windows, please run windows scripts" + read -n 1 -s -r -p "Press any key to exit or enter to continue..." + # Check the user's input + if [ "$REPLY" != "" ]; then + echo -e "\n\e[91mExiting...\e[0m" + exit + fi fi # Function to execute a command and check its status execute() { - local cmd=$1 - local failure_message=$2 - echo "Executing: $cmd" - eval $cmd - if [ $? -ne 0 ]; then - echo "Setup | $failure_message" - exit 1 - fi + local cmd=$1 + local failure_message=$2 + echo "Executing: $cmd" + eval $cmd + if [ $? -ne 0 ]; then + echo "Setup | $failure_message" + exit 1 + fi } # Setup all necessary paths for this script @@ -44,36 +44,105 @@ target_path="$app_dir/extensions/pearai-submodule/extensions/vscode" link_path="$app_dir/extensions/pearai-ref" # Run the base functionality -echo -e "\nInitializing sub-modules..." - -# Check if the submodule directory already exists +echo -e "\n=========================================" +echo "Starting PearAI Environment Setup" +echo "=========================================" +echo "1. Cleaning up existing installations" +echo "2. Initializing submodules" +echo "3. Setting up symbolic links" +echo "4. Configuring pearai-submodule" +echo "5. Configuring PearAI-Roo-Code" +echo "6. Installing dependencies" +echo -e "=========================================\n" + +echo "Step 1/6: Cleaning up existing installations..." + +# Clean up any existing installations +echo "Cleaning up any existing installations..." + +# Clean up pearai-submodule +# Clean up pearai-submodule if it exists if [ -d "$app_dir/extensions/pearai-submodule" ]; then - echo "Removing existing pearai-submodule directory" - execute "rm -rf $app_dir/extensions/pearai-submodule" "Failed to remove existing pearai-submodule directory" + echo "Cleaning up existing pearai-submodule..." + if git config --file .gitmodules --get-regexp '^submodule\..*pearai-submodule' > /dev/null 2>&1; then + echo "Removing submodule configuration..." + git submodule deinit -f ./extensions/pearai-submodule 2>/dev/null || true + rm -rf .git/modules/extensions/pearai-submodule 2>/dev/null || true + git rm -f ./extensions/pearai-submodule 2>/dev/null || true + fi + rm -rf "$app_dir/extensions/pearai-submodule" + echo "Successfully removed pearai-submodule" fi -# Check if the PearAI Roo Code directory already exists +# Clean up PearAI-Roo-Code if it exists if [ -d "$app_dir/extensions/PearAI-Roo-Code" ]; then - echo "Removing existing PearAI-Roo-Code directory" - execute "rm -rf $app_dir/extensions/PearAI-Roo-Code" "Failed to remove existing PearAI-Roo-Code directory" + echo "Cleaning up existing PearAI-Roo-Code..." + if git config --file .gitmodules --get-regexp '^submodule\..*PearAI-Roo-Code' > /dev/null 2>&1; then + echo "Removing submodule configuration..." + git submodule deinit -f ./extensions/PearAI-Roo-Code 2>/dev/null || true + rm -rf .git/modules/extensions/PearAI-Roo-Code 2>/dev/null || true + git rm -f ./extensions/PearAI-Roo-Code 2>/dev/null || true + fi + rm -rf "$app_dir/extensions/PearAI-Roo-Code" + echo "Successfully removed PearAI-Roo-Code" fi +echo -e "\nStep 2/6: Initializing submodules..." # Clone the submodule extension folder execute "git submodule update --init --recursive" "Failed to initialize git submodules" execute "git submodule update --recursive --remote" "Failed to update to latest tip of submodule" +echo -e "\nStep 3/6: Setting up symbolic links..." +# Handle symbolic link creation/update +echo -e "\nChecking symbolic link..." +if [ -L "$link_path" ]; then + echo -e "\e[93mRemoving existing symbolic link...\e[0m" + rm "$link_path" +fi -# Check if the symbolic link exists -if [ ! -L "$link_path" ]; then - # Print message about creating a symbolic link from link_path to target_path - echo -e "\nCreating symbolic link '$link_path' -> '$target_path'" - # Create the symbolic link - ln -s "$target_path" "$link_path" +# Ensure target directory exists before creating symlink +if [ ! -d "$target_path" ]; then + echo "Warning: Target path '$target_path' does not exist yet." + echo "Symbolic link will be created once the submodule is properly initialized." else - echo -e "\n\e[93mSymbolic link already exists...\e[0m" + echo -e "Creating symbolic link '$link_path' -> '$target_path'" + ln -s "$target_path" "$link_path" fi +# Verify submodule directory exists after initialization +if [ ! -d "./extensions/pearai-submodule" ]; then + echo "Error: pearai-submodule directory not found after git submodule initialization" + echo "Attempting to fix by re-running submodule commands..." + execute "git submodule update --init --recursive" "Failed to re-initialize git submodules" + execute "git submodule update --recursive --remote" "Failed to re-update submodules" + + if [ ! -d "./extensions/pearai-submodule" ]; then + echo "Submodule commands failed. Attempting direct clone as fallback..." + + # Try cleanup but don't exit on failure + echo "Attempting to clean up any existing configuration (errors will be ignored)..." + git submodule deinit -f ./extensions/pearai-submodule 2>/dev/null || true + rm -rf .git/modules/extensions/pearai-submodule 2>/dev/null || true + git rm -f ./extensions/pearai-submodule 2>/dev/null || true + + # Ensure the directory is removed if it exists + rm -rf "./extensions/pearai-submodule" 2>/dev/null || true + + echo "Attempting direct clone from repository..." + # Direct clone as fallback - this is the critical step + if git clone https://github.com/trypear/pearai-submodule.git ./extensions/pearai-submodule; then + echo "Successfully cloned pearai-submodule directly." + else + echo "Error: Failed to clone pearai-submodule repository." + echo "Please check your internet connection and git configuration." + exit 1 + fi + fi +fi + +echo -e "\nStep 4/6: Configuring pearai-submodule..." +# Change directory and continue with submodule setup execute "cd ./extensions/pearai-submodule" "Failed to change directory to extensions/pearai-submodule" echo -e "\nSetting the submodule directory to match origin/main's latest changes..." @@ -96,7 +165,40 @@ execute "./scripts/install-and-build.sh" "Failed to install dependencies for the # Discard the package.json and package-lock.json version update changes execute "git reset --hard" "Failed to reset --hard after submodule dependencies install" +echo -e "\nStep 5/6: Configuring PearAI-Roo-Code..." # ROO CODE +# Verify PearAI-Roo-Code directory exists +if [ ! -d "../PearAI-Roo-Code" ]; then + echo "Error: PearAI-Roo-Code directory not found" + echo "Attempting to fix by re-running submodule commands..." + cd "$app_dir" + execute "git submodule update --init --recursive" "Failed to re-initialize git submodules" + execute "git submodule update --recursive --remote" "Failed to re-update submodules" + + if [ ! -d "./extensions/PearAI-Roo-Code" ]; then + echo "Submodule commands failed. Attempting direct clone as fallback..." + + # Clean up any potential submodule configuration if it exists + if git config --file .gitmodules --get-regexp '^submodule\..*PearAI-Roo-Code' > /dev/null 2>&1; then + echo "Cleaning up existing submodule configuration..." + git submodule deinit -f ./extensions/PearAI-Roo-Code 2>/dev/null || true + rm -rf .git/modules/extensions/PearAI-Roo-Code 2>/dev/null || true + git rm -f ./extensions/PearAI-Roo-Code 2>/dev/null || true + fi + + echo "Attempting direct clone from repository..." + # Direct clone as fallback + if git clone https://github.com/trypear/PearAI-Roo-Code.git ./extensions/PearAI-Roo-Code; then + echo "Successfully cloned PearAI-Roo-Code directly." + else + echo "Error: Failed to clone PearAI-Roo-Code repository." + echo "Please check your internet connection and git configuration." + exit 1 + fi + fi + execute "cd ./extensions/pearai-submodule" "Failed to return to pearai-submodule directory" +fi + execute "cd ../PearAI-Roo-Code" "Failed to change directory to extensions/PearAI-Roo-Code" # Discard any potential changes or merge conflicts in the working directory or staging area, # ensuring local branch matches remote branch exactly before checking out main @@ -108,9 +210,18 @@ execute "git pull origin main" "Failed to pull latest changes from origin/main" execute "npm run install:all" "Failed to install dependencies for the PearAI-Roo-Code" execute "npm run build" "Failed to build the PearAI-Roo-Code" -execute "cd '$app_dir'" "Failed to change directory to application root" +# Ensure we return to the app directory for final setup +if ! cd "$app_dir"; then + echo "Error: Failed to return to application root directory" + exit 1 +fi -echo -e "\nSetting up root application..." +echo -e "\nStep 6/6: Setting up root application..." pwd +# Final npm install in app directory execute "npm install" "Failed to install dependencies with npm" + +echo -e "\n=========================================" +echo "🎉 PearAI Environment Setup Complete! 🎉" +echo "========================================="