Compare commits
	
		
			3 Commits
		
	
	
		
			091aeb4798
			...
			master
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						ff4cb0ec8c
	
				 | 
					
					
						|||
| 
						
						
							
						
						10048e7611
	
				 | 
					
					
						|||
| 
						
						
							
						
						9cec37d7ea
	
				 | 
					
					
						
							
								
								
									
										46
									
								
								.githooks/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								.githooks/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
# Git Hooks
 | 
			
		||||
 | 
			
		||||
This directory contains Git hooks for the CV project.
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
 | 
			
		||||
To install the hooks, run:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
.githooks/install-hooks.sh
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Or, configure Git to use this directory for hooks (Git 2.9+):
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
git config core.hooksPath .githooks
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Available Hooks
 | 
			
		||||
 | 
			
		||||
### pre-commit
 | 
			
		||||
 | 
			
		||||
Automatically compiles LaTeX files and generates WebP preview image.
 | 
			
		||||
 | 
			
		||||
**Requirements:**
 | 
			
		||||
- `pdflatex` (from TeX Live or similar LaTeX distribution)
 | 
			
		||||
- `pdftoppm` (from poppler-utils)
 | 
			
		||||
- `magick` (ImageMagick)
 | 
			
		||||
 | 
			
		||||
The hook will:
 | 
			
		||||
1. Compile `cv.tex` and `cv_de.tex` to PDF if they've been modified or staged
 | 
			
		||||
2. Convert the first page of `cv.pdf` to a WebP image
 | 
			
		||||
3. Save it as `img/cv.webp`
 | 
			
		||||
4. Add the generated image to the commit
 | 
			
		||||
 | 
			
		||||
### post-push
 | 
			
		||||
 | 
			
		||||
Automatically syncs compiled PDFs to bocken.org after pushing.
 | 
			
		||||
 | 
			
		||||
**Requirements:**
 | 
			
		||||
- `rsync`
 | 
			
		||||
- SSH access to `root@bocken.org`
 | 
			
		||||
 | 
			
		||||
The hook will:
 | 
			
		||||
1. Upload `cv.pdf` to `root@bocken.org:/var/www/static/`
 | 
			
		||||
2. Upload `cv_de.pdf` to `root@bocken.org:/var/www/static/` (if exists)
 | 
			
		||||
							
								
								
									
										30
									
								
								.githooks/install-hooks.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										30
									
								
								.githooks/install-hooks.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
# Install git hooks from .githooks directory
 | 
			
		||||
 | 
			
		||||
HOOKS_DIR=".githooks"
 | 
			
		||||
GIT_HOOKS_DIR=".git/hooks"
 | 
			
		||||
 | 
			
		||||
# Ensure .git/hooks directory exists
 | 
			
		||||
if [ ! -d "$GIT_HOOKS_DIR" ]; then
 | 
			
		||||
    echo "Error: .git/hooks directory not found. Are you in a git repository?"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Copy all hooks from .githooks to .git/hooks
 | 
			
		||||
