Copier template for modern Python packages
Project description
templatepy
Copier template for modern Python packages.
Stack
| Tool | Role |
|---|---|
| uv | dependency management, virtual environments |
| hatchling + hatch-vcs | build backend; version from git tags |
| commitizen | Conventional Commits enforcement; auto bump on merge |
| ruff | linting + formatting |
| mypy | static type checking |
| pytest + pytest-cov | testing with coverage |
| gitleaks | secret scanning |
Quickstart
uv tool install copier
copier copy gh:larsrollik/templatepy my-new-project
cd my-new-project
git init && git add -A && git commit -m "chore: initial commit from templatepy"
uv sync --extra dev
uv run pre-commit install --hook-type pre-commit --hook-type commit-msg
Update existing project
cd my-existing-project && copier update
Release flow
feature branch → PR → CI gate (lint + test + secrets) must pass
merge blocked until green
↓
merge to main (rebase)
↓
bump.yml fires: cz bump → tag vX.Y.Z
↓
release.yml fires on tag:
→ GitHub release (wheel + sdist attached)
→ PyPI via OIDC trusted publishing (no stored token)
→ Zenodo webhook (if enabled)
PyPI setup (one-time per repo)
Uses OIDC trusted publishing — no API token stored in GitHub secrets.
- pypi.org → project → Settings → Publishing → Add trusted publisher
- Owner:
<github-user>, Repository:<repo>, Workflow:release.yml - Done — the workflow handles authentication automatically.
Branch protection (required for CI gate)
Repo settings → Branches → Add rule for main:
- ✅ Require status checks:
CIjob - ✅ Require branches to be up to date
- ✅ Require linear history
For the auto-bump workflow to push the bump commit back to main:
- ✅ Allow specified actors to bypass → add
github-actions[bot]
Docs
uv run mkdocs serve
Deploy to GitHub Pages on push to main via docs.yml (automatic).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file templatepy-0.5.0.tar.gz.
File metadata
- Download URL: templatepy-0.5.0.tar.gz
- Upload date:
- Size: 10.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e5f8d99c7b7e327320c370a0c9d1cccaf3f46d9fa6f30009008487d31bd7dfb0
|
|
| MD5 |
7227c17aabb9c266335b9124582314d8
|
|
| BLAKE2b-256 |
b22f34b566f354e7e5a5a366b9cddc41f5296540b577bf33a2e46c28c0e70aeb
|
File details
Details for the file templatepy-0.5.0-py3-none-any.whl.
File metadata
- Download URL: templatepy-0.5.0-py3-none-any.whl
- Upload date:
- Size: 17.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e351ae2d7c5aa2423d9466588b547380fbd121bddb1c055f5bced145f101ccc3
|
|
| MD5 |
29d7971a93e0f338bd9fc2557c7e9961
|
|
| BLAKE2b-256 |
7c171ce22a3294ee084396705cdc6ddad62f3b515b80324f1a6b9860f5f958f0
|