Completed clean root directory structure: - Root now contains only: .git, .env, docs/, orig/ - Moved all remaining files and directories to orig/: - Config files (.claude, .dockerignore, .drone.yml, etc.) - All .env variants (except active .env) - Git config (.gitconfig, .github, .gitignore, etc.) - Tool configs (.golangci.yml, .revive.toml, etc.) - Documentation (*.md files, @prompts) - Build files (Dockerfiles, Makefile, go.mod, go.sum) - Docker compose files - All source directories (scripts, tests, tools, etc.) - Runtime directories (logs, monitoring, reports) - Dependency files (node_modules, lib, cache) - Special files (--delete) - Removed empty runtime directories (bin/, data/) V2 structure is now clean: - docs/planning/ - V2 planning documents - orig/ - Complete V1 codebase preserved - .env - Active environment config (not in git) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
269 lines
6.2 KiB
Bash
Executable File
269 lines
6.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# git-workflow.sh - Helper script for Git workflow in MEV Bot project
|
|
|
|
set -e # Exit on any error
|
|
|
|
echo "MEV Bot Git Workflow Helper"
|
|
echo "=========================="
|
|
|
|
# Function to display usage
|
|
usage() {
|
|
echo "Usage: $0 [command]"
|
|
echo ""
|
|
echo "Commands:"
|
|
echo " status - Show git status"
|
|
echo " commit - Commit changes with conventional commits"
|
|
echo " push - Push changes with pre-push checks"
|
|
echo " feature NAME - Create new feature branch"
|
|
echo " fix NAME - Create new fix branch"
|
|
echo " sync - Sync current branch with develop"
|
|
echo " pr - Prepare for pull request"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " $0 commit"
|
|
echo " $0 feature add-market-scanner"
|
|
echo " $0 fix resolve-memory-leak"
|
|
}
|
|
|
|
# Function to check if we're in the right directory
|
|
check_directory() {
|
|
if [ ! -f "go.mod" ]; then
|
|
echo "Error: This script must be run from the project root directory"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Function to show git status
|
|
show_status() {
|
|
echo "Git Status:"
|
|
echo "==========="
|
|
git status
|
|
}
|
|
|
|
# Function to commit changes
|
|
commit_changes() {
|
|
echo "Committing changes..."
|
|
echo "Available file types to add:"
|
|
|
|
# Show what files are modified
|
|
if [ -n "$(git diff --name-only)" ]; then
|
|
echo "Modified files:"
|
|
git diff --name-only
|
|
fi
|
|
|
|
if [ -n "$(git diff --name-only --cached)" ]; then
|
|
echo "Staged files:"
|
|
git diff --name-only --cached
|
|
fi
|
|
|
|
# Ask user what to do
|
|
echo ""
|
|
echo "Options:"
|
|
echo "1) Add all changes and commit"
|
|
echo "2) Add specific files and commit"
|
|
echo "3) Commit already staged changes"
|
|
echo "4) Cancel"
|
|
|
|
read -p "Choose option (1-4): " choice
|
|
|
|
case $choice in
|
|
1)
|
|
git add .
|
|
;;
|
|
2)
|
|
echo "Enter files to add (space separated):"
|
|
read files
|
|
git add $files
|
|
;;
|
|
3)
|
|
# Use already staged files
|
|
;;
|
|
4)
|
|
echo "Commit cancelled"
|
|
return
|
|
;;
|
|
*)
|
|
echo "Invalid option"
|
|
return
|
|
;;
|
|
esac
|
|
|
|
# Run pre-commit hook manually to show what it does
|
|
echo "Running pre-commit checks..."
|
|
.git/hooks/pre-commit
|
|
|
|
# Get commit message
|
|
echo ""
|
|
echo "Enter commit message (follow conventional commits format):"
|
|
echo "Examples:"
|
|
echo " feat(market): add new arbitrage detection algorithm"
|
|
echo " fix(parser): resolve race condition in transaction parsing"
|
|
echo " perf(pricing): optimize Uniswap V3 calculations"
|
|
read -p "Commit message: " commit_msg
|
|
|
|
if [ -n "$commit_msg" ]; then
|
|
git commit -m "$commit_msg"
|
|
echo "Changes committed successfully!"
|
|
else
|
|
echo "No commit message provided. Commit cancelled."
|
|
fi
|
|
}
|
|
|
|
# Function to push changes
|
|
push_changes() {
|
|
echo "Pushing changes..."
|
|
|
|
# Run pre-push hook manually to show what it does
|
|
echo "Running pre-push checks..."
|
|
.git/hooks/pre-push
|
|
|
|
# Get current branch
|
|
branch=$(git rev-parse --abbrev-ref HEAD)
|
|
|
|
# Push to origin
|
|
git push -u origin $branch
|
|
echo "Changes pushed successfully!"
|
|
}
|
|
|
|
# Function to create feature branch
|
|
create_feature_branch() {
|
|
local feature_name=$1
|
|
|
|
if [ -z "$feature_name" ]; then
|
|
echo "Error: Feature name required"
|
|
echo "Usage: $0 feature <feature-name>"
|
|
return 1
|
|
fi
|
|
|
|
echo "Creating feature branch: feature/$feature_name"
|
|
|
|
# Switch to develop and pull latest
|
|
git checkout develop
|
|
git pull origin develop
|
|
|
|
# Create new feature branch
|
|
git checkout -b feature/$feature_name
|
|
echo "Feature branch 'feature/$feature_name' created and switched to."
|
|
}
|
|
|
|
# Function to create fix branch
|
|
create_fix_branch() {
|
|
local fix_name=$1
|
|
|
|
if [ -z "$fix_name" ]; then
|
|
echo "Error: Fix name required"
|
|
echo "Usage: $0 fix <fix-name>"
|
|
return 1
|
|
fi
|
|
|
|
echo "Creating fix branch: fix/$fix_name"
|
|
|
|
# Switch to develop and pull latest
|
|
git checkout develop
|
|
git pull origin develop
|
|
|
|
# Create new fix branch
|
|
git checkout -b fix/$fix_name
|
|
echo "Fix branch 'fix/$fix_name' created and switched to."
|
|
}
|
|
|
|
# Function to sync with develop
|
|
sync_with_develop() {
|
|
echo "Syncing current branch with develop..."
|
|
|
|
# Get current branch
|
|
current_branch=$(git rev-parse --abbrev-ref HEAD)
|
|
|
|
# Stash any changes
|
|
if [ -n "$(git status --porcelain)" ]; then
|
|
echo "Stashing changes..."
|
|
git stash
|
|
stashed=true
|
|
fi
|
|
|
|
# Switch to develop and pull
|
|
git checkout develop
|
|
git pull origin develop
|
|
|
|
# Switch back to original branch and rebase
|
|
git checkout $current_branch
|
|
git rebase develop
|
|
|
|
# Pop stash if we had one
|
|
if [ "$stashed" = true ]; then
|
|
echo "Restoring stashed changes..."
|
|
git stash pop
|
|
fi
|
|
|
|
echo "Sync completed!"
|
|
}
|
|
|
|
# Function to prepare for PR
|
|
prepare_pr() {
|
|
echo "Preparing for Pull Request..."
|
|
|
|
# Run tests
|
|
echo "Running tests..."
|
|
go test ./...
|
|
|
|
# Run linter if available
|
|
if command -v golangci-lint >/dev/null 2>&1; then
|
|
echo "Running linter..."
|
|
golangci-lint run
|
|
else
|
|
echo "golangci-lint not found. Skipping linting."
|
|
fi
|
|
|
|
# Check git status
|
|
echo ""
|
|
echo "Git status:"
|
|
git status
|
|
|
|
echo ""
|
|
echo "Ready for Pull Request!"
|
|
echo "Next steps:"
|
|
echo "1. Push your branch: git push -u origin \$(git rev-parse --abbrev-ref HEAD)"
|
|
echo "2. Create PR on GitHub/GitLab"
|
|
echo "3. Request review from team members"
|
|
}
|
|
|
|
# Main script logic
|
|
check_directory
|
|
|
|
if [ $# -eq 0 ]; then
|
|
usage
|
|
exit 0
|
|
fi
|
|
|
|
COMMAND=$1
|
|
shift
|
|
|
|
case $COMMAND in
|
|
status)
|
|
show_status
|
|
;;
|
|
commit)
|
|
commit_changes
|
|
;;
|
|
push)
|
|
push_changes
|
|
;;
|
|
feature)
|
|
create_feature_branch $1
|
|
;;
|
|
fix)
|
|
create_fix_branch $1
|
|
;;
|
|
sync)
|
|
sync_with_develop
|
|
;;
|
|
pr)
|
|
prepare_pr
|
|
;;
|
|
*)
|
|
echo "Unknown command: $COMMAND"
|
|
usage
|
|
exit 1
|
|
;;
|
|
esac |