setup-pr-wrapperโข5.62 kB
#!/bin/bash
# Setup script for GitFlow PR wrapper
# This creates an alias that intercepts gh pr create commands
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
REPO_ROOT=$(git rev-parse --show-toplevel)
WRAPPER_PATH="$REPO_ROOT/.githooks/gh-pr-create-wrapper"
echo -e "${BLUE}โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ${NC}"
echo -e "${BLUE}โ ๐ก๏ธ GitFlow PR Protection Setup โ${NC}"
echo -e "${BLUE}โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ${NC}"
echo -e "${BLUE}โ โ${NC}"
echo -e "${BLUE}โ This will set up protection against creating PRs โ${NC}"
echo -e "${BLUE}โ to the wrong branch (e.g., feature โ main) โ${NC}"
echo -e "${BLUE}โ โ${NC}"
echo -e "${BLUE}โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ${NC}"
echo ""
# Check if wrapper exists
if [[ ! -f "$WRAPPER_PATH" ]]; then
echo -e "${YELLOW}โ Error: Wrapper script not found at $WRAPPER_PATH${NC}"
exit 1
fi
# Create git alias for pr command that uses our wrapper
echo -e "${GREEN}โ Creating Git alias for 'gh pr create' protection...${NC}"
# Create a git alias that intercepts pr commands
git config alias.pr "!f() {
if [[ \"\$1\" == \"create\" ]]; then
$WRAPPER_PATH \"\$@\"
else
command gh pr \"\$@\"
fi
}; f"
# Also create a shell alias for the current session
echo -e "${GREEN}โ Creating shell alias for current session...${NC}"
# Detect shell type and add appropriate alias
if [[ "$SHELL" == *"zsh"* ]]; then
SHELL_RC="$HOME/.zshrc"
elif [[ "$SHELL" == *"bash"* ]]; then
SHELL_RC="$HOME/.bashrc"
else
SHELL_RC="$HOME/.profile"
fi
# Create the alias command
ALIAS_CMD="alias gh='_gh_wrapper() { if [[ \"\$1\" == \"pr\" ]] && [[ \"\$2\" == \"create\" ]]; then $WRAPPER_PATH \"\$@\"; else command gh \"\$@\"; fi }; _gh_wrapper'"
# Check if alias already exists
if ! grep -q "_gh_wrapper" "$SHELL_RC" 2>/dev/null; then
echo "" >> "$SHELL_RC"
echo "# GitFlow PR Protection" >> "$SHELL_RC"
echo "$ALIAS_CMD" >> "$SHELL_RC"
echo -e "${GREEN}โ
Added alias to $SHELL_RC${NC}"
else
echo -e "${YELLOW}โน๏ธ Alias already exists in $SHELL_RC${NC}"
fi
# Apply alias to current session
eval "$ALIAS_CMD"
echo ""
echo -e "${GREEN}โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ${NC}"
echo -e "${GREEN}โ โ
Setup Complete! โ${NC}"
echo -e "${GREEN}โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ${NC}"
echo -e "${GREEN}โ โ${NC}"
echo -e "${GREEN}โ GitFlow PR Protection is now active! โ${NC}"
echo -e "${GREEN}โ โ${NC}"
echo -e "${GREEN}โ When you run 'gh pr create', it will: โ${NC}"
echo -e "${GREEN}โ โข Check if you're creating a PR to the right branch โ${NC}"
echo -e "${GREEN}โ โข Block PRs from feature/fix branches to main โ${NC}"
echo -e "${GREEN}โ โข Guide you to submit to develop instead โ${NC}"
echo -e "${GREEN}โ โ${NC}"
echo -e "${GREEN}โ ${CYAN}Test it:${GREEN} โ${NC}"
echo -e "${GREEN}โ gh pr create --base main ${YELLOW}# Will be blocked${GREEN} โ${NC}"
echo -e "${GREEN}โ gh pr create --base develop ${GREEN}# Will be allowed${GREEN} โ${NC}"
echo -e "${GREEN}โ โ${NC}"
echo -e "${GREEN}โ ${CYAN}To bypass (emergency only):${GREEN} โ${NC}"
echo -e "${GREEN}โ GH_FORCE_PR=1 gh pr create --base main โ${NC}"
echo -e "${GREEN}โ โ${NC}"
echo -e "${GREEN}โ ${CYAN}To disable:${GREEN} โ${NC}"
echo -e "${GREEN}โ unalias gh โ${NC}"
echo -e "${GREEN}โ โ${NC}"
echo -e "${GREEN}โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ${NC}"
echo ""
echo -e "${YELLOW}Note: Restart your terminal or run 'source $SHELL_RC'${NC}"
echo -e "${YELLOW} to ensure the alias is loaded in new sessions.${NC}"