-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathMakefile
More file actions
98 lines (84 loc) · 3.4 KB
/
Copy pathMakefile
File metadata and controls
98 lines (84 loc) · 3.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# plann Makefile
.PHONY: help install dev test lint clean install-completion install-completion-user install-completion-system uninstall
PYTHON ?= python3
VENV = venv
COMPLETION_DIR_USER = $(HOME)/.local/share/bash-completion/completions
COMPLETION_DIR_SYSTEM = /usr/share/bash-completion/completions
help:
@echo "plann - Command-line interface to calendars"
@echo ""
@echo "Installation:"
@echo " sudo make install Install system-wide"
@echo " make install Install for current user"
@echo " make uninstall Uninstall plann"
@echo ""
@echo "Development:"
@echo " make dev Install in development mode"
@echo " make test Run tests"
@echo " make lint Run linter"
@echo " make clean Clean build artifacts"
@echo ""
@echo "Shell Completion:"
@echo " make install-completion Enable tab completion (user-local)"
@echo " sudo make install-completion-system Enable tab completion (system-wide)"
# Create virtual environment
venv:
@if [ ! -d "$(VENV)" ]; then \
echo "Creating virtual environment..."; \
$(PYTHON) -m venv $(VENV); \
$(VENV)/bin/pip install --upgrade pip; \
fi
# Install package: auto-detects root, uv, pipx, or falls back to pip --user
install:
@if [ "$$(id -u)" = "0" ]; then \
echo "Installing plann system-wide..."; \
pip install .; \
elif command -v uv >/dev/null 2>&1; then \
echo "Installing with uv..."; \
uv tool install .; \
elif command -v pipx >/dev/null 2>&1; then \
echo "Installing with pipx..."; \
pipx install .; \
else \
echo "Tip: install uv or pipx for isolated installs (pacman -S uv, apt install pipx)"; \
PIP_BREAK_SYSTEM_PACKAGES=1 pip install --user .; \
fi
# Uninstall plann
uninstall:
@if [ "$$(id -u)" = "0" ]; then \
pip uninstall --break-system-packages -y plann; \
else \
pip uninstall -y plann; \
fi
# Install in development mode
dev:
@echo "Installing in development mode..."
@PIP_BREAK_SYSTEM_PACKAGES=1 pip install -e ".[dev]"
@echo ""
@echo "Installed! Run: plann --help"
# Run tests
test:
@python -m pytest tests/ -v
# Run linter
lint:
@python -m ruff check .
# Clean build artifacts
clean:
@rm -rf $(VENV) build dist *.egg-info .pytest_cache .ruff_cache
@find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
@find . -type f -name "*.pyc" -delete 2>/dev/null || true
# =============================================================================
# Shell Tab Completion (click-based)
# =============================================================================
install-completion: install-completion-user
install-completion-user:
@echo "Installing shell completion for current user..."
@mkdir -p "$(COMPLETION_DIR_USER)"
@_PLANN_COMPLETE=bash_source plann > "$(COMPLETION_DIR_USER)/plann" 2>/dev/null || \
python -c "import click; from plann.cli import cli; print(click.shell_completion.get_completion_class('bash')(cli, {}, 'plann', '_PLANN_COMPLETE').source())" > "$(COMPLETION_DIR_USER)/plann"
@echo "Completion script installed to $(COMPLETION_DIR_USER)/plann"
@echo "Restart your shell or run: source $(COMPLETION_DIR_USER)/plann"
install-completion-system:
@echo "Installing shell completion system-wide..."
@_PLANN_COMPLETE=bash_source plann > "$(COMPLETION_DIR_SYSTEM)/plann"
@echo "Completion script installed to $(COMPLETION_DIR_SYSTEM)/plann"