for hook in "$HOOKS_DIR"/*; do
 | 
			
		||||
    # Skip this installation script
 | 
			
		||||
    if [ "$(basename "$hook")" = "install-hooks.sh" ] || [ "$(basename "$hook")" = "README.md" ]; then
 | 
			
		||||
        continue
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [ -f "$hook" ]; then
 | 
			
		||||
        hook_name=$(basename "$hook")
 | 
			
		||||
        echo "Installing $hook_name..."
 | 
			
		||||
        cp "$hook" "$GIT_HOOKS_DIR/$hook_name"
 | 
			
		||||
        chmod +x "$GIT_HOOKS_DIR/$hook_name"
 | 
			
		||||
        echo "✓ $hook_name installed"
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
echo ""
 | 
			
		||||
echo "All hooks installed successfully!"
 | 
			
		||||
							
								
								
									
										38
									
								
								.githooks/post-push
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										38
									
								
								.githooks/post-push
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Post-push hook to rsync CV PDFs to bocken.org
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
echo "==== Syncing PDFs to bocken.org ===="
 | 
			
		||||
 | 
			
		||||
# Check if PDFs exist
 | 
			
		||||
if [ ! -f "cv.pdf" ]; then
 | 
			
		||||
    echo "Warning: cv.pdf not found, skipping sync"
 | 
			
		||||
    exit 0
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Rsync cv.pdf
 | 
			
		||||
echo "Uploading cv.pdf..."
 | 
			
		||||
if rsync -avz --progress cv.pdf root@bocken.org:/var/www/static/; then
 | 
			
		||||
    echo "✓ cv.pdf synced successfully"
 | 
			
		||||
else
 | 
			
		||||
    echo "✗ Failed to sync cv.pdf"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Rsync cv_de.pdf if it exists
 | 
			
		||||
if [ -f "cv_de.pdf" ]; then
 | 
			
		||||
    echo "Uploading cv_de.pdf..."
 | 
			
		||||
    if rsync -avz --progress cv_de.pdf root@bocken.org:/var/www/static/; then
 | 
			
		||||
        echo "✓ cv_de.pdf synced successfully"
 | 
			
		||||
    else
 | 
			
		||||
        echo "✗ Failed to sync cv_de.pdf"
 | 
			
		||||
        exit 1
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo ""
 | 
			
		||||
echo "==== Sync complete ===="
 | 
			
		||||
 | 
			
		||||
exit 0
 | 
			
		||||
							
								
								
									
										87
									
								
								.githooks/pre-commit
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										87
									
								
								.githooks/pre-commit
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,87 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Pre-commit hook to compile LaTeX files and generate cv.webp
 | 
			
		||||
 | 
			
		||||
set -e  # Exit on error
 | 
			
		||||
 | 
			
		||||
# Function to compile LaTeX file
 | 
			
		||||
compile_latex() {
 | 
			
		||||
    local texfile=$1
 | 
			
		||||
    local pdffile="${texfile%.tex}.pdf"
 | 
			
		||||
 | 
			
		||||
    echo "Compiling $texfile..."
 | 
			
		||||
 | 
			
		||||
    # Run pdflatex twice to resolve references
 | 
			
		||||
    pdflatex -interaction=nonstopmode "$texfile" > /tmp/latex_output.log 2>&1
 | 
			
		||||
    pdflatex -interaction=nonstopmode "$texfile" > /tmp/latex_output.log 2>&1
 | 
			
		||||
 | 
			
		||||
    # Check if PDF was created successfully (ignore exit code as warnings cause non-zero)
 | 
			
		||||
    if [ -f "$pdffile" ]; then
 | 
			
		||||
        echo "✓ Successfully compiled $pdffile"
 | 
			
		||||
        return 0
 | 
			
		||||
    else
 | 
			
		||||
        echo "✗ Failed to compile $texfile"
 | 
			
		||||
        echo "See /tmp/latex_output.log for details"
 | 
			
		||||
        return 1
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Function to generate webp from PDF
 | 
			
		||||
generate_webp() {
 | 
			
		||||
    local pdffile=$1
 | 
			
		||||
 | 
			
		||||
    echo "Generating cv.webp from $pdffile..."
 | 
			
		||||
 | 
			
		||||
    # Use pdftoppm to convert first page to PNG, then ImageMagick to convert to WebP
 | 
			
		||||
    pdftoppm -png -f 1 -l 1 -singlefile "$pdffile" temp_cv && \
 | 
			
		||||
    magick temp_cv.png -quality 85 img/cv.webp && \
 | 
			
		||||
    rm -f temp_cv.png
 | 
			
		||||
 | 
			
		||||
    if [ $? -eq 0 ]; then
 | 
			
		||||
        echo "✓ Successfully generated img/cv.webp"
 | 
			
		||||
        git add img/cv.webp
 | 
			
		||||
        return 0
 | 
			
		||||
    else
 | 
			
		||||
        echo "✗ Failed to generate cv.webp"
 | 
			
		||||
        return 1
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Check if .tex files are staged or modified
 | 
			
		||||
if git diff --cached --name-only | grep -qE "^cv(_de)?\.tex$" || \
 | 
			
		||||
   [ -f "cv.tex" -a "cv.tex" -nt "cv.pdf" ] || \
 | 
			
		||||
   [ -f "cv_de.tex" -a "cv_de.tex" -nt "cv_de.pdf" ]; then
 | 
			
		||||
 | 
			
		||||
    echo "==== Compiling LaTeX files ===="
 | 
			
		||||
 | 
			
		||||
    # Compile cv.tex if it exists and is newer than PDF or staged
 | 
			
		||||
    if [ -f "cv.tex" ]; then
 | 
			
		||||
        if [ ! -f "cv.pdf" ] || [ "cv.tex" -nt "cv.pdf" ] || \
 | 
			
		||||
           git diff --cached --name-only | grep -q "^cv\.tex$"; then
 | 
			
		||||
            compile_latex "cv.tex" || exit 1
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Compile cv_de.tex if it exists and is newer than PDF or staged
 | 
			
		||||
    if [ -f "cv_de.tex" ]; then
 | 
			
		||||
        if [ ! -f "cv_de.pdf" ] || [ "cv_de.tex" -nt "cv_de.pdf" ] || \
 | 
			
		||||
           git diff --cached --name-only | grep -q "^cv_de\.tex$"; then
 | 
			
		||||
            compile_latex "cv_de.tex" || exit 1
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    echo ""
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Generate cv.webp from cv.pdf
 | 
			
		||||
if [ -f "cv.pdf" ]; then
 | 
			
		||||
    if [ ! -f "img/cv.webp" ] || [ "cv.pdf" -nt "img/cv.webp" ]; then
 | 
			
		||||
        echo "==== Generating WebP image ===="
 | 
			
		||||
        generate_webp "cv.pdf" || exit 1
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo ""
 | 
			
		||||
echo "==== Pre-commit checks complete ===="
 | 
			
		||||
 | 
			
		||||
exit 0
 | 
			
		||||
		Reference in New Issue
	
	Block a user