gisila_queue_cli library

Shared CLI scaffolding for gisila_queue worker/beat binaries.

Kept separate from package:gisila_queue/gisila_queue.dart (which has no dart:io dependency beyond what the core library already needs) so pulling in process-signal handling and flag parsing is opt-in — only import this from an actual bin/*.dart entrypoint.

// bin/worker.dart
import 'package:gisila_queue/gisila_queue.dart';
import 'package:gisila_queue/gisila_queue_cli.dart';

Future<void> main(List<String> argv) async {
  final cli = WorkerCli.parse(argv);
  if (cli.help) return print(WorkerCli.usage);
  final app = cli.buildApp();
  app.task<void>('emails.send_welcome', (ctx) async { /* ... */ });
  await cli.run(app);
}

Classes

BeatCli
Shared setup for a bin/beat.dart entrypoint — parses the standard gisila_queue beat flags, builds a Redis-backed GisilaQueue and a Beat wired with a RedisBeatLock + RedisBeatStateStore (so running two by accident doesn't double-fire everything), and wires graceful shutdown:
CliArgs
Minimal --flag / --flag=value parser shared by gisila_queue's CLI helpers (WorkerCli, BeatCli) and bin/rose.dart, so every gisila_queue binary parses arguments the same way.
WorkerCli
Shared setup for a bin/worker.dart entrypoint — parses the standard gisila_queue worker flags, builds a Redis-backed GisilaQueue, and wires graceful shutdown, so a project's own binary can be little more than:

Functions

installShutdownHooks(Future<void> onShutdown()) → void
Wires SIGINT/SIGTERM to onShutdown, calling it at most once. Every gisila_queue CLI binary (WorkerCli, BeatCli, bin/rose.dart) uses this so Ctrl-C / a process manager's stop signal drains in-flight work before exiting instead of killing the process mid-task.