Files
webterm/Makefile
T
GitHub Copilot 8463b37e9e Fix theme support and improve tooling
- Fix ITheme property: selection -> selectionBackground (ghostty-web compat)
- Add dynamic body background color matching theme
- Add THEME_BACKGROUNDS mapping in local_server.py
- Add tsconfig.json for TypeScript type checking
- Update Makefile to use bun run for all frontend commands
- Add typecheck script to package.json (make build now typechecks)
- Add detailed console tracing for theme debugging
- Store fontFamily/fontSize in WebTerminal class for cell measurement

v0.6.5
2026-01-28 09:26:49 +00:00

123 lines
3.8 KiB
Makefile

.PHONY: help install install-dev lint format test coverage check clean clean-all build build-all bundle bundle-watch bundle-clean typecheck bump-patch
PYTHON ?= python3
PIP ?= $(PYTHON) -m pip
# Static assets
STATIC_JS_DIR = src/textual_webterm/static/js
TERMINAL_JS = $(STATIC_JS_DIR)/terminal.js
TERMINAL_TS = $(STATIC_JS_DIR)/terminal.ts
GHOSTTY_WASM = $(STATIC_JS_DIR)/ghostty-vt.wasm
help:
@echo "Build targets:"
@echo " build-all - Full reproducible build (clean + deps + bundle + install)"
@echo " build - Build frontend (typecheck + bundle)"
@echo " build-fast - Build frontend without typecheck"
@echo " bundle - Alias for build"
@echo " bundle-watch - Watch mode for development"
@echo " typecheck - Run TypeScript type checking"
@echo ""
@echo "Python targets:"
@echo " install - Install package in editable mode"
@echo " install-dev - Install with dev dependencies"
@echo " lint - Run ruff linter"
@echo " format - Format code with ruff"
@echo " test - Run pytest"
@echo " coverage - Run pytest with coverage"
@echo " check - Run lint + coverage"
@echo ""
@echo "Clean targets:"
@echo " clean - Remove Python cache files"
@echo " bundle-clean - Remove frontend build artifacts"
@echo " clean-all - Remove everything (clean + bundle-clean)"
# =============================================================================
# Full reproducible build
# =============================================================================
build-all: clean-all node_modules build install-dev check
@echo "Build complete!"
# =============================================================================
# Python targets
# =============================================================================
install:
$(PIP) install -e .
install-dev:
$(PIP) install -e .
$(PIP) install pytest pytest-asyncio pytest-cov pytest-timeout ruff
lint:
ruff check src tests
format:
ruff format src tests
test:
pytest
coverage:
pytest --cov=src/textual_webterm --cov-report=term-missing
check: lint coverage
# =============================================================================
# Frontend build targets (requires Bun: https://bun.sh)
# All frontend commands MUST go through bun run to ensure consistency
# =============================================================================
# Install node dependencies (creates bun.lock if missing)
node_modules: package.json
bun install
@touch node_modules
# TypeScript type checking
typecheck: node_modules
bun run typecheck
# Main build target - typecheck + bundle + copy WASM
build: node_modules
bun run build
# Fast build without typecheck (for rapid iteration)
build-fast: node_modules
bun run build:fast
@test -f $(GHOSTTY_WASM) || bun run copy-wasm
# Alias for build
bundle: build
# Watch mode for development
bundle-watch: node_modules
@test -f $(GHOSTTY_WASM) || bun run copy-wasm
bun run watch
# =============================================================================
# Clean targets
# =============================================================================
clean:
rm -rf .pytest_cache .coverage htmlcov .ruff_cache __pycache__ src/**/__pycache__
bundle-clean:
rm -rf node_modules bun.lock $(TERMINAL_JS) $(GHOSTTY_WASM)
clean-all: clean bundle-clean
# =============================================================================
# Version management
# =============================================================================
# Bump patch version (e.g., 0.5.3 -> 0.5.4)
bump-patch:
@OLD=$$(grep -Po '(?<=^version = ")[^"]+' pyproject.toml); \
MAJOR=$$(echo $$OLD | cut -d. -f1); \
MINOR=$$(echo $$OLD | cut -d. -f2); \
PATCH=$$(echo $$OLD | cut -d. -f3); \
NEW="$$MAJOR.$$MINOR.$$((PATCH + 1))"; \
sed -i "s/^version = \"$$OLD\"/version = \"$$NEW\"/" pyproject.toml; \
echo "Bumped version: $$OLD -> $$NEW"