Add release workflow to main (dispatch-only) - #226
Draft
umair-ably wants to merge 1 commit into
Draft
Conversation
GitHub only registers a `workflow_dispatch` workflow once its file exists on the repository's default branch. The Pub/Sub split lives on `integration/v2` until GA, so without this copy `release.yml` cannot be dispatched against any ref at all — including the first dispatch from `integration/v2` that seeds the distribution mirror `ably/ably-pubsub-php-dist` and lets `ably/pubsub-server` be registered on Packagist against it (plan.md step 15c), and including the `2.0.0-rc1` prerelease (step 21). Both files are byte-identical to their versions in #225 (`pubsub-split/release-tooling`): `git diff` between the two refs over these two paths is empty. Nothing else from that PR comes along — no `release-dry-run` job in `check.yml`, no CONTRIBUTING release section, no `.gitattributes` export-ignore line. Those belong with the restructured tree, not with the legacy layout. The workflow is inert on this ref. It has no `push` or `pull_request` trigger, so only an explicit dispatch can start it, and the pre-flight refuses this layout outright: `composer.json` here is still `ably/ably-php`, so there is nothing named `ably/pubsub-server` to release from `main`. The mirror repository and the `MIRROR_PUSH_TOKEN` secret do not exist yet either, so no publishing step could run even if the gate were passed. Implements plan.md steps 15b and 24, row 3 of the PR stack in step 10b. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueThanks 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 |
umair-ably
added a commit
that referenced
this pull request
Sep 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Brings exactly two files from #225 (
pubsub-split/release-tooling) ontomain:.github/workflows/release.yml— theworkflow_dispatch-only release workflow that publishesably/pubsub-serverthrough the distribution mirrorscripts/release-preflight.php— the dependency-free pre-flight it callsNothing else from #225 comes with it: no
release-dry-runjob incheck.yml, noCONTRIBUTING.mdrelease section, no.gitattributesexport-ignore line. Those belong with the restructured tree, not with the legacy layout onmain.Both files are byte-identical to #225's versions — the diff between the two refs over those paths is empty:
Why
GitHub only registers a
workflow_dispatchworkflow once its file exists on the repository's default branch. The split work merges tointegration/v2and will not reachmainuntil GA, so without this copyrelease.ymlcannot be dispatched against any ref — not even the branch that defines it. This is plan step 15b, row 3 of the PR stack in step 10b.Once on
main, the workflow becomes dispatchable against any ref that carries the split layout:That unblocks, in order:
ably/ably-pubsub-php-dist's history and its first plain<version>tag (plan step 15c);ably/pubsub-serveragainst the mirror URL, which is what makes the README badges andcomposer requireresolve at all (step 15c);2.0.0-rc1prerelease as a real Packagist install rather than a VCS stanza (step 21), and the deliberate guardrail tests from a throwaway branch (step 15b).None of those can wait for
integration/v2to merge, which is the whole point of decoupling them.Inert on
mainThe workflow has no
pushorpull_requesttrigger, so only an explicit dispatch can start it. Dispatched atmain, the pre-flight refuses the legacy layout and nothing is pushed:Exit 1. The pre-flight reports every failure rather than aborting on the first, so the decisive one — this ref is not the
ably/pubsub-serverpackage — is always in the output even though the version-site mismatches are listed above it. No editing of the script was needed to make the refusal legible here.Belt and braces beyond the gate: the mirror repository
ably/ably-pubsub-php-distand theMIRROR_PUSH_TOKENsecret do not exist yet, so no publishing step could succeed even if the pre-flight were passed.For information (the dry-run job is deliberately not added to
main),--dry-runon this ref reports version sites agreeing at1.1.12and then the same twocomposer.jsonfailures, exit 1.actionlint .github/workflows/release.ymlis clean, andphp -l scripts/release-preflight.phpreports no syntax errors.Per plan step 24, the 1.x maintenance branch (
maintenance/1.x, name TBC org-wide) must be cut from the last 1.x release,1.1.12, before this merges.For PHP nothing on
mainactually breaks legacy releases: 1.x publishing is a manual tag-and-release process and Packagist indexes tags, so there is no tag-triggered workflow for this file to displace. The precondition is kept anyway, so the rule is uniform across the SDKs and so a future 1.x fix never has to be untangled from split tooling.While the branch is being cut, note the tag rule this workflow exists to enforce: 1.x tags must stay plain
1.x.y(theably/ably-phppackage is supposed to index them) and 2.x tags must never be plain in this repository — onlypubsub-server/<version>, which Composer skips as an invalid version name. #225 sets out why in full: a plain2.0.0tag here becomesably/ably-phpversion2.0.0and is served as latest to every consumer, and deleting the tag afterwards does not undo it.Keep in sync
If #225 changes either file before it merges, re-copy both here so the two copies cannot drift. The intent is that
main's copy is a mirror of #225's, never a fork of it.Siblings
🤖 Generated with Claude Code