#!/bin/bash # This script assumes you're in the monorepo root directory. # It will: # - Remove nested .git folders # - Remove subproject .gitignore files (if present) # - Optionally create or update the workspace Cargo.toml # - Add the projects to your root Git repo set -e echo "🔧 Flattening nested Rust projects into a monorepo..." # Gather all Rust subprojects projects=() for dir in */Cargo.toml; do project=$(dirname "$dir") projects+=("$project") # Remove nested Git repo if [ -d "$project/.git" ]; then echo "❌ Removing nested Git repo in $project" rm -rf "$project/.git" fi # Optionally remove local .gitignore (you can comment this out if needed) if [ -f "$project/.gitignore" ]; then echo "❌ Removing $project/.gitignore" rm -f "$project/.gitignore" fi done # Create .gitignore in root if missing if [ ! -f .gitignore ]; then echo "📄 Creating root .gitignore" cat > .gitignore < Cargo.toml echo "members = [" >> Cargo.toml for project in "${projects[@]}"; do echo " \"$project\"," >> Cargo.toml done echo "]" >> Cargo.toml else echo "⚠️ Cargo.toml already exists at root. You may need to manually add workspace members." fi # Init root Git repo if not already if [ ! -d .git ]; then echo "🔁 Initializing new root Git repo" git init fi # Add and commit git add . git commit -m "Flatten nested Rust projects into monorepo" echo "✅ Done! Monorepo is clean and ready."