You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: RELEASING.md
+26-17Lines changed: 26 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,16 +1,16 @@
1
1
# Releasing
2
2
3
-
Manual release flow for claude-code-chat-browser. A release is an annotated git tag plus a GitHub Release with notes. No CI publish workflow, and no wheel, npm package, or other artifact.
3
+
Manual release flow for claude-code-chat-browser. A release is a git tag plus a GitHub Release with notes. No CI publish workflow, and no wheel, npm package, or other artifact.
4
4
5
-
`v0.1.0` (2026-06-18) is the only shipped tag so far. `v0.2.0` is in progress; these steps describe that cut.
5
+
`v0.1.0` (2026-06-18) and `v0.2.0` (2026-07-30) are the shipped tags so far. The steps below apply to the next cut.
6
6
7
7
## Version source
8
8
9
9
The release version is `__version__` in `app.py` line 3. There is no `pyproject.toml` version field.
10
10
11
-
`SECURITY.md` line 5 names the version again in the supported-versions blurb (`(currently \`...\`)`). Keep it in sync with`app.py` on every release. `README.md` links to that page for supported versions.
11
+
`SECURITY.md` line 5 repeats that version in the supported-versions blurb. Update it whenever you bump`app.py`. `README.md`points readers at that page.
12
12
13
-
Between tagged releases, `master` may use a `.dev0` suffix (for example `0.2.0.dev0` while `0.2.0` was in development). The shipped tag drops `.dev0`.
13
+
Between tagged releases, `master` may use a `.dev0` suffix (for example `0.3.0.dev0` while the next release is in flight). The shipped tag drops `.dev0`.
14
14
15
15
## Pre-release checklist
16
16
@@ -20,54 +20,63 @@ Between tagged releases, `master` may use a `.dev0` suffix (for example `0.2.0.d
20
20
21
21
## Release checklist
22
22
23
-
Do the changelog in one PR and the version bump in a second PR, or combine them on a `release/vX.Y.Z` branch. The`v0.2.0`cut used two PRs: changelog first (`docs/changelog-0-2-0`), then the bump (`release/v0.2.0`).
23
+
Do the changelog in one PR and the version bump in a second PR, or combine them on a `release/vX.Y.Z` branch. For`v0.2.0`we used two PRs: changelog first (`docs/changelog-0-2-0`), then the bump (`release/v0.2.0`).
24
24
25
25
1. Edit [CHANGELOG.md](CHANGELOG.md) ([Keep a Changelog](https://keepachangelog.com/en/1.1.0/)):
26
26
- Move everything under `## [Unreleased]` into a new `## [X.Y.Z] - YYYY-MM-DD` section with `### Added`, `### Changed`, `### Deprecated`, `### Fixed`, `### Removed`, or `### Security` as needed.
2. On a branch from current `master`, set `app.py` line 3 to the release version without `.dev0` (for example `"0.2.0"`).
30
-
3. Update [SECURITY.md](SECURITY.md) line 5 so `(currently \`...\`)`matches that version (for example `(currently \`0.2.0\`)`). Leave the table at lines 7-10 unchanged.
31
-
4. From the repo root, grep for stale version strings (the previous `.dev0`suffix, the old `SECURITY.md` parenthetical, or any other doc that still names the prior release):
30
+
3. Update [SECURITY.md](SECURITY.md) line 5 so the "(currently ...)" parenthetical matches that version (for example `(currently 0.2.0)`). Leave the table at lines 7-10 unchanged.
31
+
4. From the repo root, grep for stale version strings (`.dev0`suffixes, the old SECURITY.md parenthetical, or the previous shipped release):
32
32
```sh
33
-
git grep -nE '\.dev0|\(currently `'
33
+
PREVIOUS=0.2.0
34
+
PREVIOUS_ESC=$(echo "$PREVIOUS"| sed 's/[.]/\\&/g')
Update any hits that should name the new release (for example `docs/deprecation-policy.md`).
37
+
Point `PREVIOUS` at the release you are replacing (no `v` prefix). Fix any hits that should name the new version (for example `docs/deprecation-policy.md`).
36
38
5. Open a PR, get review, merge to `master`.
37
-
6. Tag the merge commit:
39
+
6. Tag the merge commit (lightweight tag, same as `v0.1.0` and `v0.2.0`):
38
40
```sh
39
41
git checkout master
40
42
git pull
41
-
git tag -a vX.Y.Z -m "vX.Y.Z"
43
+
git tag vX.Y.Z
42
44
git push origin vX.Y.Z
43
45
```
44
46
Tag format: `vMAJOR.MINOR.PATCH` (for example `v0.2.0`).
45
-
7.Cut the GitHub Release after the tag. From the repo root, extract the body from `CHANGELOG.md`:
47
+
7.Publish the GitHub Release after pushing the tag. From the repo root, extract the body from `CHANGELOG.md`:
46
48
```sh
47
49
cd"$(git rev-parse --show-toplevel)"
48
50
VERSION=0.2.0 # no leading v; not the literal X.Y.Z placeholder
49
51
VERSION="${VERSION#v}"
50
52
case"$VERSION"in
51
-
*[!0-9.]*|*.*.*.*|'') echo"error: VERSION must look like 0.2.0">&2;exit 1 ;;
53
+
*[!0-9.]*|'') echo"error: VERSION must look like 0.2.0">&2;exit 1 ;;
54
+
*..*|.*|*.) echo"error: VERSION must look like 0.2.0">&2;exit 1 ;;
55
+
*.*.*.*) echo"error: VERSION must look like 0.2.0">&2;exit 1 ;;
56
+
*.*.*) ;;
57
+
*) echo"error: VERSION must look like 0.2.0">&2;exit 1 ;;
52
58
esac
53
59
NOTES="$(mktemp)"
54
60
trap'rm -f "$NOTES"' EXIT
55
61
awk -v ver="$VERSION"'
62
+
BEGIN { heading = "## [" ver "]" }
56
63
/^## \[/ {
57
64
if (found) exit
58
-
if ($0 ~ "^## \\[" ver "\\]") { found=1; next }
65
+
if (index($0, heading) == 1) { found=1 }
59
66
}
60
67
/^\[[^]]+\]:/ { if (found) exit }
61
68
found { print }
62
69
' CHANGELOG.md >"$NOTES"
63
-
[ -s"$NOTES" ]|| { echo"error: no CHANGELOG.md section for $VERSION">&2;exit 1; }
70
+
grep -q '[^[:space:]]'"$NOTES"|| { echo"error: no CHANGELOG.md section for $VERSION">&2;exit 1; }
On macOS, Linux, and Git Bash, `mktemp` works. Or paste the `[X.Y.Z]` section in the GitHub UI and add the same footer link.
67
76
68
77
## After release
69
78
70
-
1. On `master`, bump `app.py``__version__` to the next development suffix if you are starting the next cycle (for example `0.3.0.dev0` after shipping `0.2.0`). Put that commit in `CHANGELOG.md` under `[Unreleased]` only when there is user-visible work; a bare dev bump can ride with the next feature PR.
79
+
1. On `master`, bump `app.py``__version__` to the next development suffix when you start the next cycle (for example `0.3.0.dev0` after shipping `0.2.0`). Put that commit in `CHANGELOG.md` under `[Unreleased]` only when there is user-visible work; a bare dev bump can ride with the next feature PR.
71
80
2. New work goes under `## [Unreleased]` until the next release.
0 commit comments