Cutting a release is a manual, multi-step process #32

Closed
opened 2026-10-17 01:34:20 +00:00 by agent-pi · 1 comment
Collaborator

Releasing xique today means hand-editing pyproject.toml, remembering to regenerate pylock.toml, writing a changelog by hand, tagging, and pushing — with nothing recording what changed between releases.

Wanted:

  • A just release <level> recipe that automates the mechanics: changelog assembly, version bump, lock/pylock.toml refresh, tag, and push.
  • The bump level (major/minor/patch) must always be stated explicitly — no default.
  • Release cutting stays a human step: the recipe pauses for the changelog to be edited before committing anything.
Releasing xique today means hand-editing `pyproject.toml`, remembering to regenerate `pylock.toml`, writing a changelog by hand, tagging, and pushing — with nothing recording what changed between releases. Wanted: - A `just release <level>` recipe that automates the mechanics: changelog assembly, version bump, lock/`pylock.toml` refresh, tag, and push. - The bump level (major/minor/patch) must always be stated explicitly — no default. - Release cutting stays a human step: the recipe pauses for the changelog to be edited before committing anything.
Author
Collaborator

Findings from recon:

  • yunjin's just release is the template: compute next version, prepend a changelog entry (editable bullets + auto commit list with forge links), pause for human edit, commit, bump-my-version (commits + tags + refreshes uv.lock/pylock.toml via its pre_commit_hooks), push branch and tag.
  • yunjin's version scheme is calver; xique stays major.minor.patch (0.x) for now.
  • xique has no tags yet, so the commit-list range must fall back to "everything" on the first release.
  • bump-my-version~=1.5.1 is the proven pin (yunjin).

Plan of attack:

  1. pyproject.toml: add bump-my-version~=1.5.1 to the dev group and a [tool.bumpversion] block — current_version = "0.1.0", parse/serialize major.minor.patch, commit/tag true, bare tag names ({new_version}, no v prefix, matching house tag style), message bump: version {current_version} → {new_version}, pre_commit_hooks refreshing uv sync, uv.lock, and pylock.toml, file rule for the pyproject.toml version line. Regenerate pylock.toml in the same commit (dev dep added).
  2. justfile: release level — level required, validated against major/minor/patch (no default). Computes the next version with a bump dry-run, builds the changelog entry from git log since the last tag (or all history when no tag exists), pauses for editing, commits the changelog, runs the real bump, pushes branch + tag. A --dry-runable design; nothing is cut until the human presses Enter.
  3. CHANGELOG.md: initial file with a header so the prepend pattern has an anchor.
  4. README: a Releases section documenting the recipe, the explicit-level rule, and that cutting releases is the operator's step.

Branch: feat/issue-32-release-justfile

Commits:

  • :construction_worker: ci: add bump-my-version and the release justfile
  • :memo: docs: document the release process in the README

PR: POST /repos/marvin8/xique/pulls (head feat/issue-32-release-justfile, base main, Closes #32).

Findings from recon: - yunjin's `just release` is the template: compute next version, prepend a changelog entry (editable bullets + auto commit list with forge links), pause for human edit, commit, `bump-my-version` (commits + tags + refreshes `uv.lock`/`pylock.toml` via its `pre_commit_hooks`), push branch and tag. - yunjin's version scheme is calver; xique stays `major.minor.patch` (0.x) for now. - xique has no tags yet, so the commit-list range must fall back to "everything" on the first release. - `bump-my-version~=1.5.1` is the proven pin (yunjin). Plan of attack: 1. `pyproject.toml`: add `bump-my-version~=1.5.1` to the dev group and a `[tool.bumpversion]` block — `current_version = "0.1.0"`, parse/serialize `major.minor.patch`, `commit`/`tag` true, bare tag names (`{new_version}`, no `v` prefix, matching house tag style), message `bump: version {current_version} → {new_version}`, `pre_commit_hooks` refreshing `uv sync`, `uv.lock`, and `pylock.toml`, file rule for the `pyproject.toml` version line. Regenerate `pylock.toml` in the same commit (dev dep added). 2. `justfile`: `release level` — level required, validated against major/minor/patch (no default). Computes the next version with a bump dry-run, builds the changelog entry from `git log` since the last tag (or all history when no tag exists), pauses for editing, commits the changelog, runs the real bump, pushes branch + tag. A `--dry-run`able design; nothing is cut until the human presses Enter. 3. `CHANGELOG.md`: initial file with a header so the prepend pattern has an anchor. 4. README: a Releases section documenting the recipe, the explicit-level rule, and that cutting releases is the operator's step. Branch: `feat/issue-32-release-justfile` Commits: - `:construction_worker: ci: add bump-my-version and the release justfile` - `:memo: docs: document the release process in the README` PR: `POST /repos/marvin8/xique/pulls` (head `feat/issue-32-release-justfile`, base `main`, `Closes #32`).
Sign in to join this conversation.
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
marvin8/xique#32
No description provided.