Skip to content

Commit

Permalink
✨ feat: Detect Chrome orphans in cypress-process-clean-up
Browse files Browse the repository at this point in the history
  • Loading branch information
honzabubenik committed Mar 8, 2024
1 parent 94d1b48 commit 538b38d
Show file tree
Hide file tree
Showing 5 changed files with 143 additions and 16 deletions.
4 changes: 3 additions & 1 deletion dist/main/index.js

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion dist/post/index.js

Large diffs are not rendered by default.

95 changes: 95 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"compile": "ncc build --minify --no-cache --target es2022 --v8-cache"
},
"dependencies": {
"@actions/core": "^1.10.1",
"ps-list": "^8.1.1"
},
"devDependencies": {
Expand Down
55 changes: 41 additions & 14 deletions src/clean-up.ts
Original file line number Diff line number Diff line change
@@ -1,33 +1,60 @@
import psList, { ProcessDescriptor } from 'ps-list';
import * as core from '@actions/core';

const workspace: string = process.env.GITHUB_WORKSPACE || '';

export const terminateOrphans = async (): Promise<void> => {
const processes: ProcessDescriptor[] = await psList();

const chromeProcesses: ProcessDescriptor[] = processes.filter(
(p: ProcessDescriptor) => p.cmd?.includes('/chrome/chrome')
);
const cypressProcesses: ProcessDescriptor[] = processes.filter(
(p: ProcessDescriptor) => p.cmd?.includes('/Cypress/Cypress') && p.cmd.includes('--run-project')
);
const cypressOrphans: ProcessDescriptor[] = cypressProcesses.filter(
(p: ProcessDescriptor) => p.cmd?.includes(`--run-project ${workspace}`)
);
const chromeProcesses: ProcessDescriptor[] = processes.filter(
(p: ProcessDescriptor) => p.cmd?.includes('/chrome/chrome')
);
const chromeOrphans: ProcessDescriptor[] = cypressProcesses.length === 0 ? [...chromeProcesses] : [];

console.log('Chrome processes:', chromeProcesses.length);
console.log('Cypress processes:', cypressProcesses.length);
console.log('Cypress orphans:', cypressOrphans.length);
core.startGroup(`Cypress processes: ${cypressProcesses.length}`);
cypressProcesses.forEach((p: ProcessDescriptor): void => {
console.log(`${p.pid} ${p.cmd}`);
});
core.endGroup();

cypressOrphans.forEach((cypressProcess: ProcessDescriptor): void => {
core.startGroup(`Cypress orphans: ${cypressOrphans.length}`);
cypressOrphans.forEach((p: ProcessDescriptor): void => {
console.log(`${p.pid} ${p.cmd}`);
});
core.endGroup();

core.startGroup(`Chrome processes: ${chromeProcesses.length}`);
chromeProcesses.forEach((p: ProcessDescriptor): void => {
console.log(`${p.pid} ${p.cmd}`);
});
core.endGroup();

core.startGroup(`Chrome orphans: ${chromeOrphans.length}`);
chromeOrphans.forEach((p: ProcessDescriptor): void => {
console.log(`${p.pid} ${p.cmd}`);
});
core.endGroup();

cypressOrphans.forEach((cypressOrphan: ProcessDescriptor): void => {
chromeProcesses
.filter((chromeProcess: ProcessDescriptor) => chromeProcess.cmd?.includes(`run-${cypressProcess.pid}`))
.forEach((chromeProcess: ProcessDescriptor): void => {
console.log(`Killing Chrome process ${chromeProcess.pid} ${chromeProcess.cmd}\n`);
process.kill(chromeProcess.pid, 'SIGKILL');
.filter((p: ProcessDescriptor) => p.cmd?.includes(`run-${cypressOrphan.pid}`))
.forEach((p: ProcessDescriptor): void => {
console.log(`Killing Chrome process ${p.pid} ${p.cmd}\n`);
process.kill(p.pid, 'SIGKILL');
});

console.log(`Killing Cypress process ${cypressProcess.pid} ${cypressProcess.cmd}\n`);
process.kill(cypressProcess.pid, 'SIGKILL');
console.log(`Killing Cypress process ${cypressOrphan.pid} ${cypressOrphan.cmd}\n`);
process.kill(cypressOrphan.pid, 'SIGKILL');
});

chromeOrphans.forEach((chromeOrphan: ProcessDescriptor): void => {
console.log(`Killing Chrome process ${chromeOrphan.pid} ${chromeOrphan.cmd}\n`);
process.kill(chromeOrphan.pid, 'SIGKILL');
});
}
};

0 comments on commit 538b38d

Please sign in to comment.