Files
explorer-monorepo/scripts/setup-pr-repositories.sh

139 lines
4.6 KiB
Bash
Executable File

#!/bin/bash
# Script to set up repositories for creating pull requests
# This clones repos separately (not as submodules) for easier PR workflow
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
PR_WORKSPACE="${PROJECT_ROOT}/../pr-workspace"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
log_info "========================================="
log_info "Setting up PR Workspace"
log_info "========================================="
log_info ""
# Create PR workspace directory
mkdir -p "$PR_WORKSPACE"
cd "$PR_WORKSPACE"
# Repositories to set up
# Format: repo_name|repo_url|branch_name (using | instead of : to avoid URL conflicts)
REPOS=(
"ethereum-lists/chains|https://github.com/ethereum-lists/chains.git|update-chainid-138-rpc-endpoints"
"Defi-Oracle-Meta-Blockchain/Cross-Chain-Mirroring|https://github.com/Defi-Oracle-Meta-Blockchain/Cross-Chain-Mirroring.git|update-chainid-138-rpc-endpoints"
"Defi-Oracle-Meta-Blockchain/app-ethereum|https://github.com/Defi-Oracle-Meta-Blockchain/app-ethereum.git|add-chainid-138-support"
)
log_info "PR Workspace: $PR_WORKSPACE"
log_info ""
log_warn "IMPORTANT: You need to fork these repositories first!"
log_warn "1. Go to each repository on GitHub"
log_warn "2. Click 'Fork' to create your fork"
log_warn "3. Then run this script with your GitHub username"
log_info ""
# Get GitHub username
read -p "Enter your GitHub username: " GITHUB_USERNAME
if [ -z "$GITHUB_USERNAME" ]; then
log_error "GitHub username is required"
exit 1
fi
log_info ""
log_info "Setting up repositories..."
log_info ""
for repo_info in "${REPOS[@]}"; do
IFS='|' read -r repo_name repo_url branch_name <<< "$repo_info"
log_info "Processing: $repo_name"
# Extract repo directory name from URL
# Example: https://github.com/ethereum-lists/chains.git -> chains
if [[ "$repo_url" =~ github\.com[:/][^/]+/([^/]+)\.git$ ]]; then
repo_dir="${BASH_REMATCH[1]}"
else
# Fallback: extract last component before .git
repo_dir=$(echo "$repo_url" | sed 's|.*/||' | sed 's|\.git$||')
fi
# Check if already cloned
if [ -d "$repo_dir" ]; then
log_warn " Repository already exists: $repo_dir"
read -p " Remove and re-clone? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
rm -rf "$repo_dir"
else
log_info " Skipping $repo_dir"
continue
fi
fi
# Clone from user's fork (or original if fork doesn't exist)
FORK_URL="https://github.com/${GITHUB_USERNAME}/${repo_dir}.git"
ORIGINAL_URL="$repo_url"
log_info " Attempting to clone from fork: $FORK_URL"
if git clone "$FORK_URL" "$repo_dir" 2>/dev/null; then
log_success " Cloned from fork: $FORK_URL"
cd "$repo_dir"
# Add upstream remote
git remote add upstream "$ORIGINAL_URL" 2>/dev/null || git remote set-url upstream "$ORIGINAL_URL"
log_success " Added upstream remote"
else
log_warn " Fork not found, cloning from original"
if git clone "$ORIGINAL_URL" "$repo_dir"; then
log_success " Cloned from original: $ORIGINAL_URL"
cd "$repo_dir"
log_warn " Remember to fork this repository and update remote!"
else
log_error " Failed to clone $repo_name"
continue
fi
fi
# Create branch for PR
if git checkout -b "$branch_name" 2>/dev/null; then
log_success " Created branch: $branch_name"
else
log_warn " Branch already exists or on different branch"
git checkout "$branch_name" 2>/dev/null || log_warn " Could not checkout branch"
fi
cd "$PR_WORKSPACE"
log_info ""
done
log_success "========================================="
log_success "Setup Complete!"
log_success "========================================="
log_info ""
log_info "Next steps:"
log_info "1. Review each repository in: $PR_WORKSPACE"
log_info "2. Make your changes"
log_info "3. Commit and push:"
log_info " cd pr-workspace/<repo>"
log_info " git add ."
log_info " git commit -m 'Your commit message'"
log_info " git push origin <branch-name>"
log_info "4. Create PR on GitHub from your fork to upstream"
log_info ""
log_info "See: explorer-monorepo/docs/PULL_REQUEST_GUIDE.md for detailed instructions"