@percy/cli-exec 1.0.0-beta.7 → 1.0.0-beta.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,87 +1,114 @@
1
1
  # @percy/cli-exec
2
2
 
3
- Percy CLI commands for running a local snapshot server using `@percy/core`.
3
+ Percy CLI commands for running a local snapshot server using [`@percy/core`](./packages/core).
4
4
 
5
5
  ## Commands
6
6
  <!-- commands -->
7
7
  * [`percy exec`](#percy-exec)
8
- * [`percy exec:ping`](#percy-execping)
9
8
  * [`percy exec:start`](#percy-execstart)
10
9
  * [`percy exec:stop`](#percy-execstop)
10
+ * [`percy exec:ping`](#percy-execping)
11
11
 
12
- ## `percy exec`
12
+ ### `percy exec`
13
13
 
14
14
  Start and stop Percy around a supplied command
15
15
 
16
16
  ```
17
- USAGE
18
- $ percy exec
19
-
20
- OPTIONS
21
- -c, --config=config configuration file path
22
- -h, --allowed-hostname=allowed-hostname allowed hostnames
23
- -p, --port=port [default: 5338] server port
24
- -q, --quiet log errors only
25
- -t, --network-idle-timeout=network-idle-timeout asset discovery idle timeout
26
- -v, --verbose log everything
27
- --disable-asset-cache disable asset discovery caches
28
- --silent log nothing
29
-
30
- EXAMPLES
17
+ Usage:
18
+ $ percy exec [options] -- <command>
19
+
20
+ Subcommands:
21
+ exec:start [options] Starts a local Percy snapshot server
22
+ exec:stop [options] Stops a local running Percy snapshot server
23
+ exec:ping [options] Pings a local running Percy snapshot server
24
+ help [command] Display command help
25
+
26
+ Options:
27
+ -P, --port [number] Local CLI server port (default: 5338)
28
+ --parallel Marks the build as one of many parallel builds
29
+ --partial Marks the build as a partial build
30
+
31
+ Percy options:
32
+ -c, --config <file> Config file path
33
+ -d, --dry-run Print snapshot names only
34
+ -h, --allowed-hostname <hostname> Allowed hostnames to capture in asset discovery
35
+ -t, --network-idle-timeout <ms> Asset discovery network idle timeout
36
+ --disable-cache Disable asset discovery caches
37
+ --debug Debug asset discovery and do not upload snapshots
38
+
39
+ Global options:
40
+ -v, --verbose Log everything
41
+ -q, --quiet Log errors only
42
+ -s, --silent Log nothing
43
+ --help Display command help
44
+
45
+ Examples:
31
46
  $ percy exec -- echo "percy is running around this echo command"
32
47
  $ percy exec -- yarn test
33
48
  ```
34
49
 
35
- ## `percy exec:ping`
50
+ ### `percy exec:start`
36
51
 
37
- Pings a local running Percy snapshot server
52
+ Starts a local Percy snapshot server
38
53
 
39
54
  ```
40
- USAGE
41
- $ percy exec:ping
42
-
43
- OPTIONS
44
- -p, --port=port [default: 5338] server port
45
- -q, --quiet log errors only
46
- -v, --verbose log everything
47
- --silent log nothing
55
+ Usage:
56
+ $ percy exec:start [options]
57
+
58
+ Options:
59
+ -P, --port [number] Local CLI server port (default: 5338)
60
+
61
+ Percy options:
62
+ -c, --config <file> Config file path
63
+ -d, --dry-run Print snapshot names only
64
+ -h, --allowed-hostname <hostname> Allowed hostnames to capture in asset discovery
65
+ -t, --network-idle-timeout <ms> Asset discovery network idle timeout
66
+ --disable-cache Disable asset discovery caches
67
+ --debug Debug asset discovery and do not upload snapshots
68
+
69
+ Global options:
70
+ -v, --verbose Log everything
71
+ -q, --quiet Log errors only
72
+ -s, --silent Log nothing
73
+ --help Display command help
74
+
75
+ Examples:
76
+ $ percy exec:start &> percy.log
48
77
  ```
49
78
 
50
- ## `percy exec:start`
79
+ ### `percy exec:stop`
51
80
 
52
- Starts a local Percy snapshot server
81
+ Stops a local running Percy snapshot server
53
82
 
54
83
  ```
55
- USAGE
56
- $ percy exec:start
57
-
58
- OPTIONS
59
- -c, --config=config configuration file path
60
- -h, --allowed-hostname=allowed-hostname allowed hostnames
61
- -p, --port=port [default: 5338] server port
62
- -q, --quiet log errors only
63
- -t, --network-idle-timeout=network-idle-timeout asset discovery idle timeout
64
- -v, --verbose log everything
65
- --disable-asset-cache disable asset discovery caches
66
- --silent log nothing
67
-
68
- EXAMPLES
69
- $ percy exec:start
70
- $ percy exec:start &> percy.log
84
+ Usage:
85
+ $ percy exec:stop [options]
86
+
87
+ Options:
88
+ -P, --port [number] Local CLI server port (default: 5338)
89
+
90
+ Global options:
91
+ -v, --verbose Log everything
92
+ -q, --quiet Log errors only
93
+ -s, --silent Log nothing
94
+ -h, --help Display command help
71
95
  ```
72
96
 
73
- ## `percy exec:stop`
97
+ ### `percy exec:ping`
74
98
 
75
- Stops a local running Percy snapshot server
99
+ Pings a local running Percy snapshot server
76
100
 
77
101
  ```
78
- USAGE
79
- $ percy exec:stop
80
-
81
- OPTIONS
82
- -p, --port=port [default: 5338] server port
83
- -q, --quiet log errors only
84
- -v, --verbose log everything
85
- --silent log nothing
102
+ Usage:
103
+ $ percy exec:ping [options]
104
+
105
+ Options:
106
+ -P, --port [number] Local CLI server port (default: 5338)
107
+
108
+ Global options:
109
+ -v, --verbose Log everything
110
+ -q, --quiet Log errors only
111
+ -s, --silent Log nothing
112
+ -h, --help Display command help
86
113
  ```
87
114
  <!-- commandsstop -->
package/dist/common.js ADDED
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.flags = void 0;
7
+ const flags = [{
8
+ name: 'port',
9
+ description: 'Local CLI server port',
10
+ env: 'PERCY_SERVER_PORT',
11
+ type: 'number',
12
+ parse: Number,
13
+ default: 5338,
14
+ short: 'P'
15
+ }];
16
+ exports.flags = flags;
package/dist/exec.js ADDED
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.exec = exports.default = void 0;
7
+
8
+ var _cliCommand = _interopRequireDefault(require("@percy/cli-command"));
9
+
10
+ var common = _interopRequireWildcard(require("./common"));
11
+
12
+ var _start = _interopRequireDefault(require("./start"));
13
+
14
+ var _stop = _interopRequireDefault(require("./stop"));
15
+
16
+ var _ping = _interopRequireDefault(require("./ping"));
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
+
22
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+
24
+ const exec = (0, _cliCommand.default)('exec', {
25
+ description: 'Start and stop Percy around a supplied command',
26
+ usage: '[options] -- <command>',
27
+ commands: [_start.default, _stop.default, _ping.default],
28
+ flags: [...common.flags, {
29
+ name: 'parallel',
30
+ description: 'Marks the build as one of many parallel builds',
31
+ parse: () => {
32
+ var _process$env;
33
+
34
+ return !!((_process$env = process.env).PERCY_PARALLEL_TOTAL || (_process$env.PERCY_PARALLEL_TOTAL = '-1'));
35
+ }
36
+ }, {
37
+ name: 'partial',
38
+ description: 'Marks the build as a partial build',
39
+ parse: () => {
40
+ var _process$env2;
41
+
42
+ return !!((_process$env2 = process.env).PERCY_PARTIAL_BUILD || (_process$env2.PERCY_PARTIAL_BUILD = '1'));
43
+ }
44
+ }],
45
+ examples: ['$0 -- echo "percy is running around this echo command"', '$0 -- yarn test'],
46
+ loose: ['Warning: Missing command separator (--),', 'some command options may not work as expected'].join(' '),
47
+ percy: {
48
+ server: true
49
+ }
50
+ }, async function* ({
51
+ flags,
52
+ argv,
53
+ env,
54
+ percy,
55
+ log,
56
+ exit
57
+ }) {
58
+ let [command, ...args] = argv; // command is required
59
+
60
+ if (!command) {
61
+ log.error("You must supply a command to run after '--'");
62
+ log.info('Example:');
63
+ log.info(' $ percy exec -- npm test');
64
+ exit(1);
65
+ } // verify the provided command exists
66
+
67
+
68
+ let which = await Promise.resolve().then(() => _interopRequireWildcard(require('which')));
69
+
70
+ if (!which.sync(command, {
71
+ nothrow: true
72
+ })) {
73
+ exit(127, `Command not found "${command}"`);
74
+ } // attempt to start percy if enabled
75
+
76
+
77
+ if (!percy) {
78
+ log.warn('Percy is disabled');
79
+ } else {
80
+ try {
81
+ yield* percy.start();
82
+ } catch (error) {
83
+ if (error.canceled) throw error;
84
+ log.warn('Skipping visual tests');
85
+ log.error(error);
86
+ }
87
+ } // provide SDKs with useful env vars
88
+
89
+
90
+ env.PERCY_SERVER_ADDRESS || (env.PERCY_SERVER_ADDRESS = percy === null || percy === void 0 ? void 0 : percy.address());
91
+ env.PERCY_LOGLEVEL || (env.PERCY_LOGLEVEL = log.loglevel()); // run the provided command
92
+
93
+ log.info(`Running "${[command, ...args].join(' ')}"`);
94
+ let [status, error] = yield* spawn(command, args); // stop percy if running (force stop if there is an error);
95
+
96
+ await (percy === null || percy === void 0 ? void 0 : percy.stop(!!error)); // forward any returned status code
97
+
98
+ if (status) exit(status, error);
99
+ }); // Spawn a command with cross-spawn and return an array containing the resulting status code along
100
+ // with any error encountered while running. Uses a generator pattern to handle interupt signals.
101
+
102
+ exports.exec = exec;
103
+
104
+ async function* spawn(cmd, args) {
105
+ let {
106
+ default: crossSpawn
107
+ } = await Promise.resolve().then(() => _interopRequireWildcard(require('cross-spawn')));
108
+ let proc, closed, error;
109
+
110
+ try {
111
+ proc = crossSpawn(cmd, args, {
112
+ stdio: 'inherit'
113
+ });
114
+ proc.on('close', code => closed = code);
115
+ proc.on('error', err => error = err); // run until an event is triggered
116
+
117
+ /* eslint-disable-next-line no-unmodified-loop-condition */
118
+
119
+ while (closed == null && error == null) {
120
+ yield new Promise(r => setImmediate(r));
121
+ }
122
+
123
+ if (error) throw error;
124
+ return [closed];
125
+ } catch (err) {
126
+ if (!err.signal) return [1, err];
127
+ proc.kill(err.signal);
128
+ return [0, err];
129
+ }
130
+ }
131
+
132
+ var _default = exec;
133
+ exports.default = _default;
package/dist/index.js CHANGED
@@ -3,6 +3,45 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
7
- var _default = {};
8
- exports.default = _default;
6
+ Object.defineProperty(exports, "default", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _exec.default;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "exec", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _exec.exec;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "ping", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _ping.ping;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "start", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _start.start;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "stop", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _stop.stop;
34
+ }
35
+ });
36
+
37
+ var _exec = _interopRequireWildcard(require("./exec"));
38
+
39
+ var _start = require("./start");
40
+
41
+ var _stop = require("./stop");
42
+
43
+ var _ping = require("./ping");
44
+
45
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
46
+
47
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
package/dist/ping.js ADDED
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ping = exports.default = void 0;
7
+
8
+ var _cliCommand = _interopRequireDefault(require("@percy/cli-command"));
9
+
10
+ var common = _interopRequireWildcard(require("./common"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
+
18
+ const ping = (0, _cliCommand.default)('ping', {
19
+ description: 'Pings a local running Percy snapshot server',
20
+ flags: common.flags,
21
+ percy: true
22
+ }, async ({
23
+ flags,
24
+ percy,
25
+ log,
26
+ exit
27
+ }) => {
28
+ if (!percy) exit(0, 'Percy is disabled');
29
+ let {
30
+ request
31
+ } = await Promise.resolve().then(() => _interopRequireWildcard(require('@percy/core/dist/utils')));
32
+ let ping = `http://localhost:${flags.port}/percy/healthcheck`;
33
+
34
+ try {
35
+ await request(ping, {
36
+ retryNotFound: true,
37
+ noProxy: true
38
+ });
39
+ } catch (err) {
40
+ log.error('Percy is not running');
41
+ log.debug(err);
42
+ exit(1);
43
+ }
44
+
45
+ log.info('Percy is running');
46
+ });
47
+ exports.ping = ping;
48
+ var _default = ping;
49
+ exports.default = _default;
package/dist/start.js ADDED
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.start = exports.default = void 0;
7
+
8
+ var _cliCommand = _interopRequireDefault(require("@percy/cli-command"));
9
+
10
+ var common = _interopRequireWildcard(require("./common"));
11
+
12
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
+
14
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ const start = (0, _cliCommand.default)('start', {
19
+ description: 'Starts a local Percy snapshot server',
20
+ flags: common.flags,
21
+ examples: ['$0 &> percy.log'],
22
+ percy: {
23
+ server: true
24
+ }
25
+ }, async function* ({
26
+ percy,
27
+ exit
28
+ }) {
29
+ if (!percy) exit(0, 'Percy is disabled'); // start percy
30
+
31
+ yield* percy.start();
32
+
33
+ try {
34
+ // run until stopped or terminated
35
+ while (percy.readyState < 3) {
36
+ yield new Promise(r => setImmediate(r));
37
+ }
38
+ } catch (error) {
39
+ await percy.stop(true);
40
+ throw error;
41
+ }
42
+ });
43
+ exports.start = start;
44
+ var _default = start;
45
+ exports.default = _default;
package/dist/stop.js ADDED
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.stop = exports.default = void 0;
7
+
8
+ var _cliCommand = _interopRequireDefault(require("@percy/cli-command"));
9
+
10
+ var common = _interopRequireWildcard(require("./common"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
+
18
+ const stop = (0, _cliCommand.default)('stop', {
19
+ description: 'Stops a local running Percy snapshot server',
20
+ flags: common.flags,
21
+ percy: true
22
+ }, async ({
23
+ flags,
24
+ percy,
25
+ log,
26
+ exit
27
+ }) => {
28
+ if (!percy) exit(0, 'Percy is disabled');
29
+ let {
30
+ request
31
+ } = await Promise.resolve().then(() => _interopRequireWildcard(require('@percy/core/dist/utils')));
32
+ let stop = `http://localhost:${flags.port}/percy/stop`;
33
+ let ping = `http://localhost:${flags.port}/percy/healthcheck`;
34
+
35
+ try {
36
+ await request(stop, {
37
+ method: 'POST',
38
+ noProxy: true
39
+ });
40
+ } catch (err) {
41
+ log.error('Percy is not running');
42
+ log.debug(err);
43
+ exit(1);
44
+ } // retry heathcheck until it fails
45
+
46
+
47
+ await new Promise(function check(resolve) {
48
+ return request(ping, {
49
+ noProxy: true
50
+ }).then(() => setTimeout(check, 100, resolve)).catch(resolve);
51
+ });
52
+ log.info('Percy has stopped');
53
+ });
54
+ exports.stop = stop;
55
+ var _default = stop;
56
+ exports.default = _default;
package/package.json CHANGED
@@ -1,44 +1,39 @@
1
1
  {
2
2
  "name": "@percy/cli-exec",
3
- "description": "capture and upload snapshots",
4
- "version": "1.0.0-beta.7",
3
+ "version": "1.0.0-beta.73",
5
4
  "license": "MIT",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/percy/cli",
8
+ "directory": "packages/cli-exec"
9
+ },
10
+ "publishConfig": {
11
+ "access": "public"
12
+ },
6
13
  "main": "dist/index.js",
7
14
  "files": [
8
- "dist",
9
- "oclif.manifest.json"
15
+ "dist"
10
16
  ],
17
+ "engines": {
18
+ "node": ">=12"
19
+ },
11
20
  "scripts": {
12
- "build": "babel --root-mode upward src --out-dir dist",
21
+ "build": "node ../../scripts/build",
13
22
  "lint": "eslint --ignore-path ../../.gitignore .",
14
- "postbuild": "oclif-dev manifest",
15
- "readme": "oclif-dev readme",
16
- "pretest": "node ../../scripts/install-browser",
17
- "test": "cross-env NODE_ENV=test mocha",
18
- "test:coverage": "nyc yarn test"
19
- },
20
- "publishConfig": {
21
- "access": "public"
22
- },
23
- "mocha": {
24
- "require": "../../scripts/babel-register",
25
- "timeout": 10000
23
+ "readme": "percy-cli-readme",
24
+ "test": "node ../../scripts/test",
25
+ "test:coverage": "yarn test --coverage"
26
26
  },
27
- "oclif": {
28
- "bin": "percy",
29
- "commands": "./dist/commands",
30
- "topics": {
31
- "exec": {
32
- "description": "capture and upload snapshots"
33
- }
34
- }
27
+ "@percy/cli": {
28
+ "commands": [
29
+ "./dist/exec.js"
30
+ ]
35
31
  },
36
32
  "dependencies": {
37
- "@percy/cli-command": "^1.0.0-beta.7",
38
- "@percy/core": "^1.0.0-beta.7",
39
- "@percy/logger": "^1.0.0-beta.7",
40
- "cross-spawn": "^7.0.1",
33
+ "@percy/cli-command": "1.0.0-beta.73",
34
+ "@percy/core": "1.0.0-beta.73",
35
+ "cross-spawn": "^7.0.3",
41
36
  "which": "^2.0.2"
42
37
  },
43
- "gitHead": "5be796ec8f17958e93ada0b634899b945c9b0d60"
38
+ "gitHead": "aa8160e02bea3e04ab1d3605762f89fbe79605d4"
44
39
  }
@@ -1,105 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Exec = void 0;
7
-
8
- var _cliCommand = _interopRequireWildcard(require("@percy/cli-command"));
9
-
10
- var _core = _interopRequireDefault(require("@percy/core"));
11
-
12
- var _logger = _interopRequireDefault(require("@percy/logger"));
13
-
14
- var _crossSpawn = _interopRequireDefault(require("cross-spawn"));
15
-
16
- var _which = _interopRequireDefault(require("which"));
17
-
18
- var _flags = _interopRequireDefault(require("../../flags"));
19
-
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
23
-
24
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
-
26
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
27
-
28
- class Exec extends _cliCommand.default {
29
- async run() {
30
- let {
31
- argv
32
- } = this.parse(Exec);
33
- let command = argv.shift(); // validate the passed command
34
-
35
- if (!command) {
36
- _logger.default.error('You must supply a command to run after --');
37
-
38
- _logger.default.info('Example:');
39
-
40
- _logger.default.info('$ percy exec -- echo "run your test suite"');
41
-
42
- return this.exit(1);
43
- } else if (!_which.default.sync(command, {
44
- nothrow: true
45
- })) {
46
- _logger.default.error(`Error: command not found "${command}"`);
47
-
48
- return this.exit(127);
49
- } // attempt to start percy if enabled
50
-
51
-
52
- if (this.isPercyEnabled()) {
53
- try {
54
- this.percy = await _core.default.start({
55
- port: this.flags.port,
56
- config: false,
57
- ...this.percyrc()
58
- });
59
- } catch (err) {
60
- _logger.default.info(`Skipping visual tests - ${err.message}`);
61
- }
62
-
63
- _logger.default.info(`Running "${[command].concat(argv).join(' ')}"`);
64
- } // provide SDKs with useful env vars
65
-
66
-
67
- let env = { ...process.env,
68
- PERCY_CLI_PORT: this.flags.port,
69
- PERCY_CLI_LOGLEVEL: _logger.default.loglevel()
70
- }; // run the passed command async
71
-
72
- let status = await new Promise((resolve, reject) => {
73
- (0, _crossSpawn.default)(command, argv, {
74
- stdio: 'inherit',
75
- env
76
- }).on('error', reject).on('close', resolve);
77
- }); // forward status code
78
-
79
- if (status) {
80
- this.exit(status);
81
- }
82
- } // Called on error, interupt, or after running
83
-
84
-
85
- async finally() {
86
- var _this$percy;
87
-
88
- await ((_this$percy = this.percy) === null || _this$percy === void 0 ? void 0 : _this$percy.stop());
89
- }
90
-
91
- }
92
-
93
- exports.Exec = Exec;
94
-
95
- _defineProperty(Exec, "description", 'Start and stop Percy around a supplied command');
96
-
97
- _defineProperty(Exec, "strict", false);
98
-
99
- _defineProperty(Exec, "flags", { ..._cliCommand.flags.logging,
100
- ..._cliCommand.flags.discovery,
101
- ..._cliCommand.flags.config,
102
- ..._flags.default
103
- });
104
-
105
- _defineProperty(Exec, "examples", ['$ percy exec -- echo "percy is running around this echo command"', '$ percy exec -- yarn test']);
@@ -1,52 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Ping = void 0;
7
-
8
- var _cliCommand = _interopRequireWildcard(require("@percy/cli-command"));
9
-
10
- var _utils = require("@percy/client/dist/utils");
11
-
12
- var _logger = _interopRequireDefault(require("@percy/logger"));
13
-
14
- var _flags = _interopRequireDefault(require("../../flags"));
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
19
-
20
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
-
22
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
23
-
24
- class Ping extends _cliCommand.default {
25
- async run() {
26
- try {
27
- let {
28
- port
29
- } = this.flags;
30
- await (0, _utils.request)(`http://localhost:${port}/percy/healthcheck`, {
31
- method: 'GET'
32
- });
33
-
34
- _logger.default.info('Percy is running');
35
- } catch (err) {
36
- _logger.default.error('Percy is not running');
37
-
38
- _logger.default.debug(err.toString());
39
-
40
- this.exit(1);
41
- }
42
- }
43
-
44
- }
45
-
46
- exports.Ping = Ping;
47
-
48
- _defineProperty(Ping, "description", 'Pings a local running Percy snapshot server');
49
-
50
- _defineProperty(Ping, "flags", { ..._cliCommand.flags.logging,
51
- ..._flags.default
52
- });
@@ -1,57 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Start = void 0;
7
-
8
- var _cliCommand = _interopRequireWildcard(require("@percy/cli-command"));
9
-
10
- var _core = _interopRequireDefault(require("@percy/core"));
11
-
12
- var _logger = _interopRequireDefault(require("@percy/logger"));
13
-
14
- var _flags = _interopRequireDefault(require("../../flags"));
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
19
-
20
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
-
22
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
23
-
24
- class Start extends _cliCommand.default {
25
- async run() {
26
- if (!this.isPercyEnabled()) {
27
- _logger.default.info('Percy has been disabled. Not starting');
28
-
29
- return;
30
- }
31
-
32
- let percy = await _core.default.start({
33
- port: this.flags.port,
34
- config: false,
35
- ...this.percyrc()
36
- }); // only stop when terminated
37
-
38
- let stop = () => percy.stop();
39
-
40
- process.on('SIGHUP', stop);
41
- process.on('SIGINT', stop);
42
- process.on('SIGTERM', stop);
43
- }
44
-
45
- }
46
-
47
- exports.Start = Start;
48
-
49
- _defineProperty(Start, "description", 'Starts a local Percy snapshot server');
50
-
51
- _defineProperty(Start, "flags", { ..._cliCommand.flags.logging,
52
- ..._cliCommand.flags.discovery,
53
- ..._cliCommand.flags.config,
54
- ..._flags.default
55
- });
56
-
57
- _defineProperty(Start, "examples", ['$ percy exec:start', '$ percy exec:start &> percy.log']);
@@ -1,58 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Stop = void 0;
7
-
8
- var _cliCommand = _interopRequireWildcard(require("@percy/cli-command"));
9
-
10
- var _utils = require("@percy/client/dist/utils");
11
-
12
- var _logger = _interopRequireDefault(require("@percy/logger"));
13
-
14
- var _flags = _interopRequireDefault(require("../../flags"));
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
19
-
20
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
-
22
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
23
-
24
- class Stop extends _cliCommand.default {
25
- async run() {
26
- if (!this.isPercyEnabled()) {
27
- _logger.default.info('Percy is disabled');
28
-
29
- return;
30
- }
31
-
32
- try {
33
- let {
34
- port
35
- } = this.flags;
36
- await (0, _utils.request)(`http://localhost:${port}/percy/stop`, {
37
- method: 'POST'
38
- });
39
-
40
- _logger.default.info('Percy has stopped');
41
- } catch (err) {
42
- _logger.default.error('Percy is not running');
43
-
44
- _logger.default.debug(err.toString());
45
-
46
- this.exit(1);
47
- }
48
- }
49
-
50
- }
51
-
52
- exports.Stop = Stop;
53
-
54
- _defineProperty(Stop, "description", 'Stops a local running Percy snapshot server');
55
-
56
- _defineProperty(Stop, "flags", { ..._cliCommand.flags.logging,
57
- ..._flags.default
58
- });
package/dist/flags.js DELETED
@@ -1,17 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _cliCommand = require("@percy/cli-command");
9
-
10
- var _default = {
11
- port: _cliCommand.flags.integer({
12
- char: 'p',
13
- description: 'server port',
14
- default: process.env.PERCY_CLI_PORT || 5338
15
- })
16
- };
17
- exports.default = _default;
@@ -1 +0,0 @@
1
- {"version":"1.0.0-beta.7","commands":{"exec":{"id":"exec","description":"Start and stop Percy around a supplied command","pluginName":"@percy/cli-exec","pluginType":"core","aliases":[],"examples":["$ percy exec -- echo \"percy is running around this echo command\"","$ percy exec -- yarn test"],"flags":{"verbose":{"name":"verbose","type":"boolean","char":"v","description":"log everything","allowNo":false},"quiet":{"name":"quiet","type":"boolean","char":"q","description":"log errors only","allowNo":false},"silent":{"name":"silent","type":"boolean","description":"log nothing","allowNo":false},"allowed-hostname":{"name":"allowed-hostname","type":"option","char":"h","description":"allowed hostnames"},"network-idle-timeout":{"name":"network-idle-timeout","type":"option","char":"t","description":"asset discovery idle timeout"},"disable-asset-cache":{"name":"disable-asset-cache","type":"boolean","description":"disable asset discovery caches","allowNo":false},"config":{"name":"config","type":"option","char":"c","description":"configuration file path"},"port":{"name":"port","type":"option","char":"p","description":"server port","default":5338}},"args":[]},"exec:ping":{"id":"exec:ping","description":"Pings a local running Percy snapshot server","pluginName":"@percy/cli-exec","pluginType":"core","aliases":[],"flags":{"verbose":{"name":"verbose","type":"boolean","char":"v","description":"log everything","allowNo":false},"quiet":{"name":"quiet","type":"boolean","char":"q","description":"log errors only","allowNo":false},"silent":{"name":"silent","type":"boolean","description":"log nothing","allowNo":false},"port":{"name":"port","type":"option","char":"p","description":"server port","default":5338}},"args":[]},"exec:start":{"id":"exec:start","description":"Starts a local Percy snapshot server","pluginName":"@percy/cli-exec","pluginType":"core","aliases":[],"examples":["$ percy exec:start","$ percy exec:start &> percy.log"],"flags":{"verbose":{"name":"verbose","type":"boolean","char":"v","description":"log everything","allowNo":false},"quiet":{"name":"quiet","type":"boolean","char":"q","description":"log errors only","allowNo":false},"silent":{"name":"silent","type":"boolean","description":"log nothing","allowNo":false},"allowed-hostname":{"name":"allowed-hostname","type":"option","char":"h","description":"allowed hostnames"},"network-idle-timeout":{"name":"network-idle-timeout","type":"option","char":"t","description":"asset discovery idle timeout"},"disable-asset-cache":{"name":"disable-asset-cache","type":"boolean","description":"disable asset discovery caches","allowNo":false},"config":{"name":"config","type":"option","char":"c","description":"configuration file path"},"port":{"name":"port","type":"option","char":"p","description":"server port","default":5338}},"args":[]},"exec:stop":{"id":"exec:stop","description":"Stops a local running Percy snapshot server","pluginName":"@percy/cli-exec","pluginType":"core","aliases":[],"flags":{"verbose":{"name":"verbose","type":"boolean","char":"v","description":"log everything","allowNo":false},"quiet":{"name":"quiet","type":"boolean","char":"q","description":"log errors only","allowNo":false},"silent":{"name":"silent","type":"boolean","description":"log nothing","allowNo":false},"port":{"name":"port","type":"option","char":"p","description":"server port","default":5338}},"args":[]}}}