Add release-tag automation helper #50

Closed
opened 2026-07-02 03:13:32 -05:00 by jcwalker3 · 1 comment
Owner

Problem

#48 documented release/version tagging rules but deferred automation. A safe helper reduces manual mistakes when creating annotated release tags.

Goal

Add scripts/release-tag to automate the documented release checklist without bypassing safety gates.

Required behavior

  • Require a SemVer tag vMAJOR.MINOR.PATCH.
  • Fetch/prune first; then refuse: invalid version, dirty worktree, non-master branch, local master != remote master, HEAD not on remote master, or an existing local/remote tag of the same name.
  • Run the full suite by default (./venv/bin/python -m pytest tests/ -q); --skip-tests only with an explicit flag + clear warning.
  • Create an annotated tag (never lightweight).
  • Support --dry-run (no changes), --notes-file <path>, --push (no push unless given).
  • Print: current commit, tag name, tests-run?, tag-created?, tag-pushed?.

Tests

Valid/invalid SemVer; dirty worktree; non-master; master/remote mismatch; existing tag; dry-run creates nothing; annotated-not-lightweight; push only with --push; --skip-tests warns; --notes-file handling. Use temp git repos + local remotes (no network, no pushing from tests, no real tags in this repo).

Docs

Update docs/llm-workflow-runbooks.md, skills/llm-project-workflow/SKILL.md, and skills/llm-project-workflow/templates/release-tag.md; README if appropriate.

Non-goals

No full changelog generation; no change to MCP runtime, Gitea API ops, credential storage, or other helpers.

Refs #48.

## Problem #48 documented release/version tagging rules but deferred automation. A safe helper reduces manual mistakes when creating annotated release tags. ## Goal Add `scripts/release-tag` to automate the documented release checklist without bypassing safety gates. ## Required behavior - Require a SemVer tag `vMAJOR.MINOR.PATCH`. - Fetch/prune first; then refuse: invalid version, dirty worktree, non-master branch, local `master` != remote `master`, HEAD not on remote `master`, or an existing local/remote tag of the same name. - Run the full suite by default (`./venv/bin/python -m pytest tests/ -q`); `--skip-tests` only with an explicit flag + clear warning. - Create an **annotated** tag (never lightweight). - Support `--dry-run` (no changes), `--notes-file <path>`, `--push` (no push unless given). - Print: current commit, tag name, tests-run?, tag-created?, tag-pushed?. ## Tests Valid/invalid SemVer; dirty worktree; non-master; master/remote mismatch; existing tag; dry-run creates nothing; annotated-not-lightweight; push only with `--push`; `--skip-tests` warns; `--notes-file` handling. Use temp git repos + local remotes (no network, no pushing from tests, no real tags in this repo). ## Docs Update `docs/llm-workflow-runbooks.md`, `skills/llm-project-workflow/SKILL.md`, and `skills/llm-project-workflow/templates/release-tag.md`; README if appropriate. ## Non-goals No full changelog generation; no change to MCP runtime, Gitea API ops, credential storage, or other helpers. Refs #48.
jcwalker3 added the status:in-progress label 2026-07-02 03:13:44 -05:00
sysadmin removed the status:in-progress label 2026-07-02 04:41:42 -05:00
Owner

Merged PR #53 for issue #50 as merge commit 6089ec724a. Validation passed: bash -n scripts/release-tag; pytest tests/test_release_tag.py -q; full pytest tests/ -q; git diff --check; changed-file secret scan. No real release tags were created or pushed during review.

Merged PR #53 for issue #50 as merge commit 6089ec724a619a7f0518f250640c277f80dd7995. Validation passed: bash -n scripts/release-tag; pytest tests/test_release_tag.py -q; full pytest tests/ -q; git diff --check; changed-file secret scan. No real release tags were created or pushed during review.
Sign in to join this conversation.