@samitouri / QOS-React-2 / commits / dc271876a2

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

Brian Vaughn committed Feb 4, 2018 at 08:54 UTC dc271876a225d6efc7f13c07f82aba6cba2f39c7
9 files changed +78 -9
packages/react-art/package.json
+1 -1
@@ -26,7 +26,7 @@
26 "prop-types": "^15.6.0"
27 },
28 "peerDependencies": {
29 - "react": "^16.0.0"
29 + "react": "^16.0.0 || 16.3.0-alpha.0"
30 },
31 "files": [
32 "LICENSE",
packages/react-call-return/package.json
+1 -1
@@ -14,6 +14,6 @@
14 "object-assign": "^4.1.1"
15 },
16 "peerDependencies": {
17 - "react": "^16.0.0"
17 + "react": "^16.0.0 || 16.3.0-alpha.0"
18 }
19 }
packages/react-dom/package.json
+1 -1
@@ -19,7 +19,7 @@
19 "prop-types": "^15.6.0"
20 },
21 "peerDependencies": {
22 - "react": "^16.0.0"
22 + "react": "^16.0.0 || 16.3.0-alpha.0"
23 },
24 "files": [
25 "LICENSE",
packages/react-noop-renderer/package.json
+1 -1
@@ -11,7 +11,7 @@
11 "object-assign": "^4.1.1",
12 "prop-types": "^15.6.0",
13 "regenerator-runtime": "^0.11.0",
14 - "react-reconciler": "*"
14 + "react-reconciler": "* || 0.8.0-alpha.0"
15 },
16 "peerDependencies": {
17 "react": "^16.0.0"
packages/react-reconciler/package.json
+1 -1
@@ -21,7 +21,7 @@
21 "node": ">=0.10.0"
22 },
23 "peerDependencies": {
24 - "react": "^16.0.0"
24 + "react": "^16.0.0 || 16.3.0-alpha.0"
25 },
26 "dependencies": {
27 "fbjs": "^0.8.16",
packages/react-test-renderer/package.json
+1 -1
@@ -20,7 +20,7 @@
20 "prop-types": "^15.6.0"
21 },
22 "peerDependencies": {
23 - "react": "^16.0.0"
23 + "react": "^16.0.0 || 16.3.0-alpha.0"
24 },
25 "files": [
26 "LICENSE",
scripts/release/build-commands/update-noop-renderer-dependencies.js new
+44
@@ -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
+26 -3
@@ -30,30 +30,53 @@ const update = async ({cwd, dry, packages, version}) => {
30 const updateProjectPackage = async project => {
31 const path = join(cwd, 'packages', project, 'package.json');
32 const json = await readJson(path);
33 + const prerelease = semver.prerelease(version);
34
35 // Unstable packages (eg version < 1.0) are treated specially:
36 // Rather than use the release version (eg 16.1.0)-
37 // We just auto-increment the minor version (eg 0.1.0 -> 0.2.0).
38 // If we're doing a prerelease, we also append the suffix (eg 0.2.0-beta).
39 if (semver.lt(json.version, '1.0.0')) {
39 - const prerelease = semver.prerelease(version);
40 let suffix = '';
41 if (prerelease) {
42 suffix = `-${prerelease.join('.')}`;
43 }
44
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}`;
53 } else {
54 json.version = version;
55 }
56
57 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 + }
66
67 // Release engineers can manually update minor and bugfix versions,
68 // But we should ensure that major versions always match.
69 if (semver.major(version) !== semver.major(peerVersion)) {
70 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}`;
80 }
81 }
82
scripts/release/build.js
+2
@@ -23,6 +23,7 @@ const run = async () => {
23 const runAutomatedTests = require('./build-commands/run-automated-tests');
24 const runAutomatedBundleTests = require('./build-commands/run-automated-bundle-tests');
25 const updateGit = require('./build-commands/update-git');
26 + const updateNoopRendererDependencies = require('./build-commands/update-noop-renderer-dependencies');
27 const updatePackageVersions = require('./build-commands/update-package-versions');
28 const updateYarnDependencies = require('./build-commands/update-yarn-dependencies');
29 const validateVersion = require('./build-commands/validate-version');
@@ -42,6 +43,7 @@ const run = async () => {
43 await updateYarnDependencies(params);
44 await runAutomatedTests(params);
45 await updatePackageVersions(params);
46 + await updateNoopRendererDependencies(params);
47 await buildArtifacts(params);
48 await runAutomatedBundleTests(params);
49 await addGitTag(params);