pruneStaleVms function

Future<void> pruneStaleVms(
  1. String buildJobId,
  2. String runId, {
  3. required String workerId,
})

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');
  }
}