feat(lifecycle): supervise modules and managed workers

This commit is contained in:
end committed 2026-10-27 11:58:24 -07:00
1 parent ba9b29697a
commit b9a5fa8bd8
5 files changed
+1038 -9

No files matched your search

+21 -1
View File
@@ -1,6 +1,6 @@
# corestack go
Shared Go building blocks. The first one is `docs`, a checker for architecture decision records (ADRs) and implementation plans.
Shared Go building blocks. Includes `docs`, a checker for architecture decision records (ADRs) and implementation plans, and `lifecycle`, a service and worker coordinator.
## docs
@@ -20,6 +20,26 @@ docs check [--root DIR] # prints path:line: messa
The format is specified in [docs/docs-format.md](docs/docs-format.md); that document is the complete rule set. Exit status is `0` when every record is valid, `1` when problems are reported and `2` for usage errors.
## lifecycle
`go.auvem.com/corestack/lifecycle` sets up modules in registration order, runs
services concurrently, and tears down successful setups in reverse order.
Construct an `App` with a required `*slog.Logger`, register `Module` callbacks,
and call `Run(ctx)` once. See the [two-service example](lifecycle/example_test.go).
Launch background work with `app.Go(ctx, name, fn)` using the callback's lifecycle
context or a descendant, and handle admission errors. Run waits for every service
and admitted worker; raw goroutines remain your responsibility. First failure or
an injected signal cancels work before teardown. One shared shutdown deadline
(default 30 seconds) covers hooks and callback completion; a second signal
abandons shutdown. Callbacks must cooperate: abandonment cannot kill goroutines,
and the caller owns process exit and any unreleased resources.
The caller owns signal subscription, SIGINT/SIGTERM filtering, a channel buffered
for at least two signals, and subscription cleanup. Nil signals disable reception.
There are no signal subscriptions, process exits, external dependencies or CLI
integration in this package.
## Status
No support is guaranteed. Breaking changes, including to the format rules, may happen before 1.0 and are listed in the release notes.