Skip to content

Commit 54ff533

Browse files
JohnMcLearclaude
andcommitted
docs(agents): document the release procedure and docs publishing
Add a "Releasing" section to AGENTS.MD so maintainers have a single reference for cutting a release, instead of reverse-engineering it from bin/release.ts and the workflow files. Covers: - Prerequisites: the CHANGELOG `# X.Y.Z` guard, and the requirement that all four package.json files agree (release.ts reads the current version from src/package.json) — the desync that blocked the 3.3.0 release. - The one-dispatch flow: "Release etherpad" -> bin/release.ts -> tag push, and what the vX.Y.Z tag auto-triggers (handleRelease GitHub Release, docker, snap-publish), plus the separate manual npm publish dispatch. - Documentation: the two distinct kinds of doc work — per-PR doc/ updates in behaviour-change PRs, and the automated release-time versioned-docs publish into the ether.github.com sibling repo. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 665c848 commit 54ff533

1 file changed

Lines changed: 32 additions & 0 deletions

File tree

AGENTS.MD

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,38 @@ pnpm run plugins ls # List installed
211211
### Settings
212212
Configured via `settings.json`. A template is available at `settings.json.template`. Environment variables can override any setting using `"${ENV_VAR}"` or `"${ENV_VAR:default_value}"`.
213213

214+
## Releasing
215+
216+
Releases are driven almost entirely by GitHub Actions. A maintainer dispatches **one** workflow; the version bump, tagging, GitHub Release, Docker images, and snap all cascade off the pushed tag. The npm publish is a separate manual dispatch.
217+
218+
### Prerequisites (check these before dispatching)
219+
- **A `# X.Y.Z` changelog section for the _target_ version must already be at the top of `CHANGELOG.md`.** `bin/release.ts` aborts with `No changelog record for X.Y.Z, please create changelog record` if it's missing. Write the section before dispatching.
220+
- **All four `package.json` files must agree on the current version:** root `package.json`, `src/package.json`, `admin/package.json`, `bin/package.json`. `release.ts` reads the *current* version from **`src/package.json`** and computes the next with `semver.inc(current, type)`. If the files are out of sync (e.g. one was hand-edited), the computed target is wrong and the changelog guard fails. *(This exact desync — `src`/`bin` left at 3.3.0 while root/admin were 3.2.0 — blocked the 3.3.0 release in June 2026.)*
221+
222+
### Cutting a release
223+
1. **Actions → "Release etherpad"** → Run workflow (`workflow_dispatch`), choose `patch` / `minor` / `major`. Cadence is monthly **minors** (3.0.0 → 3.1.0 → 3.2.0 → …); use `major` only for breaking changes.
224+
2. The **Prepare release** step runs `bin/release.ts`, which:
225+
- sanity-checks the tree (clean working dir, on `develop`, `develop`/`master` upstreams in sync, `../ether.github.com` cloned & clean on `master`);
226+
- bumps the version in all four `package.json` files;
227+
- commits `bump version`, merges `develop``master`, creates both `X.Y.Z` **and** `vX.Y.Z` tags, merges `master` back to `develop`;
228+
- builds and stages the versioned docs into the website repo (see **Documentation** below).
229+
3. The **Push after release** step (`bin/push-after-release.sh`) pushes `master`, `develop`, the tag, `--tags`, and the `ether.github.com` docs commit.
230+
4. The pushed **`vX.Y.Z` tag auto-triggers** three workflows:
231+
- `handleRelease.yml` → builds Etherpad, extracts the matching changelog section via `generateChangelog` (`bin/generateReleaseNotes.ts`), and publishes the **GitHub Release** (`make_latest: true`);
232+
- `docker.yml` → builds & pushes the Docker images;
233+
- `snap-publish.yml` → publishes the snap.
234+
5. **npm publish is a separate manual step:** dispatch **"releaseEtherpad.yaml"** (`workflow_dispatch`), which runs `npm publish --provenance --access public` via npm **OIDC trusted publishing**. It is *not* fired by the tag.
235+
236+
### Documentation
237+
238+
Two distinct things, both important:
239+
240+
**1. Per-PR doc updates — your responsibility in every behaviour-change PR.**
241+
The `doc/` workspace holds the user/admin/API docs (Markdown + AsciiDoc). Whenever a PR changes API responses, CLI flags, settings keys, hooks, or error formats, update the relevant files in `doc/` **in the same PR** — don't defer it to release time. The HTTP API reference is `doc/api/http_api.{md,adoc}` (keep both in sync). Preview locally with `pnpm run makeDocs`.
242+
243+
**2. Release-time versioned docs publishing — automated, no manual step.**
244+
During a release, `release.ts` runs `pnpm run makeDocs` (→ `bin/make_docs.ts`) to render `doc/` into `out/doc/`, then copies it into the sibling website repo at `../ether.github.com/public/doc/vX.Y.Z`, bumps that repo's version, and commits `X.Y.Z docs`; `push-after-release.sh` pushes it, publishing the versioned docs on etherpad.org. This requires `ether.github.com` checked out as a **sibling directory** — the **Release etherpad** workflow checks it out automatically. If you ever run `release.ts` by hand, clone it first: `cd .. && git clone git@github.com:ether/ether.github.com.git`.
245+
214246
## Monorepo Structure
215247

216248
This project uses pnpm workspaces. The workspaces are:

0 commit comments

Comments
 (0)