import 'dart:io'; import 'package:podman/podman.dart'; Future main(List args) async { if (args.isEmpty || args.contains('--help') || args.contains('-h')) { _printUsage(); return; } final flags = args .where((arg) => arg.startsWith('--')) .toList(growable: false); final positional = args .where((arg) => !arg.startsWith('--')) .toList(growable: false); if (positional.isEmpty) { stderr.writeln('Provide at least one container or pod name.'); _printUsage(); exitCode = 64; return; } final kubeOutPath = _readOption(flags, 'kube-out'); final systemdDirPath = _readOption(flags, 'systemd-dir'); final systemdTarget = _readOption(flags, 'systemd-target') ?? positional.first; final includeService = !flags.contains('--no-service'); final podmanOnly = !flags.contains('--no-podman-only'); final noTrunc = flags.contains('--no-trunc'); final client = PodmanClient(); try { final kubeYaml = await client.generateKube( GenerateKubeOptions( names: positional, service: includeService, podmanOnly: podmanOnly, noTrunc: noTrunc, ), ); if (kubeOutPath != null && kubeOutPath.isNotEmpty) { await File(kubeOutPath).writeAsString(kubeYaml); print('Wrote generated Kubernetes YAML to $kubeOutPath'); } else { print('--- begin generated kube yaml ---'); print(kubeYaml.trim()); print('--- end generated kube yaml ---'); } final systemd = await client.generateSystemd( systemdTarget, options: const GenerateSystemdOptions( useName: true, noHeader: true, restartPolicy: 'always', ), ); if (systemd.units.isEmpty) { print('No systemd units were generated for "$systemdTarget".'); return; } if (systemdDirPath != null && systemdDirPath.isNotEmpty) { final outputDir = Directory(systemdDirPath); await outputDir.create(recursive: true); for (final entry in systemd.units.entries) { final file = File('${outputDir.path}/${entry.key}'); await file.writeAsString(entry.value); print('Wrote ${entry.key}'); } } else { print('Generated systemd units: ${systemd.units.keys.toList()..sort()}'); } } finally { await client.close(); } } String? _readOption(List args, String name) { final prefix = '--$name='; for (final arg in args) { if (arg.startsWith(prefix)) { return arg.substring(prefix.length); } } return null; } void _printUsage() { print(''' Generate assets example Usage: dart run example/generate_assets_example.dart [name ...] [options] Examples: dart run example/generate_assets_example.dart groupware-orchestrator dart run example/generate_assets_example.dart groupware-pod --kube-out=./stack.yaml --systemd-dir=./units Options: --kube-out= Write generated kube YAML to file (default: stdout) --systemd-dir= Write generated systemd units to directory --systemd-target= Specific name for systemd generation (defaults to first positional) --no-service Do not include generated Service objects in kube YAML --no-podman-only Do not include Podman-only annotations in kube YAML --no-trunc Use non-truncated annotations --help, -h Show this help '''); }