Skip to content
Paul O’Shannessy edited this page Sep 10, 2015 · 8 revisions

Release Process

This isn't perfect. There are manual steps that could be automated. There will be variations. RCs and patch releases are slightly different. Hopefully you don't have to worry about this since @zpao does this. But if you are doing a release and you need an adult, contact @zpao.

Prereqs

The process below assumes some repositories checked out into a shared directory. For simplicity, let's assume you used ~/code.

~/code
├── react (git clone git@github.com:facebook/react.git)
├── react-gh-pages (git clone -b gh-pages git@github.com:facebook/react.git react-gh-pages)
└── react-bower (git clone git@github.com:reactjs/react-bower.git)

You'll also want to check out cdnjs and jsdelivr. The build process isn't set up to automatically commit to these yet, so we'll do this manually.

New X.Y.0 Release

Note: Not all of these apply to RCs.

  • create branch (X.Y-stable)
  • update version (remove -rc, -alpha, etc)
    • start in package.json
    • grunt build will ensure other locations are updated (src/.../React.js, npm-react/package.json)
    • docs/_config.yml should be updated too. Not as vital, will get updated with script, but could result in multiple commits.
  • Freeze npm modules. This ensures branches will always be built from the exact same dependencies unless explicitly changed.
    • rm -rf node_modules
    • npm install
    • npm shrinkwrap
  • Add all changes in react, commit, tag (vX.Y.Z)
  • Push it. git push -u upstream vX.Y-stable
  • Build the release
    • grunt release
    • This will clean out any possible artifacts from previous builds and build a fresh release.
    • react-bower will have the JS files, a commit with a message, and a tag.
    • react-gh-pages will build all of the docs, making sure the version is updated.
  • Push react-bower - git push && git push --tags
  • Don't push react-gh-pages yet.

Put Files on fb.me "CDN"

Make sure you do this before pushing react-gh-pages. We don't want dead links.

  • ssh to devserver
  • Have react-bower checked out somewhere. Make sure you've pulled and are checked out to the right branch.
  • ~/www/scripts/react/cdnize_bower path/to/react-bower

npm Modules

From react... (use --tag X.Y.Z-rc1 format for pre-releases)

  • cd build
  • npm publish react.tgz
  • npm publish react-tools.tgz

Ruby Gems

  • gem push react-source-0.10.0.gem
  • Update react-rails, push that. (don't know what this is, don't worry about it)

Blog Post, Starter Kit

You did write this, right? Hopefully before you did any of this. Now that all of the release artifacts are in place, we can update the site to mention them.

  • Make sure you're still on the -stable branch
  • Add blog post, starter kit. Commit.
    • This should have been built in the grunt release step, but we haven't commited since then.
    • This is ignored by default (to prevent accidents), so git add -f docs/downloads/react-0.10.0.zip.
    • We want to cherry-pick this latest commit to the master branch, but not quite yet. We want to make sure our content there doesn't differ so when we cut a new stable branch in the future, we're not missing anything.
  • Push stable branch to github.
  • cd docs && rake release
    • This updates react-gh-pages with the changes, but doesn't create a commit.
  • cd ../../react-gh-pages and add, commit.

Misc

  • Update REACT_WEBSITE_BRANCH at https://travis-ci.org/facebook/react/settings/env_vars
  • Update the base JSFiddle we link to on the site.
  • Probably make sure the site & examples all work. Preferably before publishing
  • Use files from react-bower to create pull requests to cdnjs and jsdelivr.
  • Get JSFiddle, JSBin to update to latest release.
  • Update the FB page, Twitter. Call your mom. etc.
  • Add release notes to GitHub based on the changelog: https://github.com/facebook/react/tags

New X.Y.Z Release

Mostly the same as above. Except no branching. Use git cherry-pick to pull commits from master. If you change package dependencies, make sure you install them and npm shrinkwrap again.

Just Docs

All docs changes should land in master first.

  • cherry-pick commits into latest -stable branch.
  • cd docs && rake release
  • cd ../../react-gh-pages
  • Add all relevant files. Chances are, the changes you have in js/ don't belong, so don't add blindly.
  • commit & push

"Oops"

Hopefully you didn't just say that but if you did. Be careful. As long as you haven't pushed anything anywhere, this easy to recover from. Just undo some commits, throw away some tags. If you have pushed, we can still recover but depending on what happened, we might need to do another version bump.

Clone this wiki locally