117 lines
4.8 KiB
Makefile
117 lines
4.8 KiB
Makefile
.PHONY: all clean install test samples help check-deps examples verify-examples pytest pytest-fast pytest-visual pytest-cov
|
|
|
|
# Default target
|
|
all: out/flashcards.pdf out/flashcards_linear.pdf
|
|
|
|
# Check dependencies
|
|
check-deps:
|
|
@command -v typst >/dev/null 2>&1 || { echo "Error: typst is not installed. Run 'make install' first." >&2; exit 1; }
|
|
@command -v qpdf >/dev/null 2>&1 || { echo "Warning: qpdf is not installed. Linearization will be skipped." >&2; }
|
|
@command -v python3 >/dev/null 2>&1 || { echo "Error: python3 is not installed." >&2; exit 1; }
|
|
|
|
# Install dependencies (macOS)
|
|
install:
|
|
@echo "Installing dependencies..."
|
|
@command -v brew >/dev/null 2>&1 || { echo "Error: Homebrew is not installed. Visit https://brew.sh" >&2; exit 1; }
|
|
brew install typst qpdf
|
|
pip3 install -r requirements.txt
|
|
|
|
# Generate default flashcards
|
|
out/flashcards.pdf: check-deps
|
|
@mkdir -p out
|
|
python3 packages/core/src/generate.py --config config/default.yaml --output out/flashcards.pdf
|
|
|
|
# Generate linearized version
|
|
out/flashcards_linear.pdf: out/flashcards.pdf
|
|
@command -v qpdf >/dev/null 2>&1 && qpdf --linearize out/flashcards.pdf out/flashcards_linear.pdf || echo "Skipping linearization (qpdf not installed)"
|
|
|
|
# Generate sample outputs
|
|
samples: check-deps
|
|
@echo "Generating sample outputs..."
|
|
@mkdir -p out/samples
|
|
python3 packages/core/src/generate.py --config config/default.yaml --output out/samples/default.pdf
|
|
python3 packages/core/src/generate.py --config config/0-99.yaml --output out/samples/0-99.pdf
|
|
python3 packages/core/src/generate.py --config config/3-column-fixed.yaml --output out/samples/3-column-fixed.pdf
|
|
python3 packages/core/src/generate.py --range "1,2,5,10,20,50,100" --cards-per-page 8 --output out/samples/custom-list.pdf
|
|
@echo "Sample PDFs generated in out/samples/"
|
|
|
|
# Quick test with small range
|
|
test: check-deps
|
|
@echo "Running quick test..."
|
|
python3 packages/core/src/generate.py --range "0-9" --output out/test.pdf
|
|
@command -v qpdf >/dev/null 2>&1 && qpdf --check out/test.pdf || echo "PDF generated (validation skipped)"
|
|
@echo "Test completed successfully"
|
|
|
|
# Generate README example images
|
|
examples: check-deps
|
|
@echo "Generating example images for README..."
|
|
@python3 packages/core/src/generate_examples.py
|
|
@echo "✓ Example images generated in docs/images/"
|
|
|
|
# Verify examples are up to date (for CI)
|
|
verify-examples: examples
|
|
@echo "Verifying example images are up to date..."
|
|
@if git diff --quiet docs/images/; then \
|
|
echo "✓ Example images are up to date"; \
|
|
else \
|
|
echo "✗ Example images have changed - please run 'make examples' and commit the changes"; \
|
|
git diff --stat docs/images/; \
|
|
exit 1; \
|
|
fi
|
|
|
|
# Clean output files
|
|
clean:
|
|
rm -rf out/
|
|
|
|
# Run pytest tests
|
|
pytest:
|
|
@echo "Running pytest tests..."
|
|
@pip3 show pytest >/dev/null 2>&1 || { echo "Installing test dependencies..."; pip3 install -r requirements.txt; }
|
|
python3 -m pytest tests/ -v
|
|
|
|
# Run fast tests only (exclude slow tests)
|
|
pytest-fast:
|
|
@echo "Running fast tests..."
|
|
@pip3 show pytest >/dev/null 2>&1 || { echo "Installing test dependencies..."; pip3 install -r requirements.txt; }
|
|
python3 -m pytest tests/ -v -m "not slow"
|
|
|
|
# Run visual tests only
|
|
pytest-visual:
|
|
@echo "Running visual regression tests..."
|
|
@pip3 show pytest >/dev/null 2>&1 || { echo "Installing test dependencies..."; pip3 install -r requirements.txt; }
|
|
python3 -m pytest tests/test_visual.py -v
|
|
|
|
# Run tests with coverage
|
|
pytest-cov:
|
|
@echo "Running tests with coverage..."
|
|
@pip3 show pytest-cov >/dev/null 2>&1 || { echo "Installing test dependencies..."; pip3 install -r requirements.txt; }
|
|
python3 -m pytest tests/ -v --cov=src --cov-report=html --cov-report=term
|
|
|
|
|
|
# Show help
|
|
help:
|
|
@echo "Soroban Flashcard Generator - Make targets:"
|
|
@echo ""
|
|
@echo "Build targets:"
|
|
@echo " make Generate default flashcards (0-9)"
|
|
@echo " make samples Generate all sample configurations"
|
|
@echo " make test Run a quick test build"
|
|
@echo " make examples Generate README example images"
|
|
@echo " make verify-examples Verify examples are up to date (CI)"
|
|
@echo ""
|
|
@echo "Test targets:"
|
|
@echo " make pytest Run all pytest tests"
|
|
@echo " make pytest-fast Run fast tests only (skip slow ones)"
|
|
@echo " make pytest-visual Run visual regression tests only"
|
|
@echo " make pytest-cov Run tests with coverage report"
|
|
@echo ""
|
|
@echo "Setup targets:"
|
|
@echo " make install Install dependencies (macOS)"
|
|
@echo " make clean Remove all generated files"
|
|
@echo " make help Show this help message"
|
|
@echo ""
|
|
@echo "Examples:"
|
|
@echo " make # Generate default flashcards"
|
|
@echo " make pytest-fast # Run unit tests quickly"
|
|
@echo " python3 src/generate.py --range 0-99 # Custom range"
|
|
@echo " python3 src/generate.py --config config/0-99.yaml # Use config file"
|