chore(release): retarget release automation from main to v3 - #2660
Merged
Merged
Conversation
The v3 branch is now the frozen maintenance home for Stagehand 3.x (main is about to become v4). Point all push-triggered release automation at v3 and keep 3.x npm publishes off the latest dist-tag: - release.yml: trigger on push to v3; browse publish guards follow - release-cli.yml: allow dispatch from v3 - stagehand-server-v3/v4-release.yml: trigger on push to v3 - stainless.yml / external-contributor-pr.yml: base ref v3 - .changeset/config.json: baseBranch v3 - package.json: 'changeset publish --tag v3' so 3.x maintenance releases publish under the v3 dist-tag instead of latest
|
Contributor
There was a problem hiding this comment.
All reported issues were addressed across 8 files
Architecture diagram
sequenceDiagram
participant GH as GitHub
participant Rel as Release Workflow
participant RelCli as Release CLI Workflow
participant S3 as Server v3 Workflow
participant S4 as Server v4 Workflow
participant CS as Changesets Action
participant NPM as npm Registry
participant Browse as Browse Package
Note over GH,Rel: Push event to v3 (baseBranch) triggers release automation
GH->>Rel: push to refs/heads/v3
GH->>RelCli: push to refs/heads/v3
GH->>S3: push to refs/heads/v3 (paths: .changeset/**)
GH->>S4: push to refs/heads/v3 (paths: .changeset/**)
Note over S4: Dormant - references packages/server-v4/ (nonexistent)
Rel->>Rel: Checkout repo, install deps
Rel->>CS: Run changesets action (baseBranch: v3)
CS->>Rel: Create/update version PR
Note over Rel: After version PR merges, publish runs
Rel->>Rel: Run release script (package.json)
Rel->>CS: changeset publish --tag v3
CS->>NPM: Publish core packages with dist-tag v3
NPM-->>Rel: Success (packages tagged v3, not latest)
alt Browse changes detected
Rel->>Rel: Check if browse publish needed (ref: v3)
Rel->>Browse: Prepare tarball
Browse->>NPM: npm publish --tag latest (browse only)
NPM-->>Rel: Browse published to latest
else No browse changes
Rel->>NPM: Publish canary (if needed)
end
Note over RelCli: Separate workflow for browse release PRs
RelCli->>CS: Create/update browse release PR (baseBranch v3)
CS-->>RelCli: PR ready
RelCli-->>GH: PR created for browse release
Note over S3: Server v3 release triggered on push to v3
S3->>CS: Trigger server-v3 release (path-filtered)
CS-->>NPM: Publish server-v3 if changesets present
Note over GH: External contributor PR workflows now target v3 base
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
akeimach
approved these changes
Aug 9, 2026
…er workflows - release.yml: canary step checks out the triggering commit instead of main, which is about to diverge toward v4 - release-cli.yml: browse release PRs (and their body text) target v3, the branch whose Release workflow actually publishes browse - external-contributor-pr.yml: derive the mirrored-PR base and status messages from the source PR's base.ref instead of hardcoding, so the logic is correct regardless of which branch's copy executes - delete stagehand-server-v4-release.yml + sea-build: they reference packages/server-v4 which does not exist in this tree
Collaborator
Author
|
Addressed the review in 019ad48..HEAD:
|
Merged
seanmcguire12
added a commit
that referenced
this pull request
Aug 10, 2026
# Stagehand v4 Lots of improvements and changes, to learn more check out the [**migration guide**](https://docs.stagehand.dev/v4/migrations/v3) ## What main becomes A protocol-first monorepo with three SDKs over a shared core: | Package | npm/PyPI | Published | |---|---|---| | `packages/sdk-ts` | `@browserbasehq/stagehand` 4.0.0 | npm, `latest` | | `packages/sdk-python` | `stagehand` 4.0.0 | PyPI | | `packages/sdk-go` | — | Go module (proxy tags TBD) | | `packages/protocol`, `extension`, `integrations`, `evals`, `docs` | private | — | ## What main stops being The v3-era tree (`core`, `cli`/browse, `server-v3`) and its 14 workflows. All of it lives on the protected `v3` branch (frozen at main's tip, release automation retargeted in #2660 — 3.x publishes under the `v3` dist-tag, browse keeps `latest`). Anything still needed on main (e.g. browse) gets ported in follow-up PRs. --------- Co-authored-by: samfinton <samfinton@samfintons-MacBook-Pro.local> Co-authored-by: Sam F <43347795+monadoid@users.noreply.github.com> Co-authored-by: Sean McGuire <75873287+seanmcguire12@users.noreply.github.com> Co-authored-by: Shrey Pandya <shrey@browserbase.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> Co-authored-by: Alyssa Keimach <7604716+akeimach@users.noreply.github.com> Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> Co-authored-by: Sameel <sameel.m.arif@gmail.com> Co-authored-by: shriyatheunicorn <shriavj@gmail.com> Co-authored-by: Alyssa Maruyama <alyssa@browserbase.com> Co-authored-by: Sean McGuire <seanmcguire1@outlook.com> Co-authored-by: Kyle Jeong <77771518+Kylejeong2@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
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
Makes the frozen
v3branch a self-sufficient maintenance home for Stagehand 3.x, ahead ofmainbecoming v4 (squash-merge ofv4-spike). Follows thev2freeze playbook.v3; therefs/heads/mainguards on the browse publish steps follow.changeset publish --tag v3: 3.x maintenance releases publish under thev3dist-tag so they never steallatestback from 4.x. (browsekeeps--tag latest— it lives only on this branch and its latest should keep advancing.)v3.v3.packages/server-v4/which does not exist in this tree; it looks vestigial and could be deleted in a follow-up.mainrefs would misfire for PRs targetingv3; retargeted.baseBranch: v3.Why now
v3was just cut from main's tip (7566804ed), replacingv3-legacy, and protected via ruleset. Without this change, pushes tov3trigger no release automation and a future 3.x patch would publish aslatest.Summary by cubic
Retargeted release automation from
maintov3so Stagehand 3.x can ship maintenance releases independently of v4. Pushes tov3now trigger releases, npm publishes use thev3dist-tag, and the unused v4 server workflows are removed.v3and updated browse flow:release.ymlguards run onv3and the canary step checks out the triggering commit;release-cli.ymlnow opens browse release PRs againstv3.external-contributor-pr.ymlbase-aware (derive from source PR’sbase.ref) and updated status messages; adjustedstainless.ymlmerge gate tov3..changeset/config.jsonbaseBranchtov3; changedpackage.jsonrelease script tochangeset publish --tag v3(browse continues to publish underlateston this branch).stagehand-server-v4-release.ymlandstagehand-server-v4-sea-build.yml.Written for commit c9f105e. Summary will update on new commits.