The current release process is convoluted. I think we agreed that we wonât be maintaining stable branches from now on, and will release from master. This means breaking changes land behind a flag. In this issue I am documenting the new master-based release process. It is intended to be exhaustive so let me know if something is missing.
If we agree on this, Iâll be deleting the existing documentation and point it to this issue instead. This issue is in checklist format to be copy-pasteable for specific release issues (h/t @flarnie for the tip). Ideally we should automate some parts of this, potentially by fixing RRM to work with this model.
npm owner ls reactnpm owner ls react-artnpm owner ls react-domnpm owner ls react-test-renderermastergit pullgit log output matches the commit list.yarn in the repo root.fbjs:fbjs in root package.json.packages/*/package.json depending on fbjs specify the same range.object-assign:object-assign in root package.json.packages/*/package.json depending on object-assign specify the same range.prop-types:prop-types in root package.json.packages/*/package.json depending on prop-types specify the same range.yarn upgrade object-assign prop-types fbjspackage.json.yarn test in the repo root.yarn lint in the repo root.yarn flow in the repo root.yarn build -- --extract-errors in the repo root.scripts/error-codes/codes.json changes, git commit -am 'Update error codes'*-stable branch for docs when youâre reading this, we need to cherry-pick that commit to that branch. This makes sure the website decoder knows about the updated error codes. But ideally we should just change docs to serve from master.CHANGELOG.md and add release notes in the same format as earlier.version in root package.jsonsrc/ReactVersion.jsversion and React version in peerDependencies in all packages/*/package.json:packages/react/package.jsonpackages/react-art/package.jsonpackages/react-dom/package.jsonpackages/react-noop-renderer/package.jsonpackages/react-test-renderer/package.jsonyarn version-check to verify your changes.git commit -am "<version number>"yarn build in the repo root.fixtures/packaging/babel-standalone/dev.html in the browser for a smoke test.cd fixtures/packaging and run node build-all.jsnpm install -g serveserve -s .git pushgit push --tagsbuild/packagesnpm publish --tag next in the subfolder.npm publish in the subfolder.npm info <package> dist-tags to verify that things were published as you expect.CHANGELOG.md.build/dist/*.js except react-art.* to the release.docs/_config.ymlreact_version in it to the newly published version.git commit -am "Update the reported React version on the website"*-stable branch for docs when youâre reading this, we need to cherry-pick that commit to that branch. This makes sure the website knows about the updated config. But ideally we should just change docs to serve from master.git clone https://github.com/reactjs/react-bower.gitmaster and you did git pullbuild/dist/*.js from React repo into it.git commit -am "<version number>"git tag -a v<version number> (Donât miss the v!)git push and git push --tagsnpm i -g create-react-appcreate-react-app myappcd myappnpm startShould we add a note for running through the browser fixtures as well? Just in case we failed to review the browser fixtures before merging a DOM change.
I thought about it, but this is already a ton of work by this point. How much more work would going through DOM fixtures be? If we automate publishing them then maybe we can have QA people help go through them. @sophiebits had ideas about it.
@aweary Dan and I discussed that a bit - we expect that when changes land to DOM related things, we'll run through the DOM fixtures, and when we make packaging changes we test the packaging fixtures then. We agreed that doing a "smoke test" of the packaging fixtures is probably good for a release, rather than re-doing all of the fixture testing by hand.
We also do a step where we sync React into Facebook, and do pretty extensive manual testing of our internal uses of React, so anything that went into a sync should be very well tested.
Can we add that to this checklist? Even if it's just a note - we could point to internal docs on that process, or just comment about what to search for in the internal dex/wiki.
@flarnie đ added
I thought about it, but this is already a ton of work by this point. How much more work would going through DOM fixtures be?
It would take a good chunk of time, but maybe we can just add it as non-blocking and defer it to someone else who has the time who can give it a đ for the release? I'm sure myself, @nhunzaker or @jquense would be happy to contribute on that front.
I just worry since there's currently nothing in place that enforces that DOM fixtures be checked when DOM changes are merged, so if we mess up and forget we could slip a regression into a stable release.
If we automate publishing them then maybe we can have QA people help go through them.
That would be great, I wonder if we could use something like danger to watch for changes to DOM-related files and add a note reminding us to check the published fixtures before merge? We can talk about that another time though đ
I added a last note about reaching out to you folks :-)
This is the best - thanks for creating it. đ„đđ¶
I'm excited that we have one source of truth for this, in a visible place, and we'll work towards automating it.
Some thoughts:
big picture and/or release?yarn.lock? Seems like this may now be covered by "Ensure runtime dependencies match what users would get."results.json? I know ideally we are updating that regularly but since in practice we don't, it could be good to flag any size regressions before cutting a release.I love all the details. Looks good to me.
Going to make a clone of it for specifically the 16 RC, and probably will continue through the process after lunch. The part I've done so far is open PRs for the "Update error codes." steps.
Do we want to include a step for updating yarn.lock? Seems like this may now be covered by "Ensure runtime dependencies match what users would get."
Yes, that's the only thing we need to do during the release. The rest (updating dev dependencies) should be done during normal development cycle once in a whileâwhen we feel like updating them :-) And we should land a sync after doing that.
Do we want to update results.json? I know ideally we are updating that regularly but since in practice we don't, it could be good to flag any size regressions before cutting a release.
Sure. Although by the time we do a sync it's usually late to fix size :-) But we should add something.
I think we want yarn upgrade object-assign@^THAT_VERSION instead of yarn add --dev 'prop-types@^THAT_VERSION', because yarn add won't change the lockfile vs. yarn upgrade will bump it to the latest version which is still compatible with the package.json.
Updating based on my previous comment now, after chatting with @gaearon it sounds like this is what we want.
From the Yarn docs it sounds like just yarn upgrade object-assign prop-types fbjs will work and do the right thing.
Just a note - let's add something about verifying using npm info <package> dist-tags
Ideally we should automate some parts of this, potentially by fixing RRM to work with this model.
I will be happy to do this.
Most helpful comment
I added a last note about reaching out to you folks :-)