fix: Unity package releases now wait for the project runner release, so each package ships the runner released with it
Merged
HA
1d ago+1010+1010+0123456789012345678901234567890123456789-141-141-012345678901234567890123456789
Summary
- A Unity package release now always ships the project runner released alongside it. The package release pull request stays draft until the project runner its pin names is published.
- release-please is no longer skipped on every release commit, so the runs the publish workflows dispatch after publishing actually rebuild the remaining release pull requests.
User Impact
- Before: the package release pull request was merged automatically as soon as it pinned the published dispatcher, even while the project runner release pull request was still open. Package 3.21.2 was published pinning runner 3.12.2 instead of 3.12.3, so the runner fixes did not reach its users. Merging the runner first did not help either: release-please skipped every run whose newest commit was a release commit, including the run the runner publish dispatches, so the other release pull requests were never rebuilt.
- After: the package release waits for the runner release, and the runner publish triggers a release-please run that rebuilds the package release pull request with the new runner and merges it.
Changes
merge-package-release-pr(both the dispatcher post-publish path and therelease-please.ymlpath) leaves the package release pull request draft while a project runner release pull request is open, or while the runner release its head pin names is missing or still a draft. It checks this only once the head pin records the current dispatcher, and it settles the pass instead of polling, because only another, approval-gated workflow can publish the runner.- New command
check-release-please-gatereplaces the "newest commit is a release commit" skip inrelease-please.yml. It skips release-please only while a release the manifest at the target commit names is missing or still a draft (the actual concern behind #1088). A release that cannot be read fails the run instead of choosing a side. Go is now set up before the gate on every run, and the subject-line script and its test are removed. - The native CLI post-publish marks its release pull request tagged before it dispatches release-please, the same order the Unity package release already uses.
- Docs: the release order and the manual-merge checklist in
docs/dispatcher-pin-release-order.md, the new ADR 0021, a pointer from ADR 0007, a "superseded in part" note on ADR 0013, and the places that explained the post-publish label marking by the old skip.
Verification
go test ./... -count=1incli/release-automationpasses;internal/automationcoverage is 96.5% (baseline 96.4).gofmt -l,go vet, andgolangci-lintare clean, andscripts/check-code-complexity.shandscripts/check-file-length.shreport nothing.- Each new merge-gate branch is pinned by a test that fails when the branch is disabled: the unpublished-runner check fails three tests, and the open-runner-PR check fails two.
scripts/test-release-please-config.sh,scripts/test-native-cli-publish-workflow.sh, andscripts/test-unity-package-release-workflow.shpass.go run ./cmd/check-release-please-gate --repo <owner>/<repo> --ref main, run against this repository, printsskip=falseand exits 0 (all three manifest releases are published today).- This change can only be verified locally through the unit tests and that read-only gate run. The release order itself will be verified on the next release cycle.