resume/git-hooks/pre-push

107 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
# Pre-push hook to generate PDFs before pushing
# This ensures PDFs are always up to date when code is pushed
# Don't exit on error immediately - we want to report issues but not break the push
set +e
REPO_ROOT="$(git rev-parse --show-toplevel)"
DOCKER_DIR="$REPO_ROOT/docker"
PDFS_DIR="$REPO_ROOT/docker/resume/pdfs"
GENERATE_PDFS_SCRIPT="$DOCKER_DIR/generate-pdfs.js"
# Check if we're in a git repository
if [ -z "$REPO_ROOT" ]; then
echo "Warning: Not in a git repository, skipping PDF generation"
exit 0
fi
# Check if docker directory exists
if [ ! -d "$DOCKER_DIR" ]; then
echo "Warning: docker directory not found, skipping PDF generation"
exit 0
fi
# Check if generate-pdfs.js exists
if [ ! -f "$GENERATE_PDFS_SCRIPT" ]; then
echo "Warning: generate-pdfs.js not found, skipping PDF generation"
exit 0
fi
# Check if PDFs already exist and are up to date
if [ -d "$PDFS_DIR" ]; then
PDF_COUNT=$(find "$PDFS_DIR" -name "*.pdf" -type f 2>/dev/null | wc -l | tr -d ' ')
if [ "$PDF_COUNT" -gt 0 ]; then
echo "PDFs already exist ($PDF_COUNT files), skipping generation"
echo "To regenerate PDFs, run: cd docker && PUPPETEER_EXECUTABLE_PATH=\"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\" npm run generate-pdfs"
exit 0
fi
fi
echo "Running pre-push hook: Generating PDFs..."
# Navigate to docker directory
cd "$DOCKER_DIR" || {
echo "Error: Could not navigate to docker directory"
exit 1
}
# Check if node_modules exists, install if not
if [ ! -d "node_modules" ]; then
echo "Installing npm dependencies..."
if ! PUPPETEER_SKIP_DOWNLOAD=true npm install; then
echo "Error: Failed to install npm dependencies"
exit 1
fi
fi
# Check if npm is available
if ! command -v npm &> /dev/null; then
echo "Error: npm is not installed or not in PATH"
exit 1
fi
# Try to find Chrome executable
CHROME_PATH=""
if [ -f "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" ]; then
CHROME_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
elif command -v google-chrome &> /dev/null; then
CHROME_PATH=$(which google-chrome)
elif command -v chromium &> /dev/null; then
CHROME_PATH=$(which chromium)
fi
if [ -z "$CHROME_PATH" ]; then
echo "Warning: Chrome not found, skipping PDF generation"
echo "PDFs will be generated during Docker build instead"
exit 0
fi
# Generate PDFs
echo "Generating PDFs using Chrome at: $CHROME_PATH"
if PUPPETEER_EXECUTABLE_PATH="$CHROME_PATH" npm run generate-pdfs; then
echo "✓ PDFs generated successfully"
# Stage the PDFs directory if it exists and has changes
cd "$REPO_ROOT" || exit 1
if [ -d "$PDFS_DIR" ]; then
# Check if there are any PDF files
PDF_COUNT=$(find "$PDFS_DIR" -name "*.pdf" -type f 2>/dev/null | wc -l | tr -d ' ')
if [ "$PDF_COUNT" -gt 0 ]; then
# Add all PDFs to staging
git add "$PDFS_DIR" 2>/dev/null
# Check if there are changes staged
if ! git diff --cached --quiet --exit-code "$PDFS_DIR" 2>/dev/null; then
echo "✓ PDFs updated and staged for commit"
fi
fi
fi
else
echo "Warning: PDF generation failed, continuing with push"
echo "PDFs will be generated during Docker build instead"
fi
exit 0