Skip to content

Releases: axondata/go-svcmgr

Add daemontools and s6 support

Choose a tag to compare

@axoncortex axoncortex released this 08 Sep 17:24
Immutable release. Only release title and notes can be modified.
412eb95

Features:

  • Add compatibility layer for daemontools and s6 supervision systems
  • New factory pattern for creating runit, daemontools, and s6 clients
  • Support for multiple supervision system backends

Performance:

  • Optimize status decode for zero allocations
  • Improve memory efficiency in status operations

Improvements:

  • Enhanced documentation with better examples and usage guides
  • Expanded test coverage for all supervision systems
  • Improved error handling in watch operations
  • Better Makefile with more comprehensive build targets

Testing:

  • Add integration tests for daemontools compatibility
  • Add integration tests for s6 compatibility
  • Expand factory validation test suite

This release maintains full backward compatibility while adding support
for daemontools and s6 supervision systems through a unified interface.

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 13:00
Immutable release. Only release title and notes can be modified.

Changes

go-runit v1.0.0 - Native runit Control

Initial Stable Release

This is the first stable release of go-runit, a native Go library for controlling runit services without shelling out to sv.

Highlights

  • Zero process spawning - Communicates directly with supervise endpoints
  • High performance - Status decode in ~48ns with minimal allocations
  • Real-time monitoring - fsnotify-based watching without polling
  • Full compatibility - Implements complete runit/daemontools protocol
  • Production ready - Comprehensive testing with real runit services

Installation

go get github.com/axondata/go-runit@v1.0.0

Quick Start

client, err := runit.New("/etc/service/myapp")
if err != nil {
    log.Fatal(err)
}

// Start service
err = client.Up(context.Background())

// Get status  
status, err := client.Status(context.Background())
fmt.Printf("State: %v, PID: %d\n", status.State, status.PID)

Performance

BenchmarkStatusDecode-12         21870621    47.61 ns/op    24 B/op    1 allocs/op
BenchmarkStatusDecodeParallel-12 82882237    14.29 ns/op    24 B/op    1 allocs/op
BenchmarkStateString-12          1000000000   0.71 ns/op     0 B/op    0 allocs/op

Documentation

Requirements

  • Go 1.21 or later
  • Linux or macOS
  • runit or daemontools-compatible supervisor

License

Apache 2.0

Acknowledgments

Thanks to the Daniel J. Bernstein, the author of daemontools and Gerrit Pape (the original author of runit) for their well-documented binary protocol specification.