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) must pass
merge blocked until green
↓
merge to main (merge commit)
↓
versioning.yml fires on push to main:
→ cz bump → tag vX.Y.Z → dispatch release.yml
↓
release.yml (on tag / dispatch):
→ GitHub release (wheel + sdist attached)
→ PyPI via OIDC trusted publishing (if enable_pypi_publishing)
→ Zenodo webhook (if enabled)
PyPI setup (one-time per repo)
Only if you answered enable_pypi_publishing: true (otherwise release.yml
makes the GitHub/Forgejo release but skips the publish step). 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 (optional)
Generated projects ship a stepper that creates the repo, points you through
installing the release-bot App, and installs a main-protected ruleset
(require PR + review + the CI check, block force-push/deletion):
bash scripts/setup_repo.sh # guided: create → App → protect
# or just the ruleset on an existing repo:
bash scripts/setup_branch_protection.sh
versioning.yml is adaptive: with the App configured (CI_BOT_APP_ID
variable + CI_BOT_PRIVATE_KEY secret) it pushes the bump as that App — a
ruleset bypass actor — so protection and auto-release coexist; without it, it
falls back to github-actions[bot] on an unprotected main. The generated
docs/repository-setup.md covers the App, its permissions, and the secrets.
Docs
uv run mkdocs serve
mkdocs.yml + the docs extra are always generated (build locally as above).
Deploy to GitHub Pages on push to main via docs.yml is added only when
enable_docs_publishing: true.
Optional workflows (copier answers)
Three publish/automation extras are off by default; enable per project:
enable_pypi_publishing— PyPI publish step inrelease.yml(+ OIDCid-token).enable_docs_publishing— the GitHub Pages / Forgejodocs.ymldeploy workflow.enable_llm_pr_review— the optional LLM PR-review workflow (pr-review.yml).
When off, the corresponding workflow file is not generated at all (no "not configured" placeholder checks).
Metadata
Release files for templatepy 0.15.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| templatepy-0.15.0.tar.gz | 21.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| templatepy-0.15.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 56.9 kB
Release files / templatepy-0.15.0.tar.gz
| Download URL | templatepy-0.15.0.tar.gz |
|---|---|
| Size | 21.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9a03f77ffdfcd5175ce22586a19e12160cca3d446e4d7220ec20e2ce19d05769
|
|
BLAKE2b-256 checksum How to use checksums |
d79640e64e68bf87a21e0b3f221b76c5de6b28104bbe428e0ee3252709a564c3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","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}
|
Release files / templatepy-0.15.0-py3-none-any.whl
| Download URL | templatepy-0.15.0-py3-none-any.whl |
|---|---|
| Size | 35.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f2af3dd354c6b5da8ce0bb0a722212e9c6b5e8bdfd6d5823af3b33b3c4b70ebf
|
|
BLAKE2b-256 checksum How to use checksums |
d26fd639b8cb2bc2ae521e678ec2d57daab87f5e59d21d4d3b1706136c8e0fea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","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}
|