GitHub

@@ -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`.

9090

We don't move git tags once the release has been published.

91919292

The 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+164186

Kick a full CI pipeline run (`do_ci=true` and `do_release=true`).

165187166188

Merge PR with merge commit.

Read the original on github.com ↗