Skip to content

feat(git-release-beta): ✨ add gitutils scripts migrated from devcontainer-features - #3

Merged
tomgrv merged 3 commits into
developfrom
claude/multi-repo-consistency-release-7se0jy
Sep 3, 2026
Merged

feat(git-release-beta): ✨ add gitutils scripts migrated from devcontainer-features#3
tomgrv merged 3 commits into
developfrom
claude/multi-repo-consistency-release-7se0jy

Conversation

@tomgrv

@tomgrv tomgrv commented Sep 3, 2026

Copy link
Copy Markdown
Owner

Summary

Part of a coordinated consistency pass across tomgrv/devcontainer-features, tomgrv/actions, tomgrv/scripts, and perspikapps/vps. Companion PRs: tomgrv/actions#77, tomgrv/devcontainer-features#143, perspikapps/vps#10.

  • Migrates the ~32 git-* scripts formerly under devcontainer-features/src/gitutils/bin/ into individual workspace packages here (/{run.sh,package.json,README.md,test.bats}), mirroring the exact migration common-utils already went through. One source of truth for the script implementations now, fetched via zz_use instead of duplicated per consumer.
  • Switches this repo's own release-main.yml to call tomgrv/actions' new release-promote composite action as a step, dogfooding the same release path every consumer repo now uses.
  • Adds a "Git utilities" table to the README documenting the new packages.
  • Adds a .gitversion config file at repo root. git-release-beta/git-release-prod call gv -showvariable MajorMinorPatch, which hardcodes -config ".gitversion" — this repo never had that file (no devcontainer here to deploy it via the gitversion feature's configure step). Content matches tomgrv/actions/.gitversion, the same bump-message rules used across the rest of the family.

Cross-repo dependency

tomgrv/actions' release-promote action (this PR's release-main.yml step depends on it, including its new setup-gitversion sub-step — see tomgrv/actions#77) and devcontainer-features' gitutils feature (now depends on the packages added here) are being updated in sibling PRs on the same branch name. Until those merge and tag, the workflow points at tomgrv/actions@claude/multi-repo-consistency-release-7se0jy — marked with a TODO to pin to a released tag afterward. This repo's own release-main.yml has a chicken-and-egg problem releasing itself (it needs its own git-release-beta/git-release-prod before any tag of this repo exists) — the operational plan for the actual release run pins scripts-ref to the merge commit SHA for that one bootstrap run, then updates it to the real tag afterward.

Test plan

  • npx bats --recursive . — all 68 tests pass (32 new + 36 existing)
  • Each new script's run.sh verified sh -n clean via its test.bats
  • npx prettier --check clean on all new/changed files
  • Bump the workflow's uses: ref to a released tag once this merges and tags

🤖 Generated with Claude Code

https://claude.ai/code/session_01Dau8uW2rrctkyAxngdR1ix

…er-features

Move the ~32 git-* scripts formerly under devcontainer-features'
src/gitutils/bin/ into individual workspace packages here, mirroring the
migration common-utils already went through. One source of truth for the
script implementations now; gitutils keeps only the config/alias wiring
and git-flow install/configure lifecycle.

Also switches this repo's own release-main.yml to the thin-wrapper
pattern calling tomgrv/actions' new release-promote.yml reusable
workflow, dogfooding the same release path every consumer repo now uses.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dau8uW2rrctkyAxngdR1ix
@github-actions github-actions Bot changed the title feat(git-release-beta): add gitutils scripts migrated from devcontainer-features feat(git-release-beta): ✨ add gitutils scripts migrated from devcontainer-features Sep 3, 2026
tomgrv/actions restructured release-promote from a workflow_call
reusable workflow into a composite action (release-promote/action.yml).
Update this repo's release-main.yml to match: checkout, then
`uses: tomgrv/actions/release-promote@ref` as a normal step, instead of
delegating the whole job via workflow_call.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dau8uW2rrctkyAxngdR1ix
git-release-beta/git-release-prod call `gv -showvariable MajorMinorPatch`,
which hardcodes `-config ".gitversion"` -- this repo never had the file
(no devcontainer here to deploy it via the gitversion feature's configure
step). Without it, the first live release has no defined bump-message
rules. Content matches tomgrv/actions/.gitversion, the same rules used
across the rest of the family.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dau8uW2rrctkyAxngdR1ix
@tomgrv
tomgrv marked this pull request as ready for review September 3, 2026 15:45
@tomgrv
tomgrv merged commit 8610d99 into develop Sep 3, 2026
5 checks passed
@tomgrv
tomgrv deleted the claude/multi-repo-consistency-release-7se0jy branch September 3, 2026 15:45
tomgrv added a commit to tomgrv/devcontainer-features that referenced this pull request Sep 3, 2026
…rv/scripts, remove pecl (#143)

## Summary

Part of a coordinated consistency pass across this repo,
`tomgrv/actions` (#77, merged, released as v2.22.0), `tomgrv/scripts`
(#3, merged, released as v0.3.0), and `perspikapps/vps` (#10).

- **gitutils migration**: `src/gitutils/bin/`'s ~32 `git-*` scripts now
live in `tomgrv/scripts` as individual packages (tomgrv/scripts#3) — one
source of truth, mirroring the exact move `common-utils` already made.
`install.sh` now bootstraps `zz_use` and pulls them in; `gitutils` keeps
only the config/alias wiring and git-flow install/configure lifecycle.
- **Shared release workflow**:
`src/gitutils/stubs/.github/workflows/release-main.yml` (the actual
template every consumer repo's copy is stub-deployed from) now checks
out the repo and calls `tomgrv/actions`' new `release-promote` composite
action (tomgrv/actions#77), pinned to `v2.22.0`, pulling
`git-release-beta`/`git-release-prod` from `tomgrv/scripts@v0.3.0`. This
repo's own root `.github/workflows/release-main.yml` is redeployed from
that same stub, since this repo dogfoods its own features.
- **Removes `pecl` entirely** (rather than bringing it to v8 parity) —
it was already flagged in `docs/reviews/2026-08-repo-review.md` §2.5 as
the one feature diverging from the standard `install-feature` pattern.
`CLAUDE.md`'s "minimal reference" pointer moves to `src/scripting/`. All
other references cleaned up; the historical audit doc's findings are
left as-is with a dated addendum note rather than rewritten.
- **Stale internal `dependsOn` pins**: 7 features' own `dependsOn`
blocks still pinned `common-utils:7`/`gitutils:7`/`gitversion:7` even
though those targets have been on major 8 for a while — bumped all to
`:8`.
- **Stale README self-install snippets**: every feature's own README
Quick Start snippet (plus the two in root `README.md`) still showed its
pre-v8 self-install version — bumped to `:8` (left `scripting:1` alone,
since that one's genuinely major v1).
- **VS Code tasks**: the stub's "🎈 Beta"/"🚀 Prod" local-CLI tasks are
dropped now that release is fully automated via GitHub's "Run workflow"
button.

## Fixed during review

- `validate-pr-title` failed on the original PR title (`feat(scope)!:
...`) — `devmoji`'s autocorrection inserts two emoji back-to-back for
that breaking-change position, and commitlint's parser chokes on the
result. Dropped the `!` from the title; the breaking-change signal is
still carried by the commit's `BREAKING CHANGE:` footer.
- `release-promote` was originally a `workflow_call` reusable workflow;
restructured into a composite action per explicit direction, so it
composes as a normal step instead of taking over the whole job. It went
through several more live-verified fixes upstream (sibling-action
resolution, a missing GitVersion toolchain, a missing git-flow install)
before `tomgrv/scripts`' and `tomgrv/actions`' own real releases
succeeded — see tomgrv/actions#77 for the full history.

## Cross-repo dependency

`install.sh`'s `zz_use` calls and the release-main stub's
`scripts-ref`/`uses:` refs are now pinned to the released tags
(`tomgrv/scripts@v0.3.0`, `tomgrv/actions/release-promote@v2.22.0`) —
both sibling PRs have merged and tagged.

## Test plan

- [x] `bats src/gateway/tests src/common-utils/tests` — all 24 pass
(unaffected by this change, run as a regression check)
- [x] Every touched `devcontainer-feature.json` validated as parseable
JSON
- [x] `install.sh` syntax-checked (`sh -n`)
- [x] Workflow YAML and `tasks.json` files parse cleanly
- [x] `npx prettier --check` clean on all changed files
- [x] `scripts-ref`/`uses:` pinned to released tags

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01Dau8uW2rrctkyAxngdR1ix

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: bot <bot@example.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants