107 lines
3.3 KiB
Bash
Executable File
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
|
|
|