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-141

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 the release-please.yml path) 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-gate replaces the "newest commit is a release commit" skip in release-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=1 in cli/release-automation passes; internal/automation coverage is 96.5% (baseline 96.4). gofmt -l, go vet, and golangci-lint are clean, and scripts/check-code-complexity.sh and scripts/check-file-length.sh report 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, and scripts/test-unity-package-release-workflow.sh pass.
  • go run ./cmd/check-release-please-gate --repo <owner>/<repo> --ref main, run against this repository, prints skip=false and 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.