feat(release): formalize OSS release infrastructure + bstack CLI dispatcher (0.2.2)#27
Conversation
…atcher (0.2.2)
Foundation PR for the 0.2.x → 0.3.0 series. Adds CONTRIBUTING + RELEASE
docs, CI workflows, a top-level bstack CLI dispatcher, and switches
bstack-update-check to use the GitHub Releases API so dev-branch VERSION
bumps no longer leak as "available upgrades" to downstream installs.
Files:
- NEW bin/bstack — top-level CLI dispatcher (doctor, validate, repair,
bootstrap, onboard, revamp, upgrade, config, update-check, wave,
release tag, version). Existing sub-binaries remain callable directly.
- NEW CONTRIBUTING.md — contribution guide: branch/PR shape, Conventional
Commits, primitive-promotion rule, local validation steps.
- NEW RELEASE.md — semver policy (pre-1.0: minor = potentially breaking),
release checklist using `bstack release tag`, retroactive-tag history,
update-check transport docs.
- NEW .github/workflows/ci.yml — shellcheck on scripts/*.sh and bin/*,
JSON validation for assets/templates/*.snippet, bstack doctor --quiet
on templated fixtures.
- NEW .github/workflows/validate-release.yml — PR check: if VERSION
changed, CHANGELOG.md must have a matching `## X.Y.Z` section and
VERSION must monotonically increase.
- EDIT bin/bstack-update-check — primary source is GitHub Releases API
(/repos/broomva/bstack/releases/latest); raw VERSION on main is the
fallback. New env vars: BSTACK_RELEASES_URL, BSTACK_REMOTE_URL.
- EDIT VERSION → 0.2.2
- EDIT CHANGELOG.md — 0.2.2 entry
Retroactive tags v0.2.0 (322ba23) and v0.2.1 (9170dd3) were pushed
2026-05-18 to give the new transport a stable anchor.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (8)
📝 WalkthroughWalkthroughThis PR establishes a complete release infrastructure: new version bump to 0.2.2, automated validation workflows for version progression and changelog entries, a new ChangesRelease Infrastructure and CLI Dispatcher
Sequence DiagramsequenceDiagram
participant Developer
participant bstack as bin/bstack
participant UpdateCheck as bin/bstack-update-check
participant Git
participant GitHub as GitHub API
participant User
Developer->>bstack: bstack release tag
bstack->>Git: validate clean main
bstack->>Git: verify main matches origin/main
bstack->>GitHub: create annotated tag
bstack->>GitHub: create GitHub Release
User->>bstack: bstack upgrade
bstack->>UpdateCheck: bstack-update-check --force
UpdateCheck->>GitHub: query Releases API
GitHub-->>UpdateCheck: tag_name
UpdateCheck->>Git: stash/fetch/reset
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Poem
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary
Foundation PR for the 0.2.x → 0.3.0 series. Establishes proper OSS release tooling, a top-level
bstackCLI dispatcher, and switches the update-check transport to the GitHub Releases API.CONTRIBUTING.md(branch/PR shape, primitive-promotion rule, local validation) +RELEASE.md(semver policy for pre-1.0, release checklist viabstack release tag, retroactive-tag history, transport docs)..github/workflows/ci.yml(shellcheck + jq +bstack doctorlint) +.github/workflows/validate-release.yml(PR gate: VERSION ↔ CHANGELOG match, version monotonicity).bin/bstack— top-level subcommand router (doctor,validate,repair,bootstrap,onboard,revamp,upgrade,config,update-check,wave,release tag,version). Existing sub-binaries remain callable directly — the dispatcher is additive.bin/bstack-update-check): primary source is nowGET /repos/broomva/bstack/releases/latest. RawVERSIONonmainis the fallback. Dev-branch VERSION bumps no longer leak as available upgrades to downstream installs — only tagged releases do.v0.2.0(322ba23) andv0.2.1(9170dd3) + matching GitHub Releases pushed 2026-05-18.bstack release tagwraps the post-merge sequence: validates clean tree onmain, reads VERSION, picks the matching## X.Y.Zsection out of CHANGELOG.md as release notes, tags + pushes +gh release create.Why now
bstack had zero git tags, zero GitHub Releases, no CI, and no contribution/release docs. This blocks proper semver discipline and prevents downstream installs from discovering updates reliably. Without this foundation, the planned 0.2.3 (
bstack repairmerges hooks) and 0.3.0 (SessionStart auto-upgrade) wouldn't be properly tagged or releaseable.Stack
This PR is PR 1 of 3 in the release-infra → repair-merges-hooks → SessionStart-auto-upgrade series:
feat/repair-merge-hooks) —bstack repairidempotently merges missing hooks (closes the chicken-and-egg where 0.3.0's new SessionStart hook wouldn't reach existing installs)feat/session-start-autoupdate) — SessionStart auto-upgrade hook +auto_upgrade=truedefaultValidation
shellcheck --severity=warning --exclude=SC1091,SC2155 bin/* scripts/*.sh— cleanjq -e . assets/templates/*.snippet— all validbin/bstack --help— renders correctlyBSTACK_RELEASES_URLat the new releases endpoint, confirmedbstack update-checkemitsUP_TO_DATE 0.2.2once tag landsTest plan
ci.yml+validate-release.yml)bstack release tagproduces the v0.2.2 release🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
bstackCLI dispatcher with integrated upgrade and release management capabilities.Documentation
Chores