feat(devcontainer-features-gitutils): ✨ move gitutils scripts to tomgrv/scripts, remove pecl - #143
Conversation
…grv/scripts, remove pecl gitutils' src/gitutils/bin/ scripts (~32 git-* utilities) now live in tomgrv/scripts as individual workspace packages, mirroring the exact migration common-utils already went through -- one source of truth for the script implementations, fetched via zz_use instead of duplicated here. install.sh now bootstraps zz_use and pulls them in; gitutils keeps only the config/alias wiring and git-flow install/configure lifecycle. Also switches this feature's release-main.yml stub template (and this repo's own dogfooded copy) to a thin wrapper calling tomgrv/actions' new release-promote.yml reusable workflow, and drops the Beta/Prod VS Code tasks from the stub now that the release path is fully automated via GitHub's "Run workflow" button. BREAKING CHANGE: removes the pecl feature entirely rather than bringing it to v8 parity -- it was already flagged as the one feature diverging from the standard install-feature pattern (docs/reviews/2026-08-repo- review.md #2.5). CLAUDE.md's "minimal reference" pointer moves to src/scripting/. Also bumps 7 features' internal dependsOn pins from common-utils:7/ gitutils:7/gitversion:7 to :8 (act, ai-coding, gateway, githooks, gitversion, larasets, and gitutils' own dependsOn on common-utils and gitversion) -- those were still resolving a stale major version even though the targets have been on 8.x for a while -- and fixes every feature's own README Quick Start snippet, which still showed the feature's pre-v8 self-install version. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Dau8uW2rrctkyAxngdR1ix
|
Fixed by dropping the One caveat: 🤖 Generated with Claude Code https://claude.ai/code/session_01Dau8uW2rrctkyAxngdR1ix Generated by Claude Code |
tomgrv/actions restructured release-promote from a workflow_call reusable workflow into a composite action (release-promote/action.yml). Update the gitutils stub template (and this repo's own dogfooded copy) 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
…iner-features (#3) ## 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 - [x] `npx bats --recursive .` — all 68 tests pass (32 new + 36 existing) - [x] Each new script's `run.sh` verified `sh -n` clean via its `test.bats` - [x] `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.com/claude-code) https://claude.ai/code/session_01Dau8uW2rrctkyAxngdR1ix --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: bot <bot@example.com>
… tags tomgrv/scripts (v0.3.0) and tomgrv/actions (v2.22.0) have both now released, so this repo's release-main.yml -- and the gitutils stub it's deployed from -- no longer needs to point at the working branch. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Dau8uW2rrctkyAxngdR1ix
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), andperspikapps/vps(#10).src/gitutils/bin/'s ~32git-*scripts now live intomgrv/scriptsas individual packages (feat(git-release-beta): ✨ add gitutils scripts migrated from devcontainer-features scripts#3) — one source of truth, mirroring the exact movecommon-utilsalready made.install.shnow bootstrapszz_useand pulls them in;gitutilskeeps only the config/alias wiring and git-flow install/configure lifecycle.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 callstomgrv/actions' newrelease-promotecomposite action (feat: ✨ add release-promote composite action actions#77), pinned tov2.22.0, pullinggit-release-beta/git-release-prodfromtomgrv/scripts@v0.3.0. This repo's own root.github/workflows/release-main.ymlis redeployed from that same stub, since this repo dogfoods its own features.peclentirely (rather than bringing it to v8 parity) — it was already flagged indocs/reviews/2026-08-repo-review.md§2.5 as the one feature diverging from the standardinstall-featurepattern.CLAUDE.md's "minimal reference" pointer moves tosrc/scripting/. All other references cleaned up; the historical audit doc's findings are left as-is with a dated addendum note rather than rewritten.dependsOnpins: 7 features' owndependsOnblocks still pinnedcommon-utils:7/gitutils:7/gitversion:7even though those targets have been on major 8 for a while — bumped all to:8.README.md) still showed its pre-v8 self-install version — bumped to:8(leftscripting:1alone, since that one's genuinely major v1).Fixed during review
validate-pr-titlefailed 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'sBREAKING CHANGE:footer.release-promotewas originally aworkflow_callreusable 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) beforetomgrv/scripts' andtomgrv/actions' own real releases succeeded — see feat: ✨ add release-promote composite action actions#77 for the full history.Cross-repo dependency
install.sh'szz_usecalls and the release-main stub'sscripts-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
bats src/gateway/tests src/common-utils/tests— all 24 pass (unaffected by this change, run as a regression check)devcontainer-feature.jsonvalidated as parseable JSONinstall.shsyntax-checked (sh -n)tasks.jsonfiles parse cleanlynpx prettier --checkclean on all changed filesscripts-ref/uses:pinned to released tags🤖 Generated with Claude Code
https://claude.ai/code/session_01Dau8uW2rrctkyAxngdR1ix