11# Updating This Template
22
3- This doc covers the full process for keeping the
3+ This doc covers the full cycle for keeping the
44[ simple-modern-uv] ( https://github.com/jlevy/simple-modern-uv ) template's dependencies
5- and tools up to date, then propagating those changes to downstream projects .
5+ and tools up to date, then verifying the changes end-to-end .
66
77There are two repos involved:
88
99- ** Template repo** (` jlevy/simple-modern-uv ` ): The Copier template source. All version
10- changes start here.
10+ changes start here. This repo does not have CI, so testing is done via a downstream
11+ project.
1112- ** Downstream project(s)** : Projects created from the template (e.g.
1213 [ ` jlevy/simple-modern-uv-template ` ] ( https://github.com/jlevy/simple-modern-uv-template ) ).
13- These pull updates via ` copier update ` .
14+ These pull updates via ` copier update ` and have CI configured to run linting and tests
15+ across the Python version matrix.
1416
1517## Step 1: Check Latest Versions
1618
17- From the template repo, check what's current:
19+ From the template repo, check what's current on PyPI :
1820
1921``` shell
20- # Check latest versions of each dev dependency on PyPI :
22+ # Check latest versions of each dev dependency:
2123for pkg in ruff basedpyright pytest pytest-sugar codespell rich funlog; do
2224 echo " $pkg : $( curl -s https://pypi.org/pypi/$pkg /json | python3 -c " import sys,json; print(json.load(sys.stdin)['info']['version'])" ) "
2325done
@@ -71,9 +73,9 @@ copier update --defaults
7173git stash pop
7274```
7375
74- ## Step 5: Verify Downstream
76+ ## Step 5: Verify Locally
7577
76- After the copier update, confirm everything works:
78+ After the copier update, confirm everything works locally :
7779
7880``` shell
7981uv sync --upgrade
@@ -84,11 +86,38 @@ uv build
8486
8587## Step 6: Push Downstream and Confirm CI
8688
89+ Commit and push the downstream project:
90+
8791``` shell
8892git add -A
8993git commit -m " Update from simple-modern-uv template vX.Y.Z."
9094git push origin main
9195```
9296
93- Then check that CI passes on GitHub. If there are failures, fix them, and iterate from
94- Step 2.
97+ Then check that ** CI passes on GitHub** — this runs the full lint and test suite across
98+ all Python versions in the matrix (e.g. 3.11, 3.12, 3.13, 3.14) on the stub test file
99+ and template code. This is the real end-to-end validation that the template works.
100+
101+ If CI fails, fix issues in the template repo and repeat from Step 2.
102+
103+ ## Step 7: Create a Release on the Template Repo
104+
105+ Once CI passes downstream, create a GitHub release on the template repo. The template
106+ repo doesn't have its own CI, so the downstream CI run serves as the verification.
107+
108+ ``` shell
109+ # From the template repo:
110+ gh release create v0.X.Y --title " v0.X.Y" --notes " $( cat << 'EOF '
111+ ## What's Changed
112+
113+ - **Updated dev dependencies**: ruff X.Y.Z, basedpyright X.Y.Z, etc.
114+ - **Updated uv** to X.Y.Z in CI workflows
115+ - Any other changes
116+
117+ **Full Changelog**: https://github.com/jlevy/simple-modern-uv/compare/vPREVIOUS...v0.X.Y
118+ EOF
119+ ) "
120+ ```
121+
122+ This makes the release visible to users and provides clear release notes on what was
123+ updated.
0 commit comments