strix/Makefile
itzzdev09 336d86af4b ci: type-check every supported platform, and fix what that surfaced
`make type-check` ran mypy for whichever platform the developer happened
to be on, and no workflow ran it at all, so nothing gated a merge on it.
The practical effect was that `sys.platform == "win32"` branches were
never type-checked by anyone, while a Windows contributor saw six errors
that did not exist for anyone else.

Add a workflow running mypy under --platform linux, darwin and win32.
All three run on Linux because --platform is what selects the branches
mypy resolves; three runner OSes would cost three times as much and each
would still check whatever platform it happened to be.

Making --platform win32 pass needed the two platform-specific spots to
resolve under every target:

- codex.py reached fcntl.flock directly, which does not exist on
  Windows. Resolve it once behind a `sys.platform != "win32"` guard,
  which mypy narrows under every --platform, with a no-op fallback.
  Behaviour is unchanged: the ImportError path it used to rely on only
  ever fired on Windows, which the guard now covers explicitly.
- session_manager.py reached os.getuid/os.getgid. Wrap the existing
  Linux check in a platform guard so the attributes resolve, keeping the
  indirection through a local that the original comment explains.

`# type: ignore[attr-defined]` was not an option: warn_unused_ignores
would then flag it on the platforms where the attribute does exist.

`make type-check` now runs the same three platforms as CI.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 13:25:49 +05:30

98 lines
3.2 KiB
Makefile

.PHONY: help install dev-install format lint type-check security check-all clean pre-commit setup-dev dev viewer wheel tui-build tui-test tui-lint
TUI_BINARY := build/sidecar/strix-tui$(if $(filter Windows_NT,$(OS)),.exe)
help:
@echo "Available commands:"
@echo " setup-dev - Install all development dependencies and setup pre-commit"
@echo " install - Install production dependencies"
@echo " dev-install - Install development dependencies"
@echo ""
@echo "Code Quality:"
@echo " format - Format code with ruff"
@echo " lint - Lint code with ruff"
@echo " type-check - Run type checking with mypy and pyright"
@echo " security - Run security checks with bandit"
@echo " check-all - Run all code quality checks"
@echo ""
@echo "Development:"
@echo " pre-commit - Run pre-commit hooks on all files"
@echo " viewer - Rebuild the local-viewer SPA (commit the output)"
@echo " wheel - Build a platform wheel with the bundled Go sidecar"
@echo " clean - Clean up cache files and artifacts"
@echo " tui-build - Build the Bubble Tea TUI"
@echo " tui-test - Test the Bubble Tea TUI"
@echo " tui-lint - Vet and format-check the Bubble Tea TUI"
install:
uv sync --no-dev
dev-install:
uv sync
setup-dev: dev-install
uv run pre-commit install
@echo "✅ Development environment setup complete!"
@echo "Run 'make check-all' to verify everything works correctly."
format:
@echo "🎨 Formatting code with ruff..."
uv run ruff format .
@echo "✅ Code formatting complete!"
lint:
@echo "🔍 Linting code with ruff..."
uv run ruff check . --fix
@echo "✅ Linting complete!"
type-check:
@echo "🔍 Type checking with mypy (linux, darwin, win32)..."
@for platform in linux darwin win32; do \
echo " → $$platform"; \
uv run mypy --platform $$platform strix/ || exit 1; \
done
@echo "🔍 Type checking with pyright..."
uv run pyright strix/
@echo "✅ Type checking complete!"
security:
@echo "🔒 Running security checks with bandit..."
uv run bandit -r strix/ -c pyproject.toml
@echo "✅ Security checks complete!"
check-all: format lint type-check security
@echo "✅ All code quality checks passed!"
pre-commit:
@echo "🔧 Running pre-commit hooks..."
uv run pre-commit run --all-files
@echo "✅ Pre-commit hooks complete!"
clean:
@echo "🧹 Cleaning up cache files..."
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
find . -type d -name ".mypy_cache" -exec rm -rf {} + 2>/dev/null || true
find . -type d -name ".ruff_cache" -exec rm -rf {} + 2>/dev/null || true
find . -name "*.pyc" -delete 2>/dev/null || true
@echo "✅ Cleanup complete!"
viewer:
@echo "🖥️ Building the local-viewer SPA..."
cd strix/interface/viewer/frontend && npm ci && npm run build
@echo "✅ Viewer built to strix/interface/viewer/static/ (commit the changes)."
wheel:
uv build --wheel
dev: format lint type-check
@echo "✅ Development cycle complete!"
tui-build:
mkdir -p build/sidecar
cd strix/interface/tui && CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o ../../../$(TUI_BINARY) ./cmd/strix-tui
tui-test:
cd strix/interface/tui && go test -race ./...
tui-lint:
cd strix/interface/tui && test -z "$$(gofmt -l .)" && go vet ./...