yomitalk / Makefile
Kyosuke Ichikawa
東北キャラクター追加とデフォルト変更 (#13)
15d8abf unverified
.PHONY: setup venv install setup-lint clean run test test-unit test-e2e test-staged create-sample-pdf help lint format pre-commit-install pre-commit-run download-voicevox-core install-voicevox-core-module install-system-deps install-python-packages install-python-packages-lint requirements
#--------------------------------------------------------------
# Variables and Configuration
#--------------------------------------------------------------
# Python related
PYTHON = python
VENV_DIR = venv
VENV_PYTHON = $(VENV_DIR)/bin/python
VENV_PIP = $(VENV_DIR)/bin/pip
VENV_PRECOMMIT = $(VENV_DIR)/bin/pre-commit
# VOICEVOX related
VOICEVOX_CORE_VERSION = 0.16.1
VOICEVOX_MODELS_VERSION = 0.16.0
VOICEVOX_SKIP_IF_EXISTS ?= true
VOICEVOX_ACCEPT_AGREEMENT ?= false
VOICEVOX_DIR = voicevox_core
VOICEVOX_CHECK_MODULE = $(VENV_PYTHON) -c "import voicevox_core" 2>/dev/null
# Source code related
SRC_DIRS = yomitalk tests app.py
CACHE_DIRS = __pycache__ app/__pycache__ app/components/__pycache__ app/utils/__pycache__ \
tests/__pycache__ tests/unit/__pycache__ tests/e2e/__pycache__ tests/data/__pycache__ \
.pytest_cache
DATA_DIRS = data/temp/* data/output/*
# Default target
.DEFAULT_GOAL := help
#--------------------------------------------------------------
# Help and Basic Setup
#--------------------------------------------------------------
# Help message
help:
@echo "Paper Podcast Generator Makefile"
@echo ""
@echo "Usage:"
@echo "【Setup】"
@echo " make setup - Setup virtual environment and install packages"
@echo " make venv - Setup virtual environment only"
@echo " make install - Install dependency packages only"
@echo " make setup-lint - Install linting packages only"
@echo "【Development】"
@echo " make run - Run the application"
@echo " make lint - Run static code analysis (ruff check, mypy)"
@echo " make format - Auto-format and fix code issues (ruff format, ruff check --fix)"
@echo " make pre-commit-install - Install pre-commit hooks"
@echo " make pre-commit-run - Run pre-commit hooks manually"
@echo "【Testing】"
@echo " make test - Run all tests"
@echo " make test-unit - Run unit tests only"
@echo " make test-e2e - Run E2E tests only"
@echo " make test-staged - Run unit tests for staged files only"
@echo "【VOICEVOX】"
@echo " make download-voicevox-core - Download and setup VOICEVOX Core"
@echo " make install-voicevox-core-module - Install VOICEVOX Core Python module"
@echo " VOICEVOX_ACCEPT_AGREEMENT=true - Set to auto-accept VOICEVOX license agreement"
@echo "【Cleanup】"
@echo " make clean - Remove virtual environment and generated files"
@echo ""
install-system-deps:
@echo "Installing system dependencies..."
sudo apt-get update
$(MAKE) download-voicevox-core
@echo "System dependencies installation completed!"
venv:
@if [ ! -d "$(VENV_DIR)" ]; then \
echo "Setting up virtual environment..."; \
$(PYTHON) -m venv $(VENV_DIR); \
echo "Virtual environment created at $(VENV_DIR)"; \
else \
echo "Virtual environment already exists at $(VENV_DIR)"; \
fi
install-python-packages: venv
@echo "Installing python packages..."
$(VENV_PIP) install --upgrade pip
$(VENV_PIP) install -r requirements.txt
$(MAKE) install-voicevox-core-module
@echo "Python packages installed"
install-python-packages-lint: venv
@echo "Installing linting packages..."
$(VENV_PIP) install --upgrade pip
$(VENV_PIP) install -r requirements-lint.txt
@echo "Linting packages installed"
setup-lint: venv install-python-packages-lint
@echo "Setup lint completed!"
setup: install-system-deps venv install-python-packages-lint install-python-packages pre-commit-install
@echo "Setup completed!"
#--------------------------------------------------------------
# VOICEVOX Related
#--------------------------------------------------------------
# Download and setup VOICEVOX Core
download-voicevox-core: venv
@echo "Running VOICEVOX Core download script..."
@scripts/download_voicevox.sh \
--core-version $(VOICEVOX_CORE_VERSION) \
--models-version $(VOICEVOX_MODELS_VERSION) \
--dir $(VOICEVOX_DIR) \
$(if $(filter true, $(VOICEVOX_SKIP_IF_EXISTS)), --skip-if-exists) \
$(if $(filter true, $(VOICEVOX_ACCEPT_AGREEMENT)), --accept-agreement)
@if [ $$? -ne 0 ]; then \
echo "Error: Failed to download VOICEVOX Core. Check logs for details."; \
exit 1; \
fi
# Install VOICEVOX Core Python module
install-voicevox-core-module: venv
@echo "Installing VOICEVOX Core Python module..."
@OS_TYPE="manylinux_2_34_x86_64"; \
WHEEL_URL="https://github.com/VOICEVOX/voicevox_core/releases/download/$(VOICEVOX_CORE_VERSION)/voicevox_core-$(VOICEVOX_CORE_VERSION)-cp310-abi3-$$OS_TYPE.whl"; \
$(VENV_PIP) install $$WHEEL_URL || echo "Failed to install wheel for $$OS_TYPE. Check available wheels at https://github.com/VOICEVOX/voicevox_core/releases/tag/$(VOICEVOX_CORE_VERSION)"
@echo "VOICEVOX Core Python module installed!"
#--------------------------------------------------------------
# Development Tools
#--------------------------------------------------------------
# Run the application
run: venv
@echo "Running application..."
$(VENV_PYTHON) app.py
# Run static analysis (lint)
lint: setup-lint
@echo "Running static code analysis..."
$(VENV_DIR)/bin/ruff check $(SRC_DIRS)
$(VENV_DIR)/bin/mypy $(SRC_DIRS)
@echo "Static analysis completed"
# Format code
format: setup-lint
@echo "Running code formatting and issue fixes..."
$(VENV_DIR)/bin/ruff check --fix $(SRC_DIRS)
$(VENV_DIR)/bin/ruff format $(SRC_DIRS)
@echo "Formatting completed"
# Install pre-commit hooks
pre-commit-install: setup-lint
@echo "Installing pre-commit hooks..."
$(VENV_PRECOMMIT) install
@echo "Pre-commit hooks installed"
# Run pre-commit hooks
pre-commit-run: setup-lint
@echo "Running pre-commit hooks..."
$(VENV_PRECOMMIT) run --all-files
@echo "Pre-commit hooks execution completed"
# Run linting checks for CI (check only, no modifications)
lint-ci: setup-lint
@echo "Running linting checks for CI (check only)..."
@echo "Ruff version: $$($(VENV_DIR)/bin/ruff --version)"
@echo "Current directory: $$(pwd)"
@echo "Python version: $$($(VENV_DIR)/bin/python --version)"
$(VENV_DIR)/bin/ruff check --ignore I001 $(SRC_DIRS)
$(VENV_DIR)/bin/ruff format --check $(SRC_DIRS)
@echo "Linting checks completed"
#--------------------------------------------------------------
# Testing
#--------------------------------------------------------------
# Run all tests
test: venv
@echo "Running tests..."
$(VENV_PYTHON) -m pytest tests/ --durations=10
# Run unit tests only
test-unit: venv
@echo "Running unit tests..."
$(VENV_PYTHON) -m pytest tests/unit/ --durations=10
# Run E2E tests only
test-e2e: venv
@echo "Running E2E tests..."
E2E_TEST_MODE=true $(VENV_PYTHON) -m pytest tests/e2e/ --durations=10
# Run tests for staged files only
test-staged: venv
@echo "Running tests for staged files..."
$(VENV_DIR)/bin/python .pre-commit-hooks/run_staged_tests.py
#--------------------------------------------------------------
# Cleanup
#--------------------------------------------------------------
# Clean up generated files
clean:
@echo "Removing generated files..."
rm -rf $(VENV_DIR)
rm -rf $(DATA_DIRS)
rm -rf $(CACHE_DIRS)
@echo "Cleanup completed"
requirements:
pip-compile -v requirements.in > requirements.txt