summaryrefslogtreecommitdiff
path: root/llama.cpp/tools/server/webui/scripts/install-git-hooks.sh
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2026-02-12 20:57:17 +0100
committerMitja Felicijan <mitja.felicijan@gmail.com>2026-02-12 20:57:17 +0100
commitb333b06772c89d96aacb5490d6a219fba7c09cc6 (patch)
tree211df60083a5946baa2ed61d33d8121b7e251b06 /llama.cpp/tools/server/webui/scripts/install-git-hooks.sh
downloadllmnpc-b333b06772c89d96aacb5490d6a219fba7c09cc6.tar.gz
Engage!
Diffstat (limited to 'llama.cpp/tools/server/webui/scripts/install-git-hooks.sh')
-rwxr-xr-xllama.cpp/tools/server/webui/scripts/install-git-hooks.sh202
1 files changed, 202 insertions, 0 deletions
diff --git a/llama.cpp/tools/server/webui/scripts/install-git-hooks.sh b/llama.cpp/tools/server/webui/scripts/install-git-hooks.sh
new file mode 100755
index 0000000..d14e281
--- /dev/null
+++ b/llama.cpp/tools/server/webui/scripts/install-git-hooks.sh
@@ -0,0 +1,202 @@
+#!/bin/bash
+
+# Script to install pre-commit and pre-push hooks for webui
+# Pre-commit: formats code and runs checks
+# Pre-push: builds the project, stashes unstaged changes
+
+REPO_ROOT=$(git rev-parse --show-toplevel)
+PRE_COMMIT_HOOK="$REPO_ROOT/.git/hooks/pre-commit"
+PRE_PUSH_HOOK="$REPO_ROOT/.git/hooks/pre-push"
+
+echo "Installing pre-commit and pre-push 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 and checking 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
+
+ # Run the format command
+ npm run format
+
+ # Check if format command succeeded
+ if [ $? -ne 0 ]; then
+ echo "Error: npm run format failed"
+ 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"
+ 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"
+ exit 1
+ fi
+
+ # Go back to repo root
+ cd ../../..
+
+ echo "✅ Webui code formatted and checked successfully"
+fi
+
+exit 0
+EOF
+
+# Create the pre-push hook
+cat > "$PRE_PUSH_HOOK" << 'EOF'
+#!/bin/bash
+
+# Check if there are any webui changes that need building
+WEBUI_CHANGES=$(git diff --name-only @{push}..HEAD | grep "^tools/server/webui/" || true)
+
+if [ -n "$WEBUI_CHANGES" ]; then
+ echo "Webui changes detected, checking if build is up-to-date..."
+
+ # Change to webui directory
+ 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
+
+ # Check if build output exists and is newer than source files
+ BUILD_FILE="../public/index.html.gz"
+ NEEDS_BUILD=false
+
+ if [ ! -f "$BUILD_FILE" ]; then
+ echo "Build output not found, building..."
+ NEEDS_BUILD=true
+ else
+ # Check if any source files are newer than the build output
+ if find src -newer "$BUILD_FILE" -type f | head -1 | grep -q .; then
+ echo "Source files are newer than build output, rebuilding..."
+ NEEDS_BUILD=true
+ fi
+ fi
+
+ if [ "$NEEDS_BUILD" = true ]; then
+ echo "Building webui..."
+
+ # Stash any unstaged changes to avoid conflicts during build
+ echo "Checking for unstaged changes..."
+ if ! git diff --quiet || ! git diff --cached --quiet --diff-filter=A; then
+ echo "Stashing unstaged changes..."
+ git stash push --include-untracked -m "Pre-push hook: stashed unstaged changes"
+ STASH_CREATED=$?
+ else
+ echo "No unstaged changes to stash"
+ STASH_CREATED=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
+ cd ../../..
+
+ # Check if build output was created/updated
+ if [ -f "tools/server/public/index.html.gz" ]; then
+ # Add the build output and commit it
+ git add tools/server/public/index.html.gz
+ if ! git diff --cached --quiet; then
+ echo "Committing updated build output..."
+ git commit -m "chore: update webui build output"
+ echo "✅ Build output committed successfully"
+ else
+ echo "Build output unchanged"
+ fi
+ else
+ echo "Error: Build output not found after build"
+ if [ $STASH_CREATED -eq 0 ]; then
+ echo "You can restore your unstaged changes with: git stash pop"
+ fi
+ exit 1
+ fi
+
+ if [ $STASH_CREATED -eq 0 ]; then
+ echo "✅ Build completed. Your unstaged changes have been stashed."
+ echo "They will be automatically restored after the push."
+ # Create a marker file to indicate stash was created by pre-push hook
+ touch .git/WEBUI_PUSH_STASH_MARKER
+ fi
+ else
+ echo "✅ Build output is up-to-date"
+ fi
+
+ echo "✅ Webui ready for push"
+fi
+
+exit 0
+EOF
+
+# Create the post-push hook (for restoring stashed changes after push)
+cat > "$REPO_ROOT/.git/hooks/post-push" << 'EOF'
+#!/bin/bash
+
+# Check if we have a stash marker from the pre-push hook
+if [ -f .git/WEBUI_PUSH_STASH_MARKER ]; then
+ echo "Restoring your unstaged changes after push..."
+ git stash pop
+ rm -f .git/WEBUI_PUSH_STASH_MARKER
+ echo "✅ Your unstaged changes have been restored."
+fi
+
+exit 0
+EOF
+
+# Make all hooks executable
+chmod +x "$PRE_COMMIT_HOOK"
+chmod +x "$PRE_PUSH_HOOK"
+chmod +x "$REPO_ROOT/.git/hooks/post-push"
+
+if [ $? -eq 0 ]; then
+ echo "✅ Git hooks installed successfully!"
+ echo " Pre-commit: $PRE_COMMIT_HOOK"
+ echo " Pre-push: $PRE_PUSH_HOOK"
+ echo " Post-push: $REPO_ROOT/.git/hooks/post-push"
+ echo ""
+ echo "The hooks will automatically:"
+ echo " • Format and check webui code before commits (pre-commit)"
+ echo " • Build webui code before pushes (pre-push)"
+ echo " • Stash unstaged changes during build process"
+ echo " • Restore your unstaged changes after the push"
+ echo ""
+ echo "To test the hooks:"
+ echo " • Make a change to a file in the webui directory and commit it (triggers format/check)"
+ echo " • Push your commits to trigger the build process"
+else
+ echo "❌ Failed to make hooks executable"
+ exit 1
+fi