feat(native-host): kill previous instance on startup and in installers
CI / Build & Test (push) Successful in 3m20s
CI / Build & Test (push) Successful in 3m20s
- Add kill-previous-instance.mjs with PID lock file under BASE_DIR; on startup send SIGTERM to any existing native-host before binding ports - Register removePidFile on shutdown and exit - Run "stop any running native host" at the start of install.sh and install.ps1 - Use ESM with static imports so bare-pack includes the module in the bundle (dynamic require was not included and broke the built binary) - Add kill-previous-instance.mjs to CI syntax check
This commit is contained in:
@@ -75,7 +75,7 @@ jobs:
|
|||||||
node --check native-host/managers/rdp-manager.js
|
node --check native-host/managers/rdp-manager.js
|
||||||
node --check native-host/host/messenger.js
|
node --check native-host/host/messenger.js
|
||||||
node --check native-host/host/paths.js
|
node --check native-host/host/paths.js
|
||||||
node --check native-host/host/kill-previous-instance.js
|
node --check native-host/host/kill-previous-instance.mjs
|
||||||
node --check native-host/host/logger.js
|
node --check native-host/host/logger.js
|
||||||
node --check native-host/host/startup.js
|
node --check native-host/host/startup.js
|
||||||
node --check native-host/host/message-router.js
|
node --check native-host/host/message-router.js
|
||||||
|
|||||||
+8
-12
@@ -1,11 +1,13 @@
|
|||||||
/**
|
/**
|
||||||
* Kill any previously running native-host instance (same installation) before
|
* Kill any previously running native-host instance (same installation) before
|
||||||
* we bind to ports. Uses a PID file under BASE_DIR so the lock is per-install.
|
* we bind to ports. Uses a PID file under BASE_DIR so the lock is per-install.
|
||||||
|
* ESM so bare-pack includes it when bundling from index.mjs.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const path = require('bare-path');
|
import path from 'bare-path';
|
||||||
const fs = require('bare-fs');
|
import fs from 'bare-fs';
|
||||||
const { BASE_DIR } = require('./paths.js');
|
import pathsModule from './paths.js';
|
||||||
|
const { BASE_DIR } = pathsModule;
|
||||||
|
|
||||||
const PID_FILE = path.join(BASE_DIR, '.holesail-browser-host.pid');
|
const PID_FILE = path.join(BASE_DIR, '.holesail-browser-host.pid');
|
||||||
|
|
||||||
@@ -24,7 +26,7 @@ function isProcessAlive(pid) {
|
|||||||
* SIGTERM. Then write our PID to the lock file. Does not wait for the old
|
* SIGTERM. Then write our PID to the lock file. Does not wait for the old
|
||||||
* process to exit.
|
* process to exit.
|
||||||
*/
|
*/
|
||||||
function killPreviousInstanceSync() {
|
export function killPreviousInstanceSync() {
|
||||||
let existingPid = null;
|
let existingPid = null;
|
||||||
try {
|
try {
|
||||||
const raw = fs.readFileSync(PID_FILE, 'utf8');
|
const raw = fs.readFileSync(PID_FILE, 'utf8');
|
||||||
@@ -43,20 +45,14 @@ function killPreviousInstanceSync() {
|
|||||||
writePidFile();
|
writePidFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
function writePidFile() {
|
export function writePidFile() {
|
||||||
try {
|
try {
|
||||||
fs.writeFileSync(PID_FILE, String(process.pid), 'utf8');
|
fs.writeFileSync(PID_FILE, String(process.pid), 'utf8');
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
function removePidFile() {
|
export function removePidFile() {
|
||||||
try {
|
try {
|
||||||
fs.unlinkSync(PID_FILE);
|
fs.unlinkSync(PID_FILE);
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
killPreviousInstanceSync,
|
|
||||||
writePidFile,
|
|
||||||
removePidFile
|
|
||||||
};
|
|
||||||
@@ -14,9 +14,7 @@
|
|||||||
|
|
||||||
import 'bare-process/global';
|
import 'bare-process/global';
|
||||||
import './set-tmpdir.mjs';
|
import './set-tmpdir.mjs';
|
||||||
import { createRequire } from 'module';
|
import { killPreviousInstanceSync, removePidFile } from './host/kill-previous-instance.mjs';
|
||||||
const require = createRequire(import.meta.url);
|
|
||||||
const { killPreviousInstanceSync, removePidFile } = require('./host/kill-previous-instance.js');
|
|
||||||
import _messenger from './host/messenger.js';
|
import _messenger from './host/messenger.js';
|
||||||
import _host from './host/message-router.js';
|
import _host from './host/message-router.js';
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIID6TCCAtGgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBhjEcMBoGA1UEAxMTSG9s
|
||||||
|
ZXNhaWwgQnJvd3NlciBDQTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYD
|
||||||
|
VQQHEw1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBIb2xlc2FpbCBCcm93c2VyMRkw
|
||||||
|
FwYDVQQLExBIb2xlc2FpbCBSb290IENBMB4XDTI2MDMxNTAzMzEwN1oXDTM2MDMx
|
||||||
|
NTAzMzEwN1owgYYxHDAaBgNVBAMTE0hvbGVzYWlsIEJyb3dzZXIgQ0ExCzAJBgNV
|
||||||
|
BAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEZMBcG
|
||||||
|
A1UEChMQSG9sZXNhaWwgQnJvd3NlcjEZMBcGA1UECxMQSG9sZXNhaWwgUm9vdCBD
|
||||||
|
QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKDQBrJFw1wTO9iUr4UO
|
||||||
|
pU0SWhC0QfrfHbMkbqbgQx2WA11Hfblc2C/MwS1M46SbtkMCGVTedL0zmPnS0nX1
|
||||||
|
S8VEbDyqGnOh41CekQfinFhGL8vDJEHIJSB1pQV3RZFRZHJbnSfcsRG/WZU6FjOM
|
||||||
|
FD7x21oLzHPivFxktqPR68iCP/Xd2wXFupHrAIy9cgLh8CC3S2WAcG6HLKPIQ6LK
|
||||||
|
eW2l72+/yJef9EselZl2URrzDiKaMqvJ5Ybc653xXN+SASPJy3IPtzLPvZ1KhN4u
|
||||||
|
V0uLorri4Z8cYgzx+g7AwCix77WxXP1eKlsyw5MFRW/NoWzaavDIwZxc6BT04pC+
|
||||||
|
H28CAwEAAaNgMF4wDwYDVR0TBAgwBgEB/wIBADALBgNVHQ8EBAMCAQYwHQYDVR0O
|
||||||
|
BBYEFKyzccFCZF7DqyD40JwG2I5oX43UMB8GA1UdIwQYMBaAFKyzccFCZF7DqyD4
|
||||||
|
0JwG2I5oX43UMA0GCSqGSIb3DQEBCwUAA4IBAQCaGl27sR25Z4ZhbuWLA4eKLLmv
|
||||||
|
TNxl8aqVX/ItQIMN4lSHLe2vLGyJwYfqLNVFITaLhSp3gmEhMYOOUW145NFrkHHQ
|
||||||
|
D6RBKQGjLJbYWH8fgyzgG0l1x0dFcY7DIh4qkoNl4bZqNEwbSCSV1Cy4RFD6uKPU
|
||||||
|
xpIOWPCMkfJxsOFNOVjZ9IwrYfyNeFbR/qfbp79VG7XOaVpsvdlSL4MjFUtFedxz
|
||||||
|
ncqwcCboIyufRzvvgiLMSk8OzRwne3eUQFhfeDhM60pdscADRG40gpOv76hWhQyO
|
||||||
|
Dw4TVzgCl2+cvESXV0rlYEMo4vN63f6BEh4T5gCn3sTqVjfR0GayMrKs4Zxx
|
||||||
|
-----END CERTIFICATE-----
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEowIBAAKCAQEAoNAGskXDXBM72JSvhQ6lTRJaELRB+t8dsyRupuBDHZYDXUd9
|
||||||
|
uVzYL8zBLUzjpJu2QwIZVN50vTOY+dLSdfVLxURsPKoac6HjUJ6RB+KcWEYvy8Mk
|
||||||
|
QcglIHWlBXdFkVFkcludJ9yxEb9ZlToWM4wUPvHbWgvMc+K8XGS2o9HryII/9d3b
|
||||||
|
BcW6kesAjL1yAuHwILdLZYBwbocso8hDosp5baXvb7/Il5/0Sx6VmXZRGvMOIpoy
|
||||||
|
q8nlhtzrnfFc35IBI8nLcg+3Ms+9nUqE3i5XS4uiuuLhnxxiDPH6DsDAKLHvtbFc
|
||||||
|
/V4qWzLDkwVFb82hbNpq8MjBnFzoFPTikL4fbwIDAQABAoIBAG5WrfGOCoBXth1h
|
||||||
|
z5ilNuhN6jxB4m+mvTMYkU+w2nwnXQGYtvwDZ1ZM0FMryZo9OO57NzRTOphDGfh4
|
||||||
|
He3PtACTdQyezm1+q4C6e9qEMzAiYFMX/v2fvVGrRuIcN0CBL0GD+K3MMDZ0K5xH
|
||||||
|
ccpGl/GkcxQyukLdVM60T9jRhU1acuRBPw2LXgKDJkykbcru2IBKqcnmztHAimEF
|
||||||
|
RlGOL6270JIpwKlY9fAYjskccB6Vhzn+m3sMlMLM/qs3PdBuJa11D0fwjEvWUXYe
|
||||||
|
6Wkhijpb2sTXI2+mLuqiQDSmE4MQmCWhpCNS4kb8GbCvT24DF86lbL7ySsfCaP03
|
||||||
|
S9ARWMkCgYEAzKyeYx0C0izDNkWFLZvvUWm/JAC0t/nqoLafBA3INzLM7/r8xaAd
|
||||||
|
apnrLLySxI2pq5WNAzVJqRAeKW06Tjv08ZfgS5uDE7ihcA4oY2EbLwLFm2ZCqEJg
|
||||||
|
iJycSPa8YU5ltjyNFkhqOOYiTFehAEQNgf5xKZEfjqAcG1OnCb3KC40CgYEAySOj
|
||||||
|
hbF9nru3sd4WaHc0F+tVTadST9S1WEaW+Xv9mbc0QYY0FpWl9tPxWRVkKOOViVW4
|
||||||
|
uGxCPWO/sIYFO/JGWVv+vd6lWFrnxo0iB/AXkrjtKu/NX8qoWmS4TV/rOqH1Zfxp
|
||||||
|
4A4vlI8BZedOHLVdrenAA/L3/5gCMdOA0Ron2esCgYAGO8unIR8Q36QiZwOjW/hx
|
||||||
|
9lKH+i2G3Om0c1tseC7832M2e+Ju8m1y7bUn66ZcriPYwflFe73+lCsW/+iisVjI
|
||||||
|
cuO16cqYMytXilbYkACP8fmqvfaRwVPHVV29KyaZoBWg8z8oypPRn9CzmoegxnHS
|
||||||
|
37j6lxzq7x1sB6Qyu8EHkQKBgQCkSeHU36a1sqpWNAqlhUgdiXEBnnuTDTCaS/4h
|
||||||
|
BW+c0JF0O8Pr9ou60l693sUSyOFpbYUVzgdE0WbPLoiz8C4Z6xRlzafMRWQvPzPe
|
||||||
|
u/LlOvstKPXdGlDslHwdZw1htMwWY1evVKb0duIzc/zPYiyEUvstvpVmRaj1PcZo
|
||||||
|
BS8rxQKBgAhC1nXDFQDgRxbMly/MuDTWsjBI7yK6gVg3ujXMW2x5NFQfENukO8O4
|
||||||
|
oV1yDqNitM8AYHOP9j/mYQ7VfJz0ZlYCmAYwk7roSpuYAK6dk54ZtKtOpD0mlAHU
|
||||||
|
W8kWpEmyAbJWdAUfVK60mS3hu4iFLKQmJO8qViHcvwNDjcYHMvkG
|
||||||
|
-----END RSA PRIVATE KEY-----
|
||||||
Reference in New Issue
Block a user