Release CLI (rn-release-automator)

July 6, 2026 · View on GitHub

Tip

rn-release-automator is the recommended way to run a React Native release. It walks you through every phase of a release with interactive prompts, pre-flight checks, and GitHub API integrations — so you don't have to remember each manual step.

Every guide in this repo now leads with the relevant CLI command and keeps the manual steps available in collapsible Manual steps sections for reference or fallback.

Quick start

Run the interactive menu — no install required:

npx rn-release-automator@latest

Pick what you want to do from the menu, or invoke a command directly:

npx rn-release-automator@latest status
npx rn-release-automator@latest prepare-release --series 0.85
npx rn-release-automator@latest publish --version 0.85.0-rc.1

Use --help on the CLI or any command to see the available flags:

npx rn-release-automator@latest --help
npx rn-release-automator@latest cut-branch --help

Always dry-run first

Caution

Before any command that creates branches, comments on issues, triggers workflows, or otherwise mutates remote state, run it once with --dry-run.

Dry-run skips all mutations but still runs the read-only checks (CI status, npm queries, pick analysis, branch checks), so you can preview exactly what the command would do. Every interactive prompt shows a red DRY RUN badge while it's active.

# Preview, then run for real
npx rn-release-automator@latest cut-branch --series 0.85 --dry-run
npx rn-release-automator@latest cut-branch --series 0.85

The commands that mutate remote state — and therefore should always be dry-run first — are:

  • cut-branch — creates the stable branch, template branch, and commits/pushes the Hermes bump
  • create-github-project — clones a GitHub Project and deletes copied items
  • prepare-release — comments @react-native-bot merge … and can close pick requests
  • publish — triggers the create-release.yml workflow

--dry-run can also be passed globally, before the command, and it applies to the whole run:

npx rn-release-automator@latest --dry-run

Prerequisites

  • Node.js >= 18
  • GitHub CLI (gh) authenticated — gh auth login
  • Git with push access to facebook/react-native
  • For GitHub Projects (create-github-project, verify-release): gh auth refresh -s read:project,project

The CLI auto-discovers your GitHub token from the GITHUB_TOKEN environment variable, falling back to gh auth token. Run init to verify everything is set up:

npx rn-release-automator@latest init

init checks your tools, tokens, and access to the four repositories the CLI touches, and tells you whether your GitHub user is on the @react-native-bot allow-list (needed to use bot merges during prepare-release).

Command reference

Commands are either series-scoped (--series 0.85) or version-specific (--version 0.85.0-rc.1).

CommandInputWhat it doesGuide
initValidate environment — tools, tokens, repo access, bot merger listOnboarding
status--series or noneOverview of all release series, or details for one
cut-branch--seriesRC0 branch cut — CI check, create stable & template branches, notify #cli, trigger nightly, Hermes bumpRelease Candidate
create-github-project--seriesClone and configure a GitHub Project for the releaseProject Setup
prepare-release--seriesAnalyze pick requests, determine the next version (RC / stable / patch), process picks via botRelease Process
publish--versionPre-flight checks, trigger create-release.yml, monitorRelease Process
test-release--versionVerify repo/branch, clean env, download prebuilds, print the test matrixRelease Testing
verify-release--series8-step post-release verification (npm, template, upgrade helper, Maven, changelog, GitHub release, communicate, project)Release Process
post-promotion--seriesUpdate support policy table, ship blog post, cut a new website versionPromote to stable
communicate--versionGenerate announcement templates (status tracker, Discord, GitHub release body)Release Process

Typical workflow

A full release-candidate cycle, in order:

# 1. Verify your environment
npx rn-release-automator@latest init

# 2. Cut the stable branch (RC0 only) — dry-run first!
npx rn-release-automator@latest cut-branch --series 0.85 --dry-run
npx rn-release-automator@latest cut-branch --series 0.85

# 3. Set up the tracking project (new minor only) — dry-run first!
npx rn-release-automator@latest create-github-project --series 0.85 --dry-run
npx rn-release-automator@latest create-github-project --series 0.85

# 4. Cherry-pick fixes and choose the next version — dry-run first!
npx rn-release-automator@latest prepare-release --series 0.85 --dry-run
npx rn-release-automator@latest prepare-release --series 0.85

# 5. Trigger the release — dry-run first!
npx rn-release-automator@latest publish --version 0.85.0-rc.0 --dry-run
npx rn-release-automator@latest publish --version 0.85.0-rc.0

# 6. Test the release (RC0, RC1, RC4, stable)
npx rn-release-automator@latest test-release --version 0.85.0-rc.0

# 7. Verify the published release
npx rn-release-automator@latest verify-release --series 0.85

# 8. Announce it
npx rn-release-automator@latest communicate --version 0.85.0-rc.0

For a patch release on an existing stable series, skip steps 2–3 and start at prepare-release (it will offer the next patch version automatically).

For promoting an RC to stable, run prepare-release and choose Promote to stable, then publish, verify-release, and finally post-promotion.

Note

The CLI covers the React-Native-side of the Hermes release (it prompts you through the version bump during cut-branch), but publishing the Hermes tags themselves is still a manual, Meta-only step. Follow the Hermes guide when prompted.