@alwaysmeticulous/remote-replay-launcher 2.150.0 → 2.152.0
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/dist/index.d.ts +1 -1
- package/dist/index.js +30 -13
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +5 -0
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { ExecuteRemoteTestRunOptions, ExecuteRemoteTestRunResult } from "./types";
|
|
2
2
|
export { TunnelData } from "./types";
|
|
3
|
-
export declare const executeRemoteTestRun: ({ apiToken: apiToken_, appUrl, commitSha, secureTunnelHost, onTunnelCreated, onTestRunCreated, onProgressUpdate, keepTunnelOpenPromise, environment, }: ExecuteRemoteTestRunOptions) => Promise<ExecuteRemoteTestRunResult>;
|
|
3
|
+
export declare const executeRemoteTestRun: ({ apiToken: apiToken_, appUrl, commitSha, secureTunnelHost, onTunnelCreated, onTestRunCreated, onProgressUpdate, onTunnelStillLocked, keepTunnelOpenPromise, environment, isLockable, }: ExecuteRemoteTestRunOptions) => Promise<ExecuteRemoteTestRunResult>;
|
package/dist/index.js
CHANGED
|
@@ -9,9 +9,10 @@ const common_1 = require("@alwaysmeticulous/common");
|
|
|
9
9
|
const tunnels_client_1 = require("@alwaysmeticulous/tunnels-client");
|
|
10
10
|
const loglevel_1 = __importDefault(require("loglevel"));
|
|
11
11
|
const url_utils_1 = require("./url.utils");
|
|
12
|
+
const POLL_LOCK_INTERVAL_MS = 5000; // 5 seconds
|
|
12
13
|
const PROGRESS_UPDATE_INTERVAL_MS = 5000; // 5 seconds
|
|
13
14
|
const MS_TO_WAIT_FOR_RETRY = 5 * 60 * 1000; // 5 minutes
|
|
14
|
-
const executeRemoteTestRun = async ({ apiToken: apiToken_, appUrl, commitSha, secureTunnelHost, onTunnelCreated, onTestRunCreated, onProgressUpdate, keepTunnelOpenPromise, environment, }) => {
|
|
15
|
+
const executeRemoteTestRun = async ({ apiToken: apiToken_, appUrl, commitSha, secureTunnelHost, onTunnelCreated, onTestRunCreated, onProgressUpdate, onTunnelStillLocked, keepTunnelOpenPromise, environment, isLockable, }) => {
|
|
15
16
|
const logger = loglevel_1.default.getLogger(common_1.METICULOUS_LOGGER_NAME);
|
|
16
17
|
const apiToken = (0, client_1.getApiToken)(apiToken_);
|
|
17
18
|
if (!apiToken) {
|
|
@@ -48,17 +49,19 @@ const executeRemoteTestRun = async ({ apiToken: apiToken_, appUrl, commitSha, se
|
|
|
48
49
|
basicAuthUser: tunnel.basicAuthUser,
|
|
49
50
|
basicAuthPassword: tunnel.basicAuthPassword,
|
|
50
51
|
});
|
|
51
|
-
const
|
|
52
|
+
const response = await (0, client_1.executeSecureTunnelTestRun)({
|
|
52
53
|
client,
|
|
53
54
|
headSha: commitSha,
|
|
54
55
|
tunnelUrl: tunnel.url,
|
|
55
56
|
basicAuthUser: tunnel.basicAuthUser,
|
|
56
57
|
basicAuthPassword: tunnel.basicAuthPassword,
|
|
57
58
|
environment,
|
|
59
|
+
isLockable,
|
|
58
60
|
});
|
|
59
|
-
if (!testRun) {
|
|
61
|
+
if (!response.testRun) {
|
|
60
62
|
throw new Error("Test run was not created");
|
|
61
63
|
}
|
|
64
|
+
const { testRun, deploymentId } = response;
|
|
62
65
|
onTestRunCreated === null || onTestRunCreated === void 0 ? void 0 : onTestRunCreated(testRun);
|
|
63
66
|
const testRunCompleted = (0, common_1.defer)();
|
|
64
67
|
let progressUpdateInterval = undefined;
|
|
@@ -79,16 +82,7 @@ const executeRemoteTestRun = async ({ apiToken: apiToken_, appUrl, commitSha, se
|
|
|
79
82
|
if (progressUpdateInterval) {
|
|
80
83
|
clearInterval(progressUpdateInterval);
|
|
81
84
|
}
|
|
82
|
-
|
|
83
|
-
void keepTunnelOpenPromise.then(() => {
|
|
84
|
-
tunnel.close();
|
|
85
|
-
testRunCompleted.resolve(completedTestRun);
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
tunnel.close();
|
|
90
|
-
testRunCompleted.resolve(completedTestRun);
|
|
91
|
-
}
|
|
85
|
+
testRunCompleted.resolve(completedTestRun);
|
|
92
86
|
};
|
|
93
87
|
// Poll every few seconds for progress updates and exit when the test run is completed
|
|
94
88
|
progressUpdateInterval = setInterval(async () => {
|
|
@@ -104,6 +98,29 @@ const executeRemoteTestRun = async ({ apiToken: apiToken_, appUrl, commitSha, se
|
|
|
104
98
|
}
|
|
105
99
|
}, PROGRESS_UPDATE_INTERVAL_MS);
|
|
106
100
|
const completedTestRun = await testRunCompleted.promise;
|
|
101
|
+
const tunnelUnlocked = (0, common_1.defer)();
|
|
102
|
+
let tunnelCheckInterval = undefined;
|
|
103
|
+
const checkUnlocked = async () => {
|
|
104
|
+
const isLocked = await (0, client_1.getIsLocked)({ client, deploymentId });
|
|
105
|
+
if (isLocked) {
|
|
106
|
+
onTunnelStillLocked === null || onTunnelStillLocked === void 0 ? void 0 : onTunnelStillLocked();
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
tunnelUnlocked.resolve();
|
|
110
|
+
return true;
|
|
111
|
+
};
|
|
112
|
+
const alreadyUnlocked = await checkUnlocked();
|
|
113
|
+
if (!alreadyUnlocked) {
|
|
114
|
+
tunnelCheckInterval = setInterval(checkUnlocked, POLL_LOCK_INTERVAL_MS);
|
|
115
|
+
await tunnelUnlocked.promise;
|
|
116
|
+
}
|
|
117
|
+
if (tunnelCheckInterval) {
|
|
118
|
+
clearInterval(tunnelCheckInterval);
|
|
119
|
+
}
|
|
120
|
+
if (keepTunnelOpenPromise) {
|
|
121
|
+
await keepTunnelOpenPromise;
|
|
122
|
+
}
|
|
123
|
+
tunnel.close();
|
|
107
124
|
return {
|
|
108
125
|
testRun: completedTestRun,
|
|
109
126
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -12,12 +12,17 @@ export interface ExecuteRemoteTestRunOptions {
|
|
|
12
12
|
onTunnelCreated?: (data: TunnelData) => void;
|
|
13
13
|
onTestRunCreated?: (testRun: TestRun) => void;
|
|
14
14
|
onProgressUpdate?: (testRun: TestRun) => void;
|
|
15
|
+
/**
|
|
16
|
+
* Called periodically when the test run has completed but the tunnel is still locked.
|
|
17
|
+
*/
|
|
18
|
+
onTunnelStillLocked?: () => void;
|
|
15
19
|
/**
|
|
16
20
|
* If set, the tunnel will be kept open until this promise is resolved.
|
|
17
21
|
* `executeRemoteTestRun` will not resolve until this promise is resolved.
|
|
18
22
|
*/
|
|
19
23
|
keepTunnelOpenPromise?: Promise<void>;
|
|
20
24
|
environment: string;
|
|
25
|
+
isLockable: boolean;
|
|
21
26
|
}
|
|
22
27
|
export interface ExecuteRemoteTestRunResult {
|
|
23
28
|
testRun: TestRun;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alwaysmeticulous/remote-replay-launcher",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.152.0",
|
|
4
4
|
"description": "Executes a remote replay on Meticulous' infrastructure",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
"test": "jest --passWithNoTests"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@alwaysmeticulous/client": "^2.
|
|
24
|
-
"@alwaysmeticulous/common": "^2.
|
|
23
|
+
"@alwaysmeticulous/client": "^2.152.0",
|
|
24
|
+
"@alwaysmeticulous/common": "^2.152.0",
|
|
25
25
|
"@alwaysmeticulous/tunnels-client": "^2.143.0",
|
|
26
26
|
"loglevel": "^1.8.0"
|
|
27
27
|
},
|
|
@@ -45,5 +45,5 @@
|
|
|
45
45
|
"jest": {
|
|
46
46
|
"preset": "../../jest.config.js"
|
|
47
47
|
},
|
|
48
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "95717c6bee4830ff0c977ba642d6253753952481"
|
|
49
49
|
}
|