pruneStaleVms function
Implementation
Future<void> pruneStaleVms(
String buildJobId,
String runId, {
required String workerId,
}) async {
try {
// Kill zombie processes first to release file locks and free memory
await _killZombieVirtualizationProcesses(workerId);
final prefix = 'openci-vm-$workerId-';
final currentVm = currentVmName(workerId: workerId, buildJobId: buildJobId);
final vms = await VirtualMachine.list();
final staleVms = vms
.where((vm) => vm.name.startsWith(prefix) && vm.name != currentVm)
.toList();
for (final vm in staleVms) {
_log.info('[$runId] Deleting stale VM: ${vm.name}');
await VirtualMachine.delete(vm.name);
}
} catch (e) {
_log.warning('[$runId] Error pruning stale VMs: $e');
}
}