@@ -56,8 +56,8 @@ There is a CI check that ensures Git state is clean, i.e., code generation has b
56565757#### Docs
585859-Set up a Python environment that has `docs/requirements.txt` installed via `pip`.
60-Use a [venv](https://docs.python.org/3/library/venv.html) to avoid global state.
59+Install [uv](https://docs.astral.sh/uv/getting-started/installation/), then run `make docs`.
60+uv automatically manages Python and dependencies.
61616262### Testing
6363@@ -90,17 +90,28 @@ There is a git tag for each zrepl release, usually `vMAJOR.MINOR.0`.
9090We don't move git tags once the release has been published.
91919292The procedure to issue a release is as follows:
93-* Issue the source release:
94-* Git tag the release on the `master` branch.
93+94+* Prepare the release (as a PR to `master`):
95+* Finalize `docs/changelog.rst` for the release.
96+* Merge the PR. Docs are auto-published to zrepl.github.io on merge.
97+* Tag the release:
98+* Git tag the release on the `master` branch (e.g., `vMAJOR.MINOR.0`).
9599* Push the tag.
96-* Run `./docs/publish.sh` to re-build & push zrepl.github.io.
97-* Issue the official binary release:
98-* Run the `release` pipeline (triggered via CircleCI API)
99-* Download the artifacts to the release manager's machine.
100-* Create a GitHub release, edit the changelog, upload all the release artifacts, including .rpm and .deb files.
101-* Issue the GitHub release.
100+* Build and publish:
101+* Run the `release` pipeline (trigger via CircleCI UI).
102+* Download artifacts: `make download-circleci-release BUILD_NUM=<circleci-build-number>`
103+* Create GitHub release and upload artifacts:
104+```bash
105+ gh release create vX.Y.Z --title "vX.Y.Z" --notes "See changelog" --draft
106+ gh release upload vX.Y.Z artifacts/release/*
107+ ```
108+* Review the draft release, edit the changelog, then publish.
102109* Add the .rpm and .deb files to the official zrepl repos.
103110* Code for management of these repos: https://github.com/zrepl/package-repo-ops (private repo at this time)
111+* Update docs version list:
112+* Update `docs/_templates/versions.html` with the new release.
113+* Verify the link to `zrepl-noarch.tar` in the GitHub release works.
114+* Merge to `master` (docs auto-publish).
104115105116#### Patch releases, Go toolchain updates, APT/RPM Package rebuilds
106117@@ -161,6 +172,17 @@ Update the CI configuration `.circleci/config.yml`:
161172- Update Go version references (we reference the minimum and max supported version)
162173- Set `Makefile` `RELEASE_GOVERSION` to the new Go version
163174175+Update docs build tooling:
176+- Update `uv` version in `.circleci/config.yml` (search for `astral.sh/uv/` and cache keys containing the version)
177+- Check if there's now a CircleCI orb for uv that we could use
178+- Update Python version in `docs/.python-version`
179+180+Update docs dependencies (Sphinx, sphinx-rtd-theme):
181+- Check current versions in `docs/pyproject.toml`
182+- Review upstream changelogs for breaking changes
183+- Update version constraints in `pyproject.toml` and the `uv` lockfile (see [uv docs on dependencies](https://docs.astral.sh/uv/concepts/projects/dependencies/)):
184+- Test locally with `make docs`
185+164186Kick a full CI pipeline run (`do_ci=true` and `do_release=true`).
165187166188Merge PR with merge commit.