Repository navigation
chore: Move unity-package release root to Packages/src and fence dispatcher paths - #1454
Conversation
…atcher paths The repository-root package attributed every root-level change (workflows, scripts, dispatcher files) to unity-package releases, and dispatcher-only changes kept regenerating unity-package / project-runner release PRs (#1453). - Move the unity-package release root from "." to Packages/src so only package content drives its releases; the manifest carries 3.0.0-beta.48 over and tags stay in the v<version> line - Drop the now-dead exclude of cli from unity-package (cli is outside the new root) - Exclude dispatcher-owned paths (cmd/dispatcher, internal/dispatcher, dispatcher-contract.json) from uloop-project-runner releases; dispatcher releases stay owned by dispatcher-publish - Pin the new boundary in test-release-please-config.sh: fixed package roots, dispatcher exclusions, and no legacy "." manifest key
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (6)
💤 Files with no reviewable changes (1)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughThis PR renames the Unity release-please package boundary to ChangesRelease-please package boundary rename
Dispatcher version bump guard
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 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 |
…ixtures The sync test fixtures still fabricated the pre-restructure config schema (package key ".", repo-root-relative changelog path), so after the boundary move the CI-active suite only exercised a resolution branch that production can no longer reach, and the real "Packages/src" + relative changelog path had zero coverage. - Parameterize write_release_files with the unity package key and changelog path, defaulting to the new Packages/src schema - Drop resolve_package_path's "." special case, which this migration makes unreachable from both production config and tests (the generic join produces an equivalent path anyway)
…mits release_commit_updates_package_version accepted a commit when its diff added the manifest entry OR the changelog heading. The package-root rename in this PR adds the line "Packages/src": "3.0.0-beta.48" while keeping the version, so after merge the newest-first commit walk would resolve the rename commit as "the release commit" for the already published v3.0.0-beta.48 release, and ensure_release_points_to_commit would exit 1 on every push until the next unity-package version bump, blocking the release sync step. Require the manifest entry AND the changelog heading in the same commit. Real release-please commits always update both; the rename commit never touches the changelog, and the pre-rename release commit simply yields no match, which the existing-release path already tolerates. Add a regression fixture that replays the rename on top of a published release and asserts the sync run reuses the release instead of failing.
…ry-only semantics release-please matches exclude-paths as directory prefixes only (a commit file counts as excluded when it starts with "<entry>/"), so the cli/dispatcher-contract.json file entry could never match anything and silently did nothing; dispatcher-contract-only commits keep counting toward uloop-project-runner releases until the file moves into a dispatcher-owned directory in a later phase. Remove the dead entry and replace the hand-listed existence checks with a generic loop that requires every exclude-paths entry to be an existing directory, so a file entry (or a typo) fails the config test instead of silently weakening the release boundary.
The release boundary change declares cli/internal/dispatcher a dispatcher-owned path and excludes it from uloop-project-runner release attribution, but dispatcherReleaseInputPatterns had no pattern for that directory (path.Match does not cross "/" boundaries). A change there would ship in the next dispatcher build with no dispatcherVersion bump and no changelog entry anywhere: excluded from project-runner releases and invisible to check-dispatcher-version-bump. Add the cli/internal/dispatcher/*.go pattern and a guard regression test so the two dispatcher-ownership lists cannot silently diverge for this directory.
- Detect the legacy "." manifest key with has(".") so a present-but-null
value cannot slip past jq -e truthiness and silently pass the guard
- Remove assert_package_path_exists's "." special case, which the
Packages/src root move made unreachable (this script only reads the
real config, and the key-set assertion pins the keys)
Why
The repository-root release-please package attributed every root-level change (workflows, scripts, dispatcher files) to unity-package releases, and dispatcher-only changes kept regenerating the unity-package / project-runner release PR (#1453).
This is Phase 1 (stop-the-bleed) of the release boundary restructure: fix commit attribution without moving any directories.
What
.toPackages/srcso only package content drives its releaseschangelog-pathandextra-filesare now package-root relative;/.uloop/project-runner-pin.jsonuses the leading-slash absolute form already used by the cli package3.0.0-beta.48over; tags stay in thev<version>line (include-component-in-tag: falseunchanged)exclude-paths: ["cli"]from unity-package (cli is outside the new root)cli/cmd/dispatcher,cli/internal/dispatcher) from uloop-project-runner releases; dispatcher releases stay owned bydispatcher-publishcli/dispatcher-contract.jsonis intentionally NOT listed: release-please matches exclude-paths as directory prefixes only, so a plain-file entry is a silent no-op (verified against the pinned release-please v17.3.0 source). Dispatcher-contract-only commits keep counting toward project-runner releases until the file moves into a dispatcher-owned directory in a later phase — a known, accepted transitional leakscripts/test-release-please-config.sh: fixed package roots, dispatcher exclusions, exclude-paths entries must be existing directories, and no legacy.manifest keySelf-review hardening (post-review commits)
An adversarial self-review of the first commit found and fixed two release-blocking issues plus five smaller ones:
release_commit_updates_package_versionmatched a commit on the manifest line OR the changelog heading, so the rename commit itself (which adds"Packages/src": "3.0.0-beta.48") would be resolved as "the release commit" for the already-publishedv3.0.0-beta.48release, makingensure_release_points_to_commitexit 1 on every push after merge. Now both the manifest entry AND the changelog heading are required, with a regression fixture replaying the renamecli/internal/dispatcher/*.goadded todispatcherReleaseInputPatternsso changes there cannot escape both project-runner release attribution and the dispatcher version-bump guardPackages/srcschema (the old.fixtures left the production code path uncovered); dead.branches removed; legacy-key manifest guard now usesjq -e 'has(".")'so a present-but-null key cannot slip pastNotes
sync-release-please-package-releases.shenumerates config keys generically; label sync and the Go release PR automation only reference the unchanged component names.github/,docs/,scripts/,tests/,tools/) no longer ride any release. This is intendedVerification
scripts/test-release-please-config.shgreen (each change test-first: red before, green after)test-sync-release-please-package-releases.sh(incl. the new key-rename regression),test-sync-published-release-pr-labels.sh,test-is-release-please-release-commit.sh,test-resolve-native-cli-release-target.sh,test-resolve-dispatcher-release-target.sh,test-mark-release-pr-tagged.shscripts/check-go-cli.shpasses (fmt, vet, lint, tests, native binary rebuild)