saucectl 0.164.0 → 0.164.2
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 +1 -1
- package/index.js +94 -60
- package/install.js +9 -4
- package/package.json +18 -13
package/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Node.js saucectl Wrapper 
|
2
2
|
========================
|
3
3
|
|
4
|
-
Node.js wrapper for saucectl
|
4
|
+
Node.js wrapper for [saucectl](https://github.com/saucelabs/saucectl).
|
5
5
|
|
6
6
|
## Install
|
7
7
|
|
package/index.js
CHANGED
@@ -4,83 +4,117 @@ const path = require('path');
|
|
4
4
|
const { BinWrapper } = require('@saucelabs/bin-wrapper');
|
5
5
|
const { Writable } = require('stream');
|
6
6
|
|
7
|
-
const version = '0.164.
|
8
|
-
const defaultBinInstallBase =
|
7
|
+
const version = '0.164.2';
|
8
|
+
const defaultBinInstallBase =
|
9
|
+
'https://github.com/saucelabs/saucectl/releases/download';
|
9
10
|
const binWrapper = (binInstallURL = null, binInstallBase = null) => {
|
10
|
-
|
11
|
+
const bw = new BinWrapper();
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
const base = binInstallBase || defaultBinInstallBase;
|
13
|
+
if (process.env.GITHUB_TOKEN) {
|
14
|
+
bw.httpOptions({
|
15
|
+
headers: {
|
16
|
+
authorization: `Bearer ${process.env.GITHUB_TOKEN}`,
|
17
|
+
},
|
18
|
+
});
|
19
|
+
}
|
21
20
|
|
22
|
-
|
23
|
-
{ url: `${base}/v${version}/saucectl_${version}_mac_64-bit.tar.gz`, os: 'darwin', arch: 'x64' },
|
24
|
-
{ url: `${base}/v${version}/saucectl_${version}_mac_arm64.tar.gz`, os: 'darwin', arch: 'arm64' },
|
25
|
-
{ url: `${base}/v${version}/saucectl_${version}_linux_32-bit.tar.gz`, os: 'linux', arch: 'x86' },
|
26
|
-
{ url: `${base}/v${version}/saucectl_${version}_linux_64-bit.tar.gz`, os: 'linux', arch: 'x64' },
|
27
|
-
{ url: `${base}/v${version}/saucectl_${version}_linux_arm64.tar.gz`, os: 'linux', arch: 'arm64' },
|
28
|
-
{ url: `${base}/v${version}/saucectl_${version}_win_32-bit.zip`, os: 'win32', arch: 'x86' },
|
29
|
-
{ url: `${base}/v${version}/saucectl_${version}_win_64-bit.zip`, os: 'win32', arch: 'x64' },
|
30
|
-
];
|
21
|
+
const base = binInstallBase || defaultBinInstallBase;
|
31
22
|
|
32
|
-
|
23
|
+
let sources = [
|
24
|
+
{
|
25
|
+
url: `${base}/v${version}/saucectl_${version}_mac_64-bit.tar.gz`,
|
26
|
+
os: 'darwin',
|
27
|
+
arch: 'x64',
|
28
|
+
},
|
29
|
+
{
|
30
|
+
url: `${base}/v${version}/saucectl_${version}_mac_arm64.tar.gz`,
|
31
|
+
os: 'darwin',
|
32
|
+
arch: 'arm64',
|
33
|
+
},
|
34
|
+
{
|
35
|
+
url: `${base}/v${version}/saucectl_${version}_linux_32-bit.tar.gz`,
|
36
|
+
os: 'linux',
|
37
|
+
arch: 'x86',
|
38
|
+
},
|
39
|
+
{
|
40
|
+
url: `${base}/v${version}/saucectl_${version}_linux_64-bit.tar.gz`,
|
41
|
+
os: 'linux',
|
42
|
+
arch: 'x64',
|
43
|
+
},
|
44
|
+
{
|
45
|
+
url: `${base}/v${version}/saucectl_${version}_linux_arm64.tar.gz`,
|
46
|
+
os: 'linux',
|
47
|
+
arch: 'arm64',
|
48
|
+
},
|
49
|
+
{
|
50
|
+
url: `${base}/v${version}/saucectl_${version}_win_32-bit.zip`,
|
51
|
+
os: 'win32',
|
52
|
+
arch: 'x86',
|
53
|
+
},
|
54
|
+
{
|
55
|
+
url: `${base}/v${version}/saucectl_${version}_win_64-bit.zip`,
|
56
|
+
os: 'win32',
|
57
|
+
arch: 'x64',
|
58
|
+
},
|
59
|
+
];
|
33
60
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
if (sources.length === 0) {
|
38
|
-
return Promise.reject(new Error(`No binary found matching your system. It's probably not supported.`));
|
39
|
-
}
|
61
|
+
sources = sources.filter(
|
62
|
+
(x) => process.platform === x.os && process.arch === x.arch,
|
63
|
+
);
|
40
64
|
|
41
|
-
|
65
|
+
if (binInstallURL) {
|
66
|
+
bw.src(binInstallURL, process.platform, process.arch);
|
67
|
+
} else {
|
68
|
+
if (sources.length === 0) {
|
69
|
+
return Promise.reject(
|
70
|
+
new Error(
|
71
|
+
`No binary found matching your system. It's probably not supported.`,
|
72
|
+
),
|
73
|
+
);
|
42
74
|
}
|
43
75
|
|
44
|
-
bw.
|
45
|
-
|
76
|
+
bw.src(sources[0].url, process.platform, process.arch);
|
77
|
+
}
|
46
78
|
|
47
|
-
|
48
|
-
|
79
|
+
bw.dest(path.join(__dirname, 'bin'));
|
80
|
+
bw.use(process.platform.startsWith('win') ? 'saucectl.exe' : 'saucectl');
|
49
81
|
|
50
|
-
|
51
|
-
|
52
|
-
const st = new Writable();
|
53
|
-
st._write = (d) => buf = Buffer.concat([buf, d]);
|
82
|
+
return bw;
|
83
|
+
};
|
54
84
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
85
|
+
async function preRun(b) {
|
86
|
+
let buf = Buffer.from('');
|
87
|
+
const st = new Writable();
|
88
|
+
st._write = (d) => (buf = Buffer.concat([buf, d]));
|
59
89
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
90
|
+
const exitCode = await b.run(['--version'], {
|
91
|
+
stdout: st,
|
92
|
+
stderr: st,
|
93
|
+
});
|
94
|
+
|
95
|
+
if (exitCode !== 0) {
|
96
|
+
console.log('Post-installation checks failed. saucectl output was:');
|
97
|
+
console.log(buf.toString());
|
98
|
+
process.exit(exitCode);
|
99
|
+
}
|
66
100
|
}
|
67
101
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
process.exit(code);
|
77
|
-
});
|
102
|
+
async function main(b, args) {
|
103
|
+
await preRun(b);
|
104
|
+
const saucectlProcess = spawn(b.path(), args, {
|
105
|
+
stdio: [process.stdin, process.stdout, process.stderr],
|
106
|
+
});
|
107
|
+
saucectlProcess.on('exit', function (code) {
|
108
|
+
process.exit(code);
|
109
|
+
});
|
78
110
|
}
|
79
111
|
|
80
|
-
/* istanbul ignore if */
|
81
112
|
if (require.main === module) {
|
82
|
-
|
83
|
-
|
113
|
+
const bw = binWrapper(
|
114
|
+
process.env.SAUCECTL_INSTALL_BINARY,
|
115
|
+
process.env.SAUCECTL_INSTALL_BINARY_MIRROR,
|
116
|
+
);
|
117
|
+
main(bw, process.argv.slice(2));
|
84
118
|
}
|
85
119
|
|
86
120
|
module.exports = main;
|
package/install.js
CHANGED
@@ -5,9 +5,12 @@ const { binWrapper } = require('./index.js');
|
|
5
5
|
// execute "saucectl --version".
|
6
6
|
// So we are 100% sure that the saucectl binary will be available for the next
|
7
7
|
// execution.
|
8
|
-
async function install
|
8
|
+
async function install() {
|
9
9
|
console.info('Fetching saucectl binary');
|
10
|
-
const bw = binWrapper(
|
10
|
+
const bw = binWrapper(
|
11
|
+
process.env.SAUCECTL_INSTALL_BINARY,
|
12
|
+
process.env.SAUCECTL_INSTALL_BINARY_MIRROR,
|
13
|
+
);
|
11
14
|
bw.run(['--version'])
|
12
15
|
.then(() => {
|
13
16
|
console.info(`Installation succeed`);
|
@@ -15,13 +18,15 @@ async function install () {
|
|
15
18
|
})
|
16
19
|
.catch((e) => {
|
17
20
|
console.error(`Installation failed: ${e}`);
|
18
|
-
console.error(
|
21
|
+
console.error(
|
22
|
+
`Check that you have access to https://github.com/saucelabs/saucectl/releases or format of the SAUCECTL_INSTALL_BINARY environment variable is correct\n\n`,
|
23
|
+
);
|
19
24
|
process.exit(1);
|
20
25
|
});
|
21
26
|
}
|
22
27
|
|
23
28
|
if (require.main === module) {
|
24
|
-
|
29
|
+
install();
|
25
30
|
}
|
26
31
|
|
27
32
|
module.exports = install;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "saucectl",
|
3
|
-
"version": "0.164.
|
3
|
+
"version": "0.164.2",
|
4
4
|
"description": "Node.js wrapper for saucectl",
|
5
5
|
"main": "index.js",
|
6
6
|
"bin": "index.js",
|
@@ -11,9 +11,9 @@
|
|
11
11
|
"release:patch": "np patch",
|
12
12
|
"release:minor": "np minor",
|
13
13
|
"release:major": "np major",
|
14
|
-
"
|
15
|
-
"
|
16
|
-
"test
|
14
|
+
"lint": "prettier --check '**/*.{js,ts,mjs,cjs}' && eslint .",
|
15
|
+
"fmt": "prettier --write '**/*.{js,ts,mjs,cjs}'",
|
16
|
+
"test": "jest",
|
17
17
|
"version": "run-p version:* && git add .",
|
18
18
|
"version:bump": "replace-in-files --regex=\"version = '\\d+.\\d+.\\d+'\" --replacement=\"version = '${npm_package_version}'\" ./index.js"
|
19
19
|
},
|
@@ -35,18 +35,23 @@
|
|
35
35
|
"url": "https://github.com/saucelabs/node-saucectl/issues"
|
36
36
|
},
|
37
37
|
"homepage": "https://github.com/saucelabs/node-saucectl#readme",
|
38
|
+
"engines": {
|
39
|
+
"node": ">=16.13.2"
|
40
|
+
},
|
38
41
|
"dependencies": {
|
39
|
-
"@saucelabs/bin-wrapper": "^0.
|
42
|
+
"@saucelabs/bin-wrapper": "^1.0.0"
|
40
43
|
},
|
41
44
|
"devDependencies": {
|
42
|
-
"eslint": "^
|
43
|
-
"eslint-
|
44
|
-
"eslint-plugin-
|
45
|
-
"
|
46
|
-
"
|
45
|
+
"eslint": "^8.51.0",
|
46
|
+
"eslint-config-prettier": "^9.0.0",
|
47
|
+
"eslint-plugin-jest": "^27.4.2",
|
48
|
+
"eslint-plugin-prettier": "^5.0.1",
|
49
|
+
"jest": "^29.7.0",
|
50
|
+
"np": "^8.0.4",
|
47
51
|
"npm-run-all": "^4.1.5",
|
48
|
-
"
|
49
|
-
"
|
50
|
-
"
|
52
|
+
"prettier": "^3.0.3",
|
53
|
+
"replace-in-files-cli": "^2.2.0",
|
54
|
+
"rimraf": "^5.0.5",
|
55
|
+
"ts-jest": "^29.1.1"
|
51
56
|
}
|
52
57
|
}
|