mirror of
https://github.com/calibrain/shelfmark.git
synced 2026-04-19 13:28:16 -04:00
- Updated mirror selection - Removed built-in mirror options, users must provide their own configurations - Set Universal search to default, added ability to disable direct source - Updated documentation - Updated makefile
190 lines
6.1 KiB
Makefile
190 lines
6.1 KiB
Makefile
.PHONY: help install install-ci install-python-dev dev build preview frontend-typecheck frontend-lint frontend-format frontend-format-fix frontend-checks frontend-test clean up down docker-build refresh restart build-serve python-lint python-lint-fix python-format python-format-fix python-typecheck python-dead-code python-checks python-test python-test-cov checks fix
|
|
|
|
# Frontend directory
|
|
FRONTEND_DIR := src/frontend
|
|
|
|
# Docker compose file
|
|
COMPOSE_FILE := docker-compose.dev.yml
|
|
|
|
# Default target
|
|
help:
|
|
@echo "Available targets:"
|
|
@echo ""
|
|
@echo "Quality:"
|
|
@echo " checks - Run ALL static analysis checks (frontend + Python)"
|
|
@echo " fix - Auto-fix lint + format issues (frontend + Python)"
|
|
@echo ""
|
|
@echo "Frontend:"
|
|
@echo " install - Install frontend dependencies"
|
|
@echo " dev - Start development server"
|
|
@echo " build - Build frontend for production"
|
|
@echo " build-serve - Build and serve via Flask (test prod build without Docker)"
|
|
@echo " preview - Preview production build"
|
|
@echo " frontend-typecheck - Run TypeScript type checking"
|
|
@echo " frontend-lint - Run Oxlint against frontend code"
|
|
@echo " frontend-format - Check frontend formatting with Oxfmt"
|
|
@echo " frontend-format-fix - Format frontend code with Oxfmt"
|
|
@echo " frontend-checks - Run all frontend static analysis checks"
|
|
@echo " frontend-test - Run frontend unit tests"
|
|
@echo ""
|
|
@echo "Python:"
|
|
@echo " install-python-dev - Sync Python runtime + dev tooling with uv"
|
|
@echo " python-lint - Run Ruff against Python code (backend + tests)"
|
|
@echo " python-lint-fix - Run Ruff with safe auto-fixes"
|
|
@echo " python-format - Check Python formatting with Ruff"
|
|
@echo " python-format-fix - Format Python code with Ruff"
|
|
@echo " python-typecheck - Run BasedPyright against backend + tests"
|
|
@echo " python-dead-code - Run Vulture against backend code"
|
|
@echo " python-checks - Run all Python static analysis checks"
|
|
@echo " python-test - Run unit tests"
|
|
@echo " python-test-cov - Run unit tests with coverage report"
|
|
@echo " clean - Remove node_modules and build artifacts"
|
|
@echo ""
|
|
@echo "Backend (Docker):"
|
|
@echo " up - Start backend services"
|
|
@echo " down - Stop backend services"
|
|
@echo " restart - Restart backend services (no rebuild)"
|
|
@echo " docker-build - Build Docker image"
|
|
@echo " refresh - Rebuild and restart backend services"
|
|
|
|
# Install dependencies
|
|
install:
|
|
@echo "Installing frontend dependencies..."
|
|
cd $(FRONTEND_DIR) && npm install
|
|
|
|
install-ci:
|
|
@echo "Installing frontend dependencies (CI, lockfile-strict)..."
|
|
cd $(FRONTEND_DIR) && npm ci
|
|
|
|
# Install Python development dependencies
|
|
install-python-dev:
|
|
@echo "Syncing Python runtime and dev tooling with uv..."
|
|
uv sync --locked --extra browser
|
|
@echo "Installing prek git hooks..."
|
|
uv run prek install
|
|
|
|
# Start development server
|
|
dev:
|
|
@echo "Starting development server..."
|
|
cd $(FRONTEND_DIR) && npm run dev
|
|
|
|
# Build for production
|
|
build:
|
|
@echo "Building frontend for production..."
|
|
cd $(FRONTEND_DIR) && npm run build
|
|
|
|
# Build frontend and sync to frontend-dist for the running container to serve
|
|
build-serve: build
|
|
@echo "Syncing build to frontend-dist..."
|
|
@mkdir -p frontend-dist
|
|
rsync -a --delete $(FRONTEND_DIR)/dist/ frontend-dist/
|
|
@echo "Done. Hit the Flask backend (port 8084) to test the production build."
|
|
|
|
# Preview production build
|
|
preview:
|
|
@echo "Previewing production build..."
|
|
cd $(FRONTEND_DIR) && npm run preview
|
|
|
|
# Type checking
|
|
frontend-typecheck:
|
|
@echo "Running TypeScript type checking..."
|
|
cd $(FRONTEND_DIR) && npm run typecheck
|
|
|
|
# Python linting (backend + tests)
|
|
python-lint:
|
|
@echo "Running Ruff..."
|
|
uv run ruff check shelfmark tests
|
|
|
|
python-lint-fix:
|
|
@echo "Running Ruff with safe auto-fixes..."
|
|
uv run ruff check shelfmark tests --fix
|
|
|
|
python-format:
|
|
@echo "Checking Python formatting with Ruff..."
|
|
uv run ruff format --check shelfmark tests
|
|
|
|
python-format-fix:
|
|
@echo "Formatting Python code with Ruff..."
|
|
uv run ruff format shelfmark tests
|
|
|
|
python-typecheck:
|
|
@echo "Running BasedPyright..."
|
|
uv run basedpyright
|
|
@echo "Running BasedPyright against tests..."
|
|
uv run basedpyright tests --skipunannotated
|
|
|
|
python-dead-code:
|
|
@echo "Running Vulture..."
|
|
uv run vulture shelfmark
|
|
|
|
python-checks: python-lint python-format python-typecheck python-dead-code
|
|
|
|
python-test:
|
|
@echo "Running tests..."
|
|
uv run pytest tests/ -x --tb=short -m "not integration and not e2e"
|
|
|
|
python-test-cov:
|
|
@echo "Running tests with coverage..."
|
|
uv run pytest tests/ -x --tb=short -m "not integration and not e2e" --cov --cov-report=term-missing
|
|
|
|
# Frontend linting
|
|
frontend-lint:
|
|
@echo "Running Oxlint..."
|
|
cd $(FRONTEND_DIR) && npm run lint
|
|
|
|
# Frontend formatting
|
|
frontend-format:
|
|
@echo "Checking frontend formatting with Oxfmt..."
|
|
cd $(FRONTEND_DIR) && npm run format:check
|
|
|
|
frontend-format-fix:
|
|
@echo "Formatting frontend code with Oxfmt..."
|
|
cd $(FRONTEND_DIR) && npm run format
|
|
|
|
# All frontend static analysis
|
|
frontend-checks: frontend-lint frontend-format frontend-typecheck
|
|
|
|
# Run frontend unit tests
|
|
frontend-test:
|
|
@echo "Running frontend unit tests..."
|
|
cd $(FRONTEND_DIR) && npm run test:unit
|
|
|
|
# All static analysis checks (frontend + Python)
|
|
checks: frontend-checks python-checks
|
|
|
|
# Auto-fix lint + format issues (frontend + Python)
|
|
fix: python-lint-fix python-format-fix frontend-format-fix
|
|
|
|
# Clean build artifacts and dependencies
|
|
clean:
|
|
@echo "Cleaning build artifacts and dependencies..."
|
|
rm -rf $(FRONTEND_DIR)/node_modules
|
|
rm -rf $(FRONTEND_DIR)/dist
|
|
|
|
# Start backend services
|
|
up:
|
|
@echo "Starting backend services..."
|
|
docker compose -f $(COMPOSE_FILE) up -d
|
|
|
|
# Stop backend services
|
|
down:
|
|
@echo "Stopping backend services..."
|
|
docker compose -f $(COMPOSE_FILE) down
|
|
|
|
# Build Docker image
|
|
docker-build:
|
|
@echo "Building Docker image..."
|
|
docker compose -f $(COMPOSE_FILE) build
|
|
|
|
# Restart backend services (no rebuild)
|
|
restart:
|
|
@echo "Restarting backend services..."
|
|
docker compose -f $(COMPOSE_FILE) restart
|
|
|
|
# Rebuild and restart backend services
|
|
refresh:
|
|
@echo "Rebuilding and restarting backend services..."
|
|
docker compose -f $(COMPOSE_FILE) down
|
|
docker compose -f $(COMPOSE_FILE) build
|
|
docker compose -f $(COMPOSE_FILE) up -d
|