GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com โ€” GitHub - liblaf/copier-python: ๐Ÿ Copier template for Python packages with uv, nox, MkDocs, typed src layout, and PyPI release automation

BranchesTags
Open more actions menu

Latest commit

 

History

470 Commits
470 Commits

Folders and files

NameName
Last commit message
Last commit date
.config
.config
 
 
.github/workflows
.github/workflows
 
 
.vscode
.vscode
 
 
docs
docs
 
 
mise-tasks
mise-tasks
 
 
template
template
 
 
.gitignore
.gitignore
 
 
.pre-commit-config.yaml
.pre-commit-config.yaml
 
 
CHANGELOG.md
CHANGELOG.md
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
copier.yaml
copier.yaml
 
 
pyproject.toml
pyproject.toml
 
 

Repository files navigation

Copier Python

Explore the template files ยป

Made with Copier MegaLinter Release PR Copier Update

Changelog ยท Template Files ยท Report Bug ยท Request Feature

Rule

๐Ÿ What Is copier-python?

copier-python is the Python layer in the liblaf Copier stack. It turns the shared repository and release foundations into a typed Python package with source layout, docs, tests, benchmarks, generated reference pages, and PyPI publishing through GitHub OIDC.

Important

Apply gh:liblaf/copier-shared, then gh:liblaf/copier-release, then this template. The Python layer reads shared answers from .config/copier/.copier-answers.shared.yaml.

The generated files live under template/. The README that generated projects receive is template/README.md.jinja.

โœจ What You Get

  • ๐Ÿ“ฆ PEP 621 package metadata, Hatchling builds, Hatch VCS versioning, and a src/ layout with py.typed.
  • ๐Ÿงฐ uv dependency groups for build, docs, lint, nox, and tests.
  • ๐Ÿงช A noxfile.py that discovers supported Python versions and runs highest plus lowest-direct dependency resolutions.
  • ๐Ÿ“š Zensical, MkDocs Material, mkdocstrings, Read the Docs, and generated API reference pages.
  • ๐Ÿ“ˆ GitHub Actions for tests, coverage, benchmark sessions, docs deployment, and Python release publishing.
  • ๐Ÿ” Copier answer files and update workflows that let generated repositories keep the stack refreshed.

๐Ÿš€ Apply The Template

After applying the shared and release layers, add the Python layer:

copier copy --trust gh:liblaf/copier-python .

To refresh an existing generated repository:

copier recopy --trust --answers-file '.config/copier/.copier-answers.python.yaml'

๐Ÿงฑ Template Stack

  • ๐Ÿงฐ gh:liblaf/copier-shared: repository hygiene, shared automation, editor settings, and project metadata.
  • ๐Ÿท๏ธ gh:liblaf/copier-release: release PRs, changelog generation, tags, GitHub Releases, and publish orchestration.
  • ๐Ÿ gh:liblaf/copier-python: Python packaging, docs, tests, benchmarks, and PyPI workflow wiring.

๐Ÿšข Release Workflow

In a generated project, the default release flow is:

  1. Push commits using Conventional Commits.
  2. release-pr.yaml opens a release PR with the changelog and next version.
  3. Merge the release PR, or approve it and let mergery[bot] merge it when checks pass.
  4. release-publish.yaml creates the tag and publishes the GitHub Release from the merged release PR.
  5. The published GitHub Release triggers python-release.yaml, which builds the package, publishes to PyPI with OIDC, and uploads distributions as release assets.

This flow assumes immutable GitHub Releases are disabled for generated repositories, so release assets can be attached after the release is published.

๐Ÿ› ๏ธ Post Setup

๐Ÿ“š Read the Docs

Import the generated repository at https://app.readthedocs.org/dashboard/import/ and keep stable as the default version. The generated template/.readthedocs.yaml installs with uv, builds with zensical build, and publishes the generated site/ directory.

๐Ÿ“ฆ PyPI Trusted Publishing

Create a trusted publisher at https://pypi.org/manage/account/publishing/ for the generated repository and point it at .github/workflows/python-release.yaml. The workflow uses GitHub OIDC, so it does not need a long-lived PyPI API token.

๐Ÿค Contributing

Edit files under template/ for generated output, and edit mise-tasks/ for helper behavior used by generated projects. Keep commit messages in Conventional Commit format so the release stack can produce clean changelogs.

PR Welcome

Contributors

๐Ÿ”— More Copier Templates

  • Shared - โœจ Automated code quality, repository hygiene, and project-wide defaults for the rest of the template stack.
  • Release - ๐Ÿš€ Release PRs, changelog generation, tags, GitHub Releases, and publishing automation.
  • Python - ๐Ÿ Python packaging, docs, tests, benchmarks, and PyPI workflow wiring.
  • Rust - ๐Ÿฆ€ Rust project template with modern tooling and CI/CD.
  • TypeScript - ๐Ÿš€ TypeScript project template with modern runtime, tooling, and release automation.

๐Ÿ“ License

Copyright ยฉ 2024 liblaf.
This project is MIT licensed.

About

๐Ÿ Copier template for Python packages with uv, nox, MkDocs, typed src layout, and PyPI release automation

Topics

automationcode-qualitycontinuous-integrationcopiercopier-templategithub-actionsjinjamkdocs-materialnoxproject-templatepypipythonpython-packagingpython-templaterelease-automationtyped-pythonuv

Resources

Readme
MIT license

Code of conduct

Code of conduct

Contributing

Contributing

Security policy

Security policy
Activity

Stars

5 stars

Watchers

1 watching

Forks

0 forks
Report repository

Releases

Used by

Contributors

Languages

You are visitor 01402503 โ€” GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800ร—600. No cookies required.