Build script correctly bumps prerelease deps (e.g. schedule) (#13576)
Brian Vaughn committed
Sep 6, 2018 at 08:06 UTC
0a8740db61329eba42987d6ac619e7bf6e622a04
1 file changed
+34
-22
scripts/release/build-commands/update-package-versions.js
+34
-22
@@ -10,6 +10,32 @@ const {join} = require('path');
10
const semver = require('semver');
11
const {execUnlessDry, logPromise} = require('../utils');
12
13
+const getNextVersion = (prevVersion, releaseVersion) => {
14
+ const prerelease = semver.prerelease(releaseVersion);
15
+
16
+ // Unstable packages (eg version < 1.0) are treated specially:
17
+ // Rather than use the release version (eg 16.1.0)-
18
+ // We just auto-increment the minor version (eg 0.1.0 -> 0.2.0).
19
+ // If we're doing a prerelease, we also append the suffix (eg 0.2.0-beta).
20
+ if (semver.lt(prevVersion, '1.0.0')) {
21
+ let suffix = '';
22
+ if (prerelease) {
23
+ suffix = `-${prerelease.join('.')}`;
24
+ }
25
+
26
+ // If this is a new pre-release, increment the minor.
27
+ // Else just increment (or remove) the pre-release suffix.
28
+ // This way our minor version isn't incremented unnecessarily with each prerelease.
29
+ const minor = semver.prerelease(prevVersion)
30
+ ? semver.minor(prevVersion)
31
+ : semver.minor(prevVersion) + 1;
32
+
33
+ return `0.${minor}.0${suffix}`;
34
+ } else {
35
+ return releaseVersion;
36
+ }
37
+};
38
+
39
const update = async ({cwd, dry, packages, version}) => {
40
try {
41
// Update root package.json
@@ -32,27 +58,8 @@ const update = async ({cwd, dry, packages, version}) => {
58
const json = await readJson(path);
59
const prerelease = semver.prerelease(version);
60
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')) {
40
- let suffix = '';
41
- if (prerelease) {
42
- suffix = `-${prerelease.join('.')}`;
43
- }
44
-
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
- }
61
+ // Unstable package version.
62
+ json.version = getNextVersion(json.version, version);
63
64
if (project !== 'react' && json.peerDependencies) {
65
let peerVersion = json.peerDependencies.react.replace('^', '');
@@ -84,7 +91,12 @@ const update = async ({cwd, dry, packages, version}) => {
91
if (json.dependencies) {
92
Object.keys(json.dependencies).forEach(dependency => {
93
if (packages.indexOf(dependency) >= 0) {
87
- json.dependencies[dependency] = `^${version}`;
94
+ const prevVersion = json.dependencies[dependency];
95
+ const nextVersion = getNextVersion(
96
+ prevVersion.replace('^', ''),
97
+ version
98
+ );
99
+ json.dependencies[dependency] = `^${nextVersion}`;
100
}
101
});
102
}