diff --git a/spindle/server.go b/spindle/server.go index 408a7e4c..9a65b924 100644 --- a/spindle/server.go +++ b/spindle/server.go @@ -35,9 +35,6 @@ import ( "tangled.org/core/spindle/config" "tangled.org/core/spindle/db" "tangled.org/core/spindle/engine" - "tangled.org/core/spindle/engines/dummy" - "tangled.org/core/spindle/engines/microvm" - "tangled.org/core/spindle/engines/nixery" "tangled.org/core/spindle/git" "tangled.org/core/spindle/models" "tangled.org/core/spindle/queue" @@ -357,21 +354,12 @@ func Run(ctx context.Context) error { return fmt.Errorf("failed to setup db: %w", err) } - nixeryEng, err := nixery.New(ctx, cfg) + engines, err := buildEngines(ctx, cfg, d) if err != nil { return err } - microvmEng, err := microvm.New(ctx, cfg, d) - if err != nil { - return err - } - - s, err := New(ctx, cfg, d, map[string]models.Engine{ - "nixery": nixeryEng, - "microvm": microvmEng, - "dummy": dummy.New(log.FromContext(ctx)), - }) + s, err := New(ctx, cfg, d, engines) if err != nil { return err } diff --git a/spindle/server_engines_linux.go b/spindle/server_engines_linux.go new file mode 100644 index 00000000..79a808c8 --- /dev/null +++ b/spindle/server_engines_linux.go @@ -0,0 +1,33 @@ +//go:build linux + +package spindle + +import ( + "context" + + "tangled.org/core/log" + "tangled.org/core/spindle/config" + "tangled.org/core/spindle/db" + "tangled.org/core/spindle/engines/dummy" + "tangled.org/core/spindle/engines/microvm" + "tangled.org/core/spindle/engines/nixery" + "tangled.org/core/spindle/models" +) + +func buildEngines(ctx context.Context, cfg *config.Config, d *db.DB) (map[string]models.Engine, error) { + nixeryEng, err := nixery.New(ctx, cfg) + if err != nil { + return nil, err + } + + microvmEng, err := microvm.New(ctx, cfg, d) + if err != nil { + return nil, err + } + + return map[string]models.Engine{ + "nixery": nixeryEng, + "microvm": microvmEng, + "dummy": dummy.New(log.FromContext(ctx)), + }, nil +} diff --git a/spindle/server_engines_other.go b/spindle/server_engines_other.go new file mode 100644 index 00000000..e7a9320d --- /dev/null +++ b/spindle/server_engines_other.go @@ -0,0 +1,28 @@ +//go:build !linux + +package spindle + +import ( + "context" + + "tangled.org/core/log" + "tangled.org/core/spindle/config" + "tangled.org/core/spindle/db" + "tangled.org/core/spindle/engines/dummy" + "tangled.org/core/spindle/engines/nixery" + "tangled.org/core/spindle/models" +) + +// microvm requires cgroup v2, KVM, and network namespaces, which only exist +// on Linux, so it's excluded here in favor of the engines that don't need them. +func buildEngines(ctx context.Context, cfg *config.Config, d *db.DB) (map[string]models.Engine, error) { + nixeryEng, err := nixery.New(ctx, cfg) + if err != nil { + return nil, err + } + + return map[string]models.Engine{ + "nixery": nixeryEng, + "dummy": dummy.New(log.FromContext(ctx)), + }, nil +}