{"id":45836803,"url":"https://github.com/mgaitan/python-package-copier-template","last_synced_at":"2026-02-26T23:11:58.596Z","repository":{"id":308082693,"uuid":"1026872456","full_name":"mgaitan/python-package-copier-template","owner":"mgaitan","description":"Copier template for Python projects managed by uv.","archived":false,"fork":false,"pushed_at":"2025-12-14T16:01:49.000Z","size":933,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-15T15:49:56.552Z","etag":null,"topics":["boilerplate-template","cookiecutter-template","copier","copier-template","python","template-project"],"latest_commit_sha":null,"homepage":"","language":"Jinja","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"pawamoy/copier-uv","license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mgaitan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-26T19:48:36.000Z","updated_at":"2025-12-14T21:19:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mgaitan/python-package-copier-template","commit_stats":null,"previous_names":["mgaitan/copier-uv","mgaitan/python-package-copier-template"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mgaitan/python-package-copier-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgaitan%2Fpython-package-copier-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgaitan%2Fpython-package-copier-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgaitan%2Fpython-package-copier-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgaitan%2Fpython-package-copier-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mgaitan","download_url":"https://codeload.github.com/mgaitan/python-package-copier-template/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgaitan%2Fpython-package-copier-template/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29876415,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-26T22:37:10.609Z","status":"ssl_error","status_checked_at":"2026-02-26T22:37:09.019Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["boilerplate-template","cookiecutter-template","copier","copier-template","python","template-project"],"created_at":"2026-02-26T23:11:56.330Z","updated_at":"2026-02-26T23:11:58.587Z","avatar_url":"https://github.com/mgaitan.png","language":"Jinja","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Modern Python package template\n\n[![Copier](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/copier-org/copier/master/img/badge/badge-grayscale-inverted-border-purple.json)](https://github.com/copier-org/copier)\n[![CI](https://github.com/mgaitan/python-package-copier-template/actions/workflows/ci.yml/badge.svg)](https://github.com/mgaitan/python-package-copier-template/actions/workflows/ci.yml)\n[![Changelog](https://img.shields.io/github/v/release/mgaitan/python-package-copier-template)](https://github.com/mgaitan/python-package-copier-template/releases)\n\nA [Copier](https://github.com/copier-org/copier) template\nfor modern Python projects. \n\nDemo repo generated from this template: [mgaitan/yet-another-demo](https://github.com/mgaitan/yet-another-demo)\n\n## Features\n\n- 🐍 Modern Python package (3.12+)\n- 📦 Build and dependency management with [uv](https://docs.astral.sh/uv/), split by groups (dev/qa/docs)\n- 🧊 Dependency cooldowns enabled by default in `uv` (`[tool.uv].exclude-newer = \"1 week\"`), with targeted overrides when needed (for example `ty`) to reduce supply-chain risk without blocking QA tools\n- 🧹 Linting and formatting via [Ruff](https://docs.astral.sh/ruff/) with a broad set of rules enabled\n- ✅ Type checking via [ty](https://github.com/astral-sh/ty)\n- 🧪 Tests with [pytest](https://docs.pytest.org/en/stable/), [coverage.py](https://coverage.readthedocs.io/en/latest/) and extensions\n- 📚 Docs with [Sphinx](https://www.sphinx-doc.org/en/master/), [MyST](https://myst-parser.readthedocs.io/en/stable/) and a few extensions, deployed to [GitHub Pages](https://pages.github.com/)\n- 🏗️ Use of [GitHub CLI](https://cli.github.com/) for autotic project creation \n- ⚙️ CI workflow on [GitHub Actions](https://github.com/features/actions)\n- 🚀 Automated releases to PyPI via [Trusted Publishing](https://docs.pypi.org/trusted-publishers/creating-a-project-through-oidc/)\n- 🧠 Sensible defaults via introspection to minimize answers during the initial setup\n- 🛠️ Makefile with shortcuts for common tasks\n- 📄 Generation of generic docs such as `LICENSE`, `CODE_OF_CONDUCT`, etc.\n- 🤖 Heavily curated [AGENTS.md](https://agents.md/)\n- 🌀 Initial setup of the development environment and git repo\n- 🔁 Scheduled template refresh workflow that opens a PR every 20 days when updates are available\n- ♻️ Projects updatable with [`copier update`](https://copier.readthedocs.io/en/stable/updating/)\n\nPlease read [my blog post](https://mgaitan.github.io/en/posts/opinionated-python-project-scaffolding/) to learn about the details of the decisions I made and the alternatives I considered.\n\n## Quick setup and usage\n\nQuick shortcut (auto-detects copy vs update):\n\n```bash\nuvx git+https://github.com/mgaitan/python-package-copier-template [DESTINATION]\n```\n\nThis runs `copier copy --defaults --unsafe` to `DESTINATION` (or `.` if omitted) when no `.copier-answers.yml` is present, or `copier update --defaults --unsafe` when it is.\nCheck the installed version with `uvx git+https://github.com/mgaitan/python-package-copier-template -- --version`.\n\nStart a new project explicitly with Copier:\n\n```bash\nuvx --with=copier-template-extensions copier copy --trust \"gh:mgaitan/python-package-copier-template\" /path/to/your/new/project\n```\n\nTo upgrade an existing project created from this template to the latest version, run:\n\n```bash\nuvx --with=copier-template-extensions copier update . --trust \n```\n\nThis will fetch the latest template version and guide you through updating your project, preserving your customizations whenever possible.\n\nThe generated project also ships a `Template Update` GitHub Actions workflow that runs every 20 days (or on manual dispatch) to execute `uvx copier update --trust --defaults .` and open a pull request with the changes and template version bump.\n\nTo test a development version of the template, clone the repository and run:\n\n```bash\nuv sync\nuv run copier copy --trust  --vcs-ref=HEAD . /path/to/your/test/project\n```\n\nIf you create the GitHub repository via the `gh` CLI prompt, the template will attempt to enable GitHub Pages (using the Actions build type) so documentation deployments succeed. If Pages is unavailable (for example, with some private repositories or account policies), the docs workflow will keep failing until Pages is allowed.\n\n\nTo publish a release of your project to PyPI, you need to [register the project with trusted published](https://docs.pypi.org/trusted-publishers/creating-a-project-through-oidc/).  Read more about how this workflow works [here](https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/)\n\nThen\n\n```\n$ make bump    # optional\n$ make release\n```\n\n\n### Acknowledgement\n\nThis project template started as a fork of [pawamoy/copier-uv](https://github.com/pawamoy/copier-uv). Then I simplified and changed it to fit my needs.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgaitan%2Fpython-package-copier-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmgaitan%2Fpython-package-copier-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgaitan%2Fpython-package-copier-template/lists"}