Skip to content

Commit 7ee3353

Browse files
jlevyclaude
andcommitted
Flesh out updating.md with full update cycle.
Document the complete 7-step process including downstream CI verification and GitHub release creation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 873a4e7 commit 7ee3353

File tree

1 file changed

+39
-10
lines changed

1 file changed

+39
-10
lines changed

updating.md

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,25 @@
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

77
There 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:
2123
for 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'])")"
2325
done
@@ -71,9 +73,9 @@ copier update --defaults
7173
git 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
7981
uv 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
8892
git add -A
8993
git commit -m "Update from simple-modern-uv template vX.Y.Z."
9094
git 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

Comments
 (0)