Add progress bars to longer running async release tasks (#14322)
* Add progress bars to longer running async release tasks * Updated to 0.2 progress estimator version
Brian Vaughn committed
Nov 26, 2018 at 09:28 UTC
409066a0a14434df387d25971f09d33b9a5aa914
5 files changed
+73
-35
scripts/release/.gitignore
new
+1
@@ -0,0 +1 @@
1
+.progress-estimator
\ No newline at end of file
scripts/release/create-canary-commands/build-artifacts.js
+1
-1
@@ -21,5 +21,5 @@ const run = async ({cwd, dry, tempDirectory}) => {
21
};
22
23
module.exports = async params => {
24
- return logPromise(run(params), 'Building artifacts', true);
24
+ return logPromise(run(params), 'Building artifacts', 420000);
25
};
scripts/release/package.json
+1
@@ -15,6 +15,7 @@
15
"folder-hash": "^2.1.2",
16
"fs-extra": "^4.0.2",
17
"log-update": "^2.1.0",
18
+ "progress-estimator": "^0.2.1",
19
"prompt-promise": "^1.0.3",
20
"request-promise-json": "^1.0.4",
21
"semver": "^5.4.1"
scripts/release/utils.js
+8
-34
@@ -1,6 +1,5 @@
1
'use strict';
2
3
-const {dots} = require('cli-spinners');
3
const {exec} = require('child-process-promise');
4
const {createPatch} = require('diff');
5
const {hashElement} = require('folder-hash');
@@ -8,9 +7,15 @@ const {readdirSync, readFileSync, statSync, writeFileSync} = require('fs');
7
const {readJson, writeJson} = require('fs-extra');
8
const logUpdate = require('log-update');
9
const {join} = require('path');
10
+const createLogger = require('progress-estimator');
11
const prompt = require('prompt-promise');
12
const theme = require('./theme');
13
14
+// https://www.npmjs.com/package/progress-estimator#configuration
15
+const logger = createLogger({
16
+ storagePath: join(__dirname, '.progress-estimator'),
17
+});
18
+
19
const confirm = async message => {
20
const confirmation = await prompt(theme`\n{caution ${message}} (y/N) `);
21
prompt.done();
@@ -86,39 +91,8 @@ const handleError = error => {
91
process.exit(1);
92
};
93
89
-const logPromise = async (promise, text, isLongRunningTask = false) => {
90
- const {frames, interval} = dots;
91
-
92
- let index = 0;
93
-
94
- const inProgressMessage = `- this may take a few ${
95
- isLongRunningTask ? 'minutes' : 'seconds'
96
- }`;
97
-
98
- const id = setInterval(() => {
99
- index = ++index % frames.length;
100
- logUpdate(
101
- theme`{spinnerInProgress ${
102
- frames[index]
103
- }} ${text} {dimmed ${inProgressMessage}}`
104
- );
105
- }, interval);
106
-
107
- try {
108
- const returnValue = await promise;
109
-
110
- clearInterval(id);
111
-
112
- logUpdate(theme`{spinnerSuccess ✓} ${text}`);
113
- logUpdate.done();
114
-
115
- return returnValue;
116
- } catch (error) {
117
- logUpdate.clear();
118
-
119
- throw error;
120
- }
121
-};
94
+const logPromise = async (promise, text, estimate) =>
95
+ logger(promise, text, {estimate});
96
97
const printDiff = (path, beforeContents, afterContents) => {
98
const patch = createPatch(path, beforeContents, afterContents);
scripts/release/yarn.lock
+62
@@ -21,6 +21,11 @@ ansi-escapes@^2.0.0:
21
version "2.0.0"
22
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b"
23
24
+ansi-escapes@^3.0.0:
25
+ version "3.1.0"
26
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
27
+ integrity sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==
28
+
29
ansi-regex@^3.0.0:
30
version "3.0.0"
31
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
@@ -31,6 +36,13 @@ ansi-styles@^3.1.0:
36
dependencies:
37
color-convert "^1.9.0"
38
39
+ansi-styles@^3.2.1:
40
+ version "3.2.1"
41
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
42
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
43
+ dependencies:
44
+ color-convert "^1.9.0"
45
+
46
array-back@^1.0.3, array-back@^1.0.4:
47
version "1.0.4"
48
resolved "https://registry.yarnpkg.com/array-back/-/array-back-1.0.4.tgz#644ba7f095f7ffcf7c43b5f0dc39d3c1f03c063b"
@@ -106,6 +118,15 @@ chalk@^2.1.0:
118
escape-string-regexp "^1.0.5"
119
supports-color "^4.0.0"
120
121
+chalk@^2.4.1:
122
+ version "2.4.1"
123
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
124
+ integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==
125
+ dependencies:
126
+ ansi-styles "^3.2.1"
127
+ escape-string-regexp "^1.0.5"
128
+ supports-color "^5.3.0"
129
+
130
child-process-promise@^2.2.1:
131
version "2.2.1"
132
resolved "https://registry.yarnpkg.com/child-process-promise/-/child-process-promise-2.2.1.tgz#4730a11ef610fad450b8f223c79d31d7bdad8074"
@@ -129,6 +150,11 @@ cli-spinners@^1.1.0:
150
version "1.1.0"
151
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.1.0.tgz#f1847b168844d917a671eb9d147e3df497c90d06"
152
153
+cli-spinners@^1.3.1:
154
+ version "1.3.1"
155
+ resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a"
156
+ integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==
157
+
158
co@^4.6.0:
159
version "4.6.0"
160
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
@@ -302,6 +328,11 @@ has-flag@^2.0.0:
328
version "2.0.0"
329
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
330
331
+has-flag@^3.0.0:
332
+ version "3.0.0"
333
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
334
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
335
+
336
hawk@~6.0.2:
337
version "6.0.2"
338
resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038"
@@ -323,6 +354,11 @@ http-signature@~1.2.0:
354
jsprim "^1.2.2"
355
sshpk "^1.7.0"
356
357
+humanize-duration@^3.15.3:
358
+ version "3.15.3"
359
+ resolved "https://registry.yarnpkg.com/humanize-duration/-/humanize-duration-3.15.3.tgz#600a939bd9d9a16b696e907b3fc08d1a4f15e8c9"
360
+ integrity sha512-BMz6w8p3NVa6QP9wDtqUkXfwgBqDaZ5z/np0EYdoWrLqL849Onp6JWMXMhbHtuvO9jUThLN5H1ThRQ8dUWnYkA==
361
+
362
is-fullwidth-code-point@^2.0.0:
363
version "2.0.0"
364
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
@@ -396,6 +432,15 @@ log-update@^2.1.0:
432
cli-cursor "^2.0.0"
433
wrap-ansi "^3.0.1"
434
435
+log-update@^2.3.0:
436
+ version "2.3.0"
437
+ resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708"
438
+ integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg=
439
+ dependencies:
440
+ ansi-escapes "^3.0.0"
441
+ cli-cursor "^2.0.0"
442
+ wrap-ansi "^3.0.1"
443
+
444
lru-cache@^4.0.1:
445
version "4.1.1"
446
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55"
@@ -457,6 +502,16 @@ performance-now@^2.1.0:
502
version "2.1.0"
503
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
504
505
+progress-estimator@^0.2.1:
506
+ version "0.2.1"
507
+ resolved "https://registry.yarnpkg.com/progress-estimator/-/progress-estimator-0.2.1.tgz#deae08447fd858a0bf6a1067c4fbac1b4dad3cb0"
508
+ integrity sha512-KTwtucRIgJufTIf+eXjJzP8aLKs1PxuLtz/4SsGzTtvTA19+eG9uTG5XrpjK2o2mC9H63HLKg/TQsvdCN5JbEQ==
509
+ dependencies:
510
+ chalk "^2.4.1"
511
+ cli-spinners "^1.3.1"
512
+ humanize-duration "^3.15.3"
513
+ log-update "^2.3.0"
514
+
515
promise-polyfill@^6.0.1:
516
version "6.0.2"
517
resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.0.2.tgz#d9c86d3dc4dc2df9016e88946defd69b49b41162"
@@ -584,6 +639,13 @@ supports-color@^4.0.0:
639
dependencies:
640
has-flag "^2.0.0"
641
642
+supports-color@^5.3.0:
643
+ version "5.5.0"
644
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
645
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
646
+ dependencies:
647
+ has-flag "^3.0.0"
648
+
649
table-layout@^0.4.1:
650
version "0.4.2"
651
resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-0.4.2.tgz#10e9043c142a1e2d155da7257e478f0ef4981786"