pruneStaleContainers function

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

Implementation

Future<void> pruneStaleContainers(
  String buildJobId,
  String runId, {
  required String workerId,
}) async {
  try {
    final prefix = 'openci-$workerId-';
    final current = containerName(workerId: workerId, buildJobId: buildJobId);

    final result = await Process.run('docker', [
      'ps',
      '-a',
      '--format',
      '{{.Names}}',
      '--filter',
      'name=$prefix',
    ]);

    if (result.exitCode != 0) return;

    final containers = LineSplitter.split(
      result.stdout.toString(),
    ).where((name) => name.isNotEmpty && name != current).toList();

    for (final container in containers) {
      await logInfo(buildJobId, runId, 'Removing stale container: $container');
      await stopAndRemoveContainer(container);
    }
  } catch (e) {
    await logWarning(buildJobId, runId, 'Error pruning stale containers: $e');
  }
}