https://github.com/bobmatnyc/python-project-template
Copier template for Python projects with comprehensive modular Makefile (Ruff, pytest, release automation)
https://github.com/bobmatnyc/python-project-template
copier copier-template makefile project-template pytest python python-template ruff template
Last synced: 2 days ago
JSON representation
Copier template for Python projects with comprehensive modular Makefile (Ruff, pytest, release automation)
- Host: GitHub
- URL: https://github.com/bobmatnyc/python-project-template
- Owner: bobmatnyc
- Created: 2025-11-21T22:24:42.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2025-12-19T16:17:46.000Z (7 days ago)
- Last Synced: 2025-12-22T06:47:23.031Z (4 days ago)
- Topics: copier, copier-template, makefile, project-template, pytest, python, python-template, ruff, template
- Language: Makefile
- Size: 28.3 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Python Project Template
A comprehensive Copier-based template for Python projects with a modular, enterprise-grade Makefile system.
## Overview
This template generates Python projects with battle-tested build automation, derived from production codebases with 97+ Make targets and 1,200+ lines of proven automation.
### Key Features
- **Modular Makefile Architecture**: 5 specialized modules (common, quality, testing, deps, release)
- **Ruff-First Quality**: 10-200x faster linting than Black+Flake8+isort
- **Release Automation**: Semantic versioning with one-command publishing
- **Environment-Aware**: Automatic dev/staging/prod detection
- **Dependency Intelligence**: Poetry/uv integration with lockfile management
## Quick Start
### Prerequisites
```bash
# Install Copier
pip install copier
# or
pipx install copier
```
### Generate Project
```bash
# From GitHub (when published)
copier copy gh:YOUR_USERNAME/python-project-template my-project
# From local clone
copier copy /path/to/python-project-template my-project
# Follow interactive prompts
cd my-project
make help
```
### Template Questions
The template will ask:
- **project_name**: Human-readable name (e.g., "My Awesome Project")
- **project_slug**: URL/package name (auto-generated from name)
- **project_description**: One-line summary
- **python_version**: Minimum Python version (3.10-3.13)
- **use_testing**: Include pytest/coverage targets (default: yes)
- **use_release_automation**: Include version bumping/publishing (default: yes)
- **use_docker**: Include Docker targets (default: no)
- **github_username**: Your GitHub username/org
- **author_name**: Your full name
- **author_email**: Your email address
## Generated Structure
```
my-project/
├── Makefile # Main Makefile (includes modules)
├── .makefiles/
│ ├── common.mk # Variables, colors, helpers
│ ├── quality.mk # lint, format, type-check
│ ├── testing.mk # test, coverage, benchmarks
│ ├── deps.mk # install, sync, update deps
│ └── release.mk # version bumping, publishing
├── pyproject.toml # Python project config
├── README.md # Project README
├── .gitignore # Standard Python ignores
└── scripts/ # Project automation scripts
```
## Makefile Targets
### Development Workflow
```bash
make install # Install in development mode
make quality # Run all quality checks (lint + type-check)
make test # Run test suite with coverage
make lint-fix # Auto-fix linting issues
```
### Release Management
```bash
make patch # Bump patch version (0.1.0 -> 0.1.1)
make minor # Bump minor version (0.1.0 -> 0.2.0)
make major # Bump major version (0.1.0 -> 1.0.0)
make release # Full release: quality + test + build + publish
```
### Dependency Management
```bash
make deps-install # Install dependencies
make deps-update # Update dependencies
make deps-sync # Sync lockfile with pyproject.toml
```
## Customization
### Adding Custom Targets
Edit the generated `Makefile`:
```makefile
# At the bottom of Makefile
.PHONY: custom-task
custom-task: ## Run custom project task
@echo "Running custom automation"
./scripts/my_script.py
```
### Modifying Module Behavior
Edit `.makefiles/*.mk` files:
```makefile
# .makefiles/quality.mk
lint: ## Run linting (customized)
ruff check src/ tests/ --fix
mypy src/ --strict
```
### Updating Template
When the template receives updates:
```bash
cd my-project
copier update
```
Copier will:
- Fetch latest template changes
- Show diff of proposed changes
- Allow selective acceptance of updates
## Design Philosophy
### Modular Makefile Architecture
The template separates concerns into specialized modules:
1. **common.mk**: Shared variables, colors, utility functions
2. **quality.mk**: Code quality (linting, formatting, type-checking)
3. **testing.mk**: Test execution, coverage reporting, benchmarks
4. **deps.mk**: Dependency installation, updates, synchronization
5. **release.mk**: Version management, changelog, publishing
**Benefits**:
- **Maintainability**: Each module has single responsibility
- **Reusability**: Drop-in modules across projects
- **Extensibility**: Add new modules without touching existing ones
- **Clarity**: Find targets by category, not by searching 1,200 lines
### Ruff-First Quality Strategy
Traditional Python tooling:
- Black (formatter) + Flake8 (linter) + isort (imports) + pydocstyle
- **4 tools**, **4 config files**, **slow execution**
This template:
- Ruff (all-in-one)
- **1 tool**, **1 config section**, **10-200x faster**
### Environment-Aware Builds
The template detects environment automatically:
```makefile
# In common.mk
ENV ?= development
ifeq ($(ENV),production)
BUILD_FLAGS := --optimized --no-dev
else
BUILD_FLAGS := --dev
endif
```
Override with: `make build ENV=production`
## Advanced Features
### Parallel Test Execution
```bash
make test PYTEST_ARGS="-n auto" # Auto-detect CPU cores
make test PYTEST_ARGS="-n 4" # Use 4 workers
```
### Coverage Thresholds
```bash
make test # Fail if coverage < 85%
make test COVERAGE_MIN=90 # Custom threshold
```
### Release Workflows
```bash
# Automatic changelog generation
make changelog # Generate CHANGELOG.md
# Pre-release testing
make pre-release # quality + test + build (no publish)
# Full release pipeline
make release # Full workflow with publishing
```
## Examples
### Generate CLI Tool Project
```bash
copier copy gh:YOUR_USERNAME/python-project-template my-cli-tool
# Answer prompts:
# project_name: My CLI Tool
# project_slug: my-cli-tool
# python_version: 3.11
# use_testing: yes
# use_release_automation: yes
# use_docker: no
cd my-cli-tool
make install
make help
```
### Generate Library Project
```bash
copier copy gh:YOUR_USERNAME/python-project-template my-library
# After generation, add to Makefile:
.PHONY: docs
docs: ## Build documentation
sphinx-build docs/ docs/_build/
```
## Troubleshooting
### Copier Not Found
```bash
pip install --user copier
# or
pipx install copier
```
### Make Targets Not Working
Check that `.makefiles/*.mk` files are included:
```bash
ls -la .makefiles/
# Should show: common.mk, quality.mk, testing.mk, deps.mk, release.mk
```
### Python Version Mismatch
Update `pyproject.toml`:
```toml
[tool.poetry.dependencies]
python = "^3.11" # Change to your version
```
## Contributing
Improvements welcome! To contribute:
1. Fork this repository
2. Create feature branch: `git checkout -b feature/improvement`
3. Test with: `copier copy . /tmp/test-project`
4. Submit PR with description of changes
### Testing Template Changes
```bash
# Test template generation
copier copy . /tmp/test-generation
# Verify generated project
cd /tmp/test-generation
make help
make quality
make test
```
## License
MIT License - see LICENSE file for details.
## Credits
Based on production Makefiles from:
- **claude-mpm**: 1,205 lines, 97 targets
- Real-world Python projects with years of refinement
## Support
- **Issues**: [GitHub Issues](https://github.com/YOUR_USERNAME/python-project-template/issues)
- **Discussions**: [GitHub Discussions](https://github.com/YOUR_USERNAME/python-project-template/discussions)
- **Documentation**: See `TEMPLATE_README.md` for generated project docs