2015-12-10 15:37:44 +00:00
The list of releases with notes can be found at:
https://github.com/facebook/react-native/releases
2016-03-01 17:33:59 +00:00
Release schedule:
2015-12-10 16:29:19 +00:00
2016-03-15 16:21:50 +00:00
- **0.22 branch cut**, 0.22.0-rc - **week of Mar 7**
- 0.22.0 - Mar 21
- **0.23 branch cut**, 0.23.0-rc - **week of Mar 21**
- 0.23.0 - Apr 4
2016-04-01 16:37:24 +00:00
- **0.24 branch cut**, 0.24.0-rc - **week of Apr 4**
2016-03-15 16:21:50 +00:00
- 0.24.0 - Apr 18
2016-04-01 16:37:24 +00:00
- **0.25 branch cut**, 0.25.0-rc - **week of Apr 18**
- 0.25.0 - May 2
- **0.26 branch cut**, 0.26.0-rc - **week of May 2**
- 0.26.0 - May 16
- **0.27 branch cut**, 0.27.0-rc - **week of May 16**
- 0.27.0 - May 30
2015-12-10 16:29:19 +00:00
- ...
2016-04-01 16:37:24 +00:00
-------------------
## How to cut a new release branch
#### Check everything works
2015-12-10 15:37:44 +00:00
2016-03-15 16:21:50 +00:00
Make absolutely sure a basic iOS and Android workflow works on the commit you are going to use for release.
Make sure CI systems [Travis ](https://travis-ci.org/facebook/react-native ) and [Circle ](https://circleci.com/gh/facebook/react-native )
are green and then run
2016-01-18 20:26:07 +00:00
2016-03-15 16:21:50 +00:00
```
./scripts/test-manual-e2e.sh
```
2016-01-18 20:26:07 +00:00
2016-03-15 16:21:50 +00:00
This script runs end to end with a proxy npm repository on local PC and asks to check that Chrome Debugging works.
2015-12-10 16:29:19 +00:00
2016-04-01 16:37:24 +00:00
#### Cut a release branch and push to github
2015-12-10 16:30:51 +00:00
2016-03-15 16:21:50 +00:00
To cut a release branch and check that everything works, you'll need Mac OS with the
[Android dev environment set up ](https://github.com/facebook/react-native/blob/master/ReactAndroid/README.md ).
2015-12-10 15:37:44 +00:00
2016-03-15 16:21:50 +00:00
Run:
```
git checkout -b < version_you_are_releasing > -stable # e.g. git checkout -b 0.22-stable
2016-03-24 15:40:38 +00:00
node ./scripts/bump-oss-version.js < exact-version_you_are_releasing > # e.g. git node ./scripts/bump-oss-version.js 0.22.0-rc
2016-04-01 16:37:24 +00:00
# IMPORTANT: Test everything (Chrome debugging, Reload JS, Hot Module Reloading)
./scripts/test-manual-e2e.sh
2016-03-15 16:21:50 +00:00
git push origin < version_you_are_releasing > -stable --tags # e.g. git push origin 0.22-stable --tags
```
Circle CI will run the tests and publish to npm with version `0.22.0-rc` and tag `next` meaning that
this version will not be installed for users by default.
2016-03-24 13:36:09 +00:00
Go to [Circle CI ](https://circleci.com/gh/facebook/react-native ), look for your branch on the left side and look the npm publish step.
2016-04-01 16:37:24 +00:00
**Note** In order for the CI to publish to npm the **last** commit on the new branch must have the tag `v<branch-name-without-stable>.0-[rc]` .
2016-02-10 15:50:52 +00:00
2016-04-01 16:37:24 +00:00
#### Make sure we have release notes
2016-03-01 17:33:59 +00:00
2016-04-01 16:37:24 +00:00
Write the release notes, or post in [React Native Core Contributors ](https://www.facebook.com/groups/reactnativeoss/ ) that the RC is ready to find a voluteer.
To go through all the commits that went into a release, one way is to use the GitHub compare view: https://github.com/facebook/react-native/compare/0.21-stable...0.22-stable (Note: This only shows **250** commits, if there are more use git.)
Post the release notes: https://github.com/facebook/react-native/releases
2016-03-01 17:33:59 +00:00
2016-04-01 16:37:24 +00:00
#### Tweet about the rc release
2016-03-01 17:33:59 +00:00
2016-04-01 16:37:24 +00:00
Tweet about it! Link to release notes and say "please report issues" and link to the master issue to track bugs you created.
## IMPORTANT: Track bug reports from the community during the following two weeks, ping owners to get them fixed
2016-03-01 17:33:59 +00:00
A good way to do this is to create a github issue and post about it so people can report bugs. Examples: https://github.com/facebook/react-native/issues/6087, https://github.com/facebook/react-native/issues/5201
2016-02-10 15:50:52 +00:00
2016-04-01 16:37:24 +00:00
**Only cherry-pick small and non-risky bug fixes**. **Don't pick new features into the release** as this greatly increases the risk of something breaking. The main point of the RC is to let people to use it for two weeks and fix the most serious bugs.
2016-03-01 17:33:59 +00:00
-------------------
2016-04-01 16:37:24 +00:00
## How to release an RC update (e.g. 0.22.0-rc1, 0.22.0-rc2)
2016-03-01 17:33:59 +00:00
2016-04-01 16:37:24 +00:00
After cherry-picking 1-2 bug fixes, it is a good idea to do a new RC release so that people can test again. Having a few RC releases can also help people bisect in case we cherry-pick a bad commit by mistake.
2016-03-01 17:33:59 +00:00
2016-04-01 16:37:24 +00:00
```
git checkout 0.version_you_are_releasing-stable # e.g. git checkout 0.22-stable
git pull origin 0.version_you_are_releasing-stable # e.g. git pull origin 0.22-stable
# Cherry-pick those commits
git cherry-pick commitHash1
2016-03-01 17:33:59 +00:00
2016-04-01 16:37:24 +00:00
# IMPORTANT: Test everything again (Chrome debugging, Reload JS, Hot Module Reloading)
./scripts/test-manual-e2e.sh
```
If everything worked:
2016-03-01 17:33:59 +00:00
2016-04-01 16:37:24 +00:00
```
node ./scripts/bump-oss-version.js < exact_version_you_are_releasing > # e.g. node ./scripts/bump-oss-version.js 0.22.0-rc1
git push origin version_you_are_releasing-stable --tags # e.g. git push origin 0.22-stable --tags
````
-------------------
2016-03-01 17:33:59 +00:00
2016-04-01 16:37:24 +00:00
## How to do the final release (e.g. 0.22.0, 0.22.1)
Roughly two weeks after the branch cut (see the release schedule above) it's time to promote the last RC to a real release.
Once all bugfixes have been cherry-picked and you're sure the release is solid (example: https://github.com/facebook/react-native/issues/6087), do the release:
2016-02-10 15:50:52 +00:00
```
2016-03-01 17:33:59 +00:00
git checkout 0.version_you_are_releasing-stable # e.g. git checkout 0.22-stable
git pull origin 0.version_you_are_releasing-stable # e.g. git pull origin 0.22-stable
2016-04-01 16:37:24 +00:00
# Cherry-pick those commits, if any
2016-03-01 17:33:59 +00:00
git cherry-pick commitHash1
2016-02-10 15:50:52 +00:00
2016-04-01 16:37:24 +00:00
# IMPORTANT: If you cherry-picked any commits, test everything again (Chrome debugging, Reload JS, Hot Module Reloading)
2016-03-15 16:21:50 +00:00
./scripts/test-manual-e2e.sh
2016-03-01 17:33:59 +00:00
```
2016-01-21 15:03:25 +00:00
2016-03-15 16:21:50 +00:00
If everything worked:
2015-12-10 15:37:44 +00:00
2016-03-01 17:33:59 +00:00
```
2016-04-01 16:37:24 +00:00
node ./scripts/bump-oss-version.js < exact_version_you_are_releasing > # e.g. node ./scripts/bump-oss-version.js 0.22.0
2016-03-24 13:36:09 +00:00
git tag -d latest
git push origin :latest
2016-04-01 16:37:24 +00:00
git tag latest # The latest tag marks when to regenerate the website.
2016-03-24 13:36:09 +00:00
git push origin version_you_are_releasing-stable --tags # e.g. git push origin 0.22-stable --tags
2016-03-01 17:33:59 +00:00
```
2015-12-10 15:37:44 +00:00
2016-04-01 16:37:24 +00:00
#### Update the release notes
2016-03-01 17:33:59 +00:00
Once you see the version in the top left corner of the website has been updated:
2016-03-15 16:21:50 +00:00
Move the release notes to the tag you've just created. We want single release notes per version,
for example if there is v0.22.0-rc and later we release v0.22.0, the release notes should live on v0.22.0:
2016-03-01 17:33:59 +00:00
https://github.com/facebook/react-native/tags
2016-01-22 18:55:35 +00:00
2016-04-01 16:37:24 +00:00
For non-RC releases: Uncheck the box "This is a pre-release" and publish the notes.
#### Tweet about it
2016-01-18 20:26:07 +00:00
2016-03-01 17:33:59 +00:00
Tweet about it! :) ([example tweet](https://twitter.com/grabbou/status/701510554758856704))