Skip to content

Commit dc27187

Browse files
authored
Pre-release version fix (#12148)
* Ran updated release script to fix deps * Release script handles prerelease deps correctly * Update noop-renderer dependencies on reconciler package
1 parent be85544 commit dc27187

File tree

9 files changed

+78
-9
lines changed

9 files changed

+78
-9
lines changed

packages/react-art/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"prop-types": "^15.6.0"
2727
},
2828
"peerDependencies": {
29-
"react": "^16.0.0"
29+
"react": "^16.0.0 || 16.3.0-alpha.0"
3030
},
3131
"files": [
3232
"LICENSE",

packages/react-call-return/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@
1414
"object-assign": "^4.1.1"
1515
},
1616
"peerDependencies": {
17-
"react": "^16.0.0"
17+
"react": "^16.0.0 || 16.3.0-alpha.0"
1818
}
1919
}

packages/react-dom/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"prop-types": "^15.6.0"
2020
},
2121
"peerDependencies": {
22-
"react": "^16.0.0"
22+
"react": "^16.0.0 || 16.3.0-alpha.0"
2323
},
2424
"files": [
2525
"LICENSE",

packages/react-noop-renderer/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"object-assign": "^4.1.1",
1212
"prop-types": "^15.6.0",
1313
"regenerator-runtime": "^0.11.0",
14-
"react-reconciler": "*"
14+
"react-reconciler": "* || 0.8.0-alpha.0"
1515
},
1616
"peerDependencies": {
1717
"react": "^16.0.0"

packages/react-reconciler/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"node": ">=0.10.0"
2222
},
2323
"peerDependencies": {
24-
"react": "^16.0.0"
24+
"react": "^16.0.0 || 16.3.0-alpha.0"
2525
},
2626
"dependencies": {
2727
"fbjs": "^0.8.16",

packages/react-test-renderer/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"prop-types": "^15.6.0"
2121
},
2222
"peerDependencies": {
23-
"react": "^16.0.0"
23+
"react": "^16.0.0 || 16.3.0-alpha.0"
2424
},
2525
"files": [
2626
"LICENSE",
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#!/usr/bin/env node
2+
3+
'use strict';
4+
5+
const {readJson, writeJson} = require('fs-extra');
6+
const {join} = require('path');
7+
const semver = require('semver');
8+
const {execUnlessDry, logPromise} = require('../utils');
9+
10+
const getReactReconcilerVersion = async cwd => {
11+
const path = join(cwd, 'packages', 'react-reconciler', 'package.json');
12+
const json = await readJson(path);
13+
return json.version;
14+
};
15+
16+
const update = async ({cwd, dry}) => {
17+
const path = join(cwd, 'packages', 'react-noop-renderer', 'package.json');
18+
const json = await readJson(path);
19+
20+
// IMPORTANT: This script must be run after update-package-versions,
21+
// Since it depends up the updated react-reconciler version.
22+
const reconcilerVersion = await getReactReconcilerVersion(cwd);
23+
24+
// There is no wildcard for semver that includes prerelease ranges as well.
25+
// This causes problems for our Yarn workspaces setup,
26+
// Since the noop-renderer depends on react-reconciler.
27+
// So we have a special case check for this that ensures semver compatibility.
28+
if (semver.prerelease(reconcilerVersion)) {
29+
json.dependencies['react-reconciler'] = `* || ${reconcilerVersion}`;
30+
} else {
31+
json.dependencies['react-reconciler'] = '*';
32+
}
33+
34+
await writeJson(path, json, {spaces: 2});
35+
36+
await execUnlessDry(
37+
`git commit -am "Updating dependencies for react-noop-renderer"`,
38+
{cwd, dry}
39+
);
40+
};
41+
42+
module.exports = async params => {
43+
return logPromise(update(params), 'Updating noop renderer dependencies');
44+
};

scripts/release/build-commands/update-package-versions.js

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,30 +30,53 @@ const update = async ({cwd, dry, packages, version}) => {
3030
const updateProjectPackage = async project => {
3131
const path = join(cwd, 'packages', project, 'package.json');
3232
const json = await readJson(path);
33+
const prerelease = semver.prerelease(version);
3334

3435
// Unstable packages (eg version < 1.0) are treated specially:
3536
// Rather than use the release version (eg 16.1.0)-
3637
// We just auto-increment the minor version (eg 0.1.0 -> 0.2.0).
3738
// If we're doing a prerelease, we also append the suffix (eg 0.2.0-beta).
3839
if (semver.lt(json.version, '1.0.0')) {
39-
const prerelease = semver.prerelease(version);
4040
let suffix = '';
4141
if (prerelease) {
4242
suffix = `-${prerelease.join('.')}`;
4343
}
4444

45-
json.version = `0.${semver.minor(json.version) + 1}.0${suffix}`;
45+
// If this is a new pre-release, increment the minor.
46+
// Else just increment (or remove) the pre-release suffix.
47+
// This way our minor version isn't incremented unnecessarily with each prerelease.
48+
const minor = semver.prerelease(json.version)
49+
? semver.minor(json.version)
50+
: semver.minor(json.version) + 1;
51+
52+
json.version = `0.${minor}.0${suffix}`;
4653
} else {
4754
json.version = version;
4855
}
4956

5057
if (project !== 'react') {
51-
const peerVersion = json.peerDependencies.react.replace('^', '');
58+
let peerVersion = json.peerDependencies.react.replace('^', '');
59+
60+
// If the previous release was a pre-release version,
61+
// The peer dependency will contain multiple versions, eg "^16.0.0 || 16.3.0-alpha.0"
62+
// In this case, assume the first one will be the major and extract it.
63+
if (peerVersion.includes(' || ')) {
64+
peerVersion = peerVersion.split(' || ')[0];
65+
}
5266

5367
// Release engineers can manually update minor and bugfix versions,
5468
// But we should ensure that major versions always match.
5569
if (semver.major(version) !== semver.major(peerVersion)) {
5670
json.peerDependencies.react = `^${semver.major(version)}.0.0`;
71+
} else {
72+
json.peerDependencies.react = `^${peerVersion}`;
73+
}
74+
75+
// If this is a prerelease, update the react dependency as well.
76+
// A dependency on a major version won't satisfy a prerelease version.
77+
// So rather than eg "^16.0.0" we need "^16.0.0 || 16.3.0-alpha.0"
78+
if (prerelease) {
79+
json.peerDependencies.react += ` || ${version}`;
5780
}
5881
}
5982

scripts/release/build.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ const run = async () => {
2323
const runAutomatedTests = require('./build-commands/run-automated-tests');
2424
const runAutomatedBundleTests = require('./build-commands/run-automated-bundle-tests');
2525
const updateGit = require('./build-commands/update-git');
26+
const updateNoopRendererDependencies = require('./build-commands/update-noop-renderer-dependencies');
2627
const updatePackageVersions = require('./build-commands/update-package-versions');
2728
const updateYarnDependencies = require('./build-commands/update-yarn-dependencies');
2829
const validateVersion = require('./build-commands/validate-version');
@@ -42,6 +43,7 @@ const run = async () => {
4243
await updateYarnDependencies(params);
4344
await runAutomatedTests(params);
4445
await updatePackageVersions(params);
46+
await updateNoopRendererDependencies(params);
4547
await buildArtifacts(params);
4648
await runAutomatedBundleTests(params);
4749
await addGitTag(params);

0 commit comments

Comments
 (0)