@samitouri / QOS-React / commits / 409066a0a1

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"