| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- #!/bin/bash
- # Script to install pre-commit and post-commit hooks for webui
- # Pre-commit: formats, lints, checks, and builds code, stashes unstaged changes
- # Post-commit: automatically unstashes changes
- REPO_ROOT=$(git rev-parse --show-toplevel)
- PRE_COMMIT_HOOK="$REPO_ROOT/.git/hooks/pre-commit"
- POST_COMMIT_HOOK="$REPO_ROOT/.git/hooks/post-commit"
- echo "Installing pre-commit and post-commit hooks for webui..."
- # Create the pre-commit hook
- cat > "$PRE_COMMIT_HOOK" << 'EOF'
- #!/bin/bash
- # Check if there are any changes in the webui directory
- if git diff --cached --name-only | grep -q "^tools/server/webui/"; then
- echo "Formatting webui code..."
-
- # Change to webui directory and run format
- cd tools/server/webui
-
- # Check if npm is available and package.json exists
- if [ ! -f "package.json" ]; then
- echo "Error: package.json not found in tools/server/webui"
- exit 1
- fi
-
- # Stash any unstaged changes to avoid conflicts during format/build
- echo "Stashing unstaged changes..."
- git stash push --keep-index --include-untracked -m "Pre-commit hook: stashed unstaged changes"
- STASH_CREATED=$?
-
- # Run the format command
- npm run format
- # Check if format command succeeded
- if [ $? -ne 0 ]; then
- echo "Error: npm run format failed"
- if [ $STASH_CREATED -eq 0 ]; then
- echo "You can restore your unstaged changes with: git stash pop"
- fi
- exit 1
- fi
- # Run the lint command
- npm run lint
-
- # Check if lint command succeeded
- if [ $? -ne 0 ]; then
- echo "Error: npm run lint failed"
- if [ $STASH_CREATED -eq 0 ]; then
- echo "You can restore your unstaged changes with: git stash pop"
- fi
- exit 1
- fi
- # Run the check command
- npm run check
-
- # Check if check command succeeded
- if [ $? -ne 0 ]; then
- echo "Error: npm run check failed"
- if [ $STASH_CREATED -eq 0 ]; then
- echo "You can restore your unstaged changes with: git stash pop"
- fi
- exit 1
- fi
- # Run the build command
- npm run build
-
- # Check if build command succeeded
- if [ $? -ne 0 ]; then
- echo "Error: npm run build failed"
- if [ $STASH_CREATED -eq 0 ]; then
- echo "You can restore your unstaged changes with: git stash pop"
- fi
- exit 1
- fi
- # Go back to repo root to add build output
- cd ../../..
-
- # Add the build output to staging area
- git add tools/server/public/index.html.gz
-
- if [ $STASH_CREATED -eq 0 ]; then
- echo "✅ Build completed. Your unstaged changes have been stashed."
- echo "They will be automatically restored after the commit."
- # Create a marker file to indicate stash was created by pre-commit hook
- touch .git/WEBUI_STASH_MARKER
- fi
-
- echo "Webui code formatted successfully"
- fi
- exit 0
- EOF
- # Create the post-commit hook
- cat > "$POST_COMMIT_HOOK" << 'EOF'
- #!/bin/bash
- # Check if we have a stash marker from the pre-commit hook
- if [ -f .git/WEBUI_STASH_MARKER ]; then
- echo "Restoring your unstaged changes..."
- git stash pop
- rm -f .git/WEBUI_STASH_MARKER
- echo "✅ Your unstaged changes have been restored."
- fi
- exit 0
- EOF
- # Make both hooks executable
- chmod +x "$PRE_COMMIT_HOOK"
- chmod +x "$POST_COMMIT_HOOK"
- if [ $? -eq 0 ]; then
- echo "✅ Pre-commit and post-commit hooks installed successfully!"
- echo " Pre-commit: $PRE_COMMIT_HOOK"
- echo " Post-commit: $POST_COMMIT_HOOK"
- echo ""
- echo "The hooks will automatically:"
- echo " • Format, lint, check, and build webui code before commits"
- echo " • Stash unstaged changes during the process"
- echo " • Restore your unstaged changes after the commit"
- echo ""
- echo "To test the hooks, make a change to a file in the webui directory and commit it."
- else
- echo "❌ Failed to make hooks executable"
- exit 1
- fi
|