# EternalKernel PyTorch Nodes - Makefile # # Comprehensive development and publishing automation # Author: Hopping Mad Games # License: AGPL-3.0 .PHONY: help clean install test lint format validate publish dev-setup check-deps update-deps security-check # Default target .DEFAULT_GOAL := help # Colors for output RED := \033[0;31m GREEN := \033[0;32m YELLOW := \033[0;33m BLUE := \033[0;34m PURPLE := \033[0;35m CYAN := \033[0;36m WHITE := \033[1;37m NC := \033[0m # No Color # Variables PYTHON := python3 PIP := pip3 PROJECT_NAME := pytorch-nodes VENV := venv TEST_DIR := tests SRC_DIR := . COMFY_TOKEN_FILE := .comfy_token help: ## Show this help message @echo "$(CYAN)EternalKernel PyTorch Nodes - Development Commands$(NC)" @echo "$(BLUE)=================================================$(NC)" @echo "" @echo "$(WHITE)Usage:$(NC) make [target]" @echo "" @echo "$(WHITE)Available targets:$(NC)" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " $(GREEN)%-20s$(NC) %s\n", $$1, $$2}' @echo "" @echo "$(WHITE)Examples:$(NC)" @echo " $(YELLOW)make dev-setup$(NC) - Set up development environment" @echo " $(YELLOW)make test$(NC) - Run all tests" @echo " $(YELLOW)make publish$(NC) - Publish to ComfyUI registry" @echo " $(YELLOW)make clean$(NC) - Clean build artifacts" @echo "" clean: ## Clean build artifacts and temporary files @echo "$(YELLOW)Cleaning build artifacts...$(NC)" @rm -rf build/ @rm -rf dist/ @rm -rf *.egg-info/ @rm -rf __pycache__/ @rm -rf .pytest_cache/ @rm -rf .coverage @rm -rf htmlcov/ @rm -rf .mypy_cache/ @rm -rf .ruff_cache/ @find . -type f -name "*.pyc" -delete @find . -type d -name "__pycache__" -delete @echo "$(GREEN)✓ Cleanup complete$(NC)" install: ## Install project dependencies @echo "$(YELLOW)Installing dependencies...$(NC)" @$(PIP) install -r requirements.txt @echo "$(GREEN)✓ Dependencies installed$(NC)" install-dev: ## Install development dependencies @echo "$(YELLOW)Installing development dependencies...$(NC)" @$(PIP) install -r requirements.txt @$(PIP) install pytest pytest-cov black isort flake8 mypy ruff @echo "$(GREEN)✓ Development dependencies installed$(NC)" venv: ## Create virtual environment @echo "$(YELLOW)Creating virtual environment...$(NC)" @$(PYTHON) -m venv $(VENV) @echo "$(GREEN)✓ Virtual environment created$(NC)" @echo "$(BLUE)Activate with: source $(VENV)/bin/activate$(NC)" dev-setup: venv install-dev ## Complete development environment setup @echo "$(YELLOW)Setting up development environment...$(NC)" @echo "$(GREEN)✓ Development environment ready$(NC)" @echo "$(BLUE)Next steps:$(NC)" @echo " 1. Activate venv: $(YELLOW)source $(VENV)/bin/activate$(NC)" @echo " 2. Run tests: $(YELLOW)make test$(NC)" @echo " 3. Start developing!" test: ## Run all tests @echo "$(YELLOW)Running tests...$(NC)" @if [ -d "$(TEST_DIR)" ]; then \ $(PYTHON) -m pytest $(TEST_DIR)/ -v; \ else \ echo "$(RED)No tests directory found. Creating basic test structure...$(NC)"; \ mkdir -p $(TEST_DIR); \ echo "# Test placeholder" > $(TEST_DIR)/test_placeholder.py; \ echo "$(BLUE)Tests directory created. Add your tests to $(TEST_DIR)/$(NC)"; \ fi test-cov: ## Run tests with coverage report @echo "$(YELLOW)Running tests with coverage...$(NC)" @$(PYTHON) -m pytest $(TEST_DIR)/ -v --cov=$(SRC_DIR) --cov-report=html --cov-report=term lint: ## Run linting checks @echo "$(YELLOW)Running linting checks...$(NC)" @echo "$(BLUE)Running flake8...$(NC)" @flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics || true @echo "$(BLUE)Running ruff...$(NC)" @ruff check . || true @echo "$(GREEN)✓ Linting complete$(NC)" format: ## Format code with black and isort @echo "$(YELLOW)Formatting code...$(NC)" @black . --line-length 88 @isort . --profile black @echo "$(GREEN)✓ Code formatted$(NC)" format-check: ## Check code formatting without making changes @echo "$(YELLOW)Checking code formatting...$(NC)" @black . --check --line-length 88 @isort . --profile black --check-only type-check: ## Run type checking with mypy @echo "$(YELLOW)Running type checks...$(NC)" @mypy . --ignore-missing-imports || true @echo "$(GREEN)✓ Type checking complete$(NC)" security-check: ## Run security checks @echo "$(YELLOW)Running security checks...$(NC)" @ruff check . --select=S || true @echo "$(GREEN)✓ Security check complete$(NC)" validate: ## Validate package for ComfyUI registry @echo "$(YELLOW)Validating package for ComfyUI registry...$(NC)" @comfy node validate @echo "$(GREEN)✓ Package validation complete$(NC)" check-deps: ## Check for outdated dependencies @echo "$(YELLOW)Checking for outdated dependencies...$(NC)" @$(PIP) list --outdated @echo "$(GREEN)✓ Dependency check complete$(NC)" update-deps: ## Update dependencies to latest versions @echo "$(YELLOW)Updating dependencies...$(NC)" @$(PIP) install --upgrade -r requirements.txt @echo "$(GREEN)✓ Dependencies updated$(NC)" build: ## Build package @echo "$(YELLOW)Building package...$(NC)" @$(PYTHON) -m build @echo "$(GREEN)✓ Package built$(NC)" publish-test: validate ## Publish to test registry (dry run) @echo "$(YELLOW)Running publish validation...$(NC)" @comfy node validate @echo "$(GREEN)✓ Ready for publishing$(NC)" @echo "$(BLUE)Run 'make publish' to publish to registry$(NC)" publish: validate ## Publish to ComfyUI registry @echo "$(YELLOW)Publishing to ComfyUI registry...$(NC)" @if [ -f "$(COMFY_TOKEN_FILE)" ]; then \ echo "$(BLUE)Using token from $(COMFY_TOKEN_FILE)$(NC)"; \ source $(COMFY_TOKEN_FILE) && comfy node publish --token $$COMFY_REGISTRY_TOKEN; \ elif [ -n "$$COMFY_REGISTRY_TOKEN" ]; then \ echo "$(BLUE)Using token from environment variable$(NC)"; \ comfy node publish --token $$COMFY_REGISTRY_TOKEN; \ else \ echo "$(RED)No API token found!$(NC)"; \ echo "$(YELLOW)Set COMFY_REGISTRY_TOKEN environment variable or create $(COMFY_TOKEN_FILE)$(NC)"; \ exit 1; \ fi @echo "$(GREEN)✓ Published successfully!$(NC)" version-bump: ## Bump version number (requires VERSION parameter) @if [ -z "$(VERSION)" ]; then \ echo "$(RED)Usage: make version-bump VERSION=1.0.1$(NC)"; \ exit 1; \ fi @echo "$(YELLOW)Bumping version to $(VERSION)...$(NC)" @sed -i 's/version = "[^"]*"/version = "$(VERSION)"/' pyproject.toml @echo "$(GREEN)✓ Version bumped to $(VERSION)$(NC)" git-tag: ## Create and push git tag (requires VERSION parameter) @if [ -z "$(VERSION)" ]; then \ echo "$(RED)Usage: make git-tag VERSION=v1.0.1$(NC)"; \ exit 1; \ fi @echo "$(YELLOW)Creating git tag $(VERSION)...$(NC)" @git tag -a $(VERSION) -m "Release $(VERSION)" @git push origin $(VERSION) @echo "$(GREEN)✓ Git tag $(VERSION) created and pushed$(NC)" release: ## Full release process (bump version, tag, publish) @if [ -z "$(VERSION)" ]; then \ echo "$(RED)Usage: make release VERSION=1.0.1$(NC)"; \ exit 1; \ fi @echo "$(CYAN)Starting release process for version $(VERSION)...$(NC)" @make version-bump VERSION=$(VERSION) @git add pyproject.toml @git commit -m "Bump version to $(VERSION)" @make git-tag VERSION=v$(VERSION) @git push origin main @make publish @echo "$(GREEN)✓ Release $(VERSION) complete!$(NC)" status: ## Show project status and info @echo "$(CYAN)EternalKernel PyTorch Nodes - Project Status$(NC)" @echo "$(BLUE)===========================================$(NC)" @echo "" @echo "$(WHITE)Project Info:$(NC)" @echo " Name: $(GREEN)EternalKernel PyTorch Nodes$(NC)" @echo " Version: $(GREEN)$(shell grep 'version =' pyproject.toml | cut -d'"' -f2)$(NC)" @echo " License: $(GREEN)AGPL-3.0$(NC)" @echo " Publisher: $(GREEN)hmg$(NC)" @echo "" @echo "$(WHITE)Git Status:$(NC)" @git status --short @echo "" @echo "$(WHITE)Dependencies:$(NC)" @echo " Python: $(GREEN)$(shell $(PYTHON) --version)$(NC)" @echo " Pip: $(GREEN)$(shell $(PIP) --version | cut -d' ' -f2)$(NC)" @echo " ComfyUI CLI: $(GREEN)$(shell comfy --version 2>/dev/null || echo 'Not installed')$(NC)" @echo "" @if [ -f "$(COMFY_TOKEN_FILE)" ]; then \ echo "$(WHITE)API Token:$(NC) $(GREEN)✓ Found in $(COMFY_TOKEN_FILE)$(NC)"; \ elif [ -n "$$COMFY_REGISTRY_TOKEN" ]; then \ echo "$(WHITE)API Token:$(NC) $(GREEN)✓ Found in environment$(NC)"; \ else \ echo "$(WHITE)API Token:$(NC) $(RED)✗ Not configured$(NC)"; \ fi docs: ## Generate documentation @echo "$(YELLOW)Generating documentation...$(NC)" @echo "$(BLUE)README.md exists: $(GREEN)✓$(NC)" @echo "$(BLUE)LICENSE exists: $(GREEN)✓$(NC)" @echo "$(GREEN)✓ Documentation is up to date$(NC)" all: clean install-dev test lint format validate ## Run full development workflow @echo "$(GREEN)✓ Full development workflow complete$(NC)" .PHONY: help clean install install-dev venv dev-setup test test-cov lint format format-check type-check security-check validate check-deps update-deps build publish-test publish version-bump git-tag release status docs all