{"contents":"package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/signal\"\n\t\"syscall\"\n\n\t\"tangled.org/core/log\"\n\t\"tangled.org/core/spindle\"\n\t\"tangled.org/core/spindle/config\"\n\t\"tangled.org/core/spindle/models\"\n\t\"tangled.org/http-knot/flymachines\"\n)\n\nfunc main() {\n\tctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)\n\tdefer cancel()\n\n\tctx = log.NewContext(ctx, \"spindle\")\n\n\tif err := run(ctx); err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"fatal: %v\\n\", err)\n\t\tos.Exit(1)\n\t}\n}\n\nfunc run(ctx context.Context) error {\n\tcoreCfg, err := config.Load(ctx)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"load spindle config: %w\", err)\n\t}\n\n\tflyCfg, err := flymachines.LoadConfig(ctx)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"load fly config: %w\", err)\n\t}\n\n\teng, err := flymachines.New(ctx, coreCfg, flyCfg)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"setup fly engine: %w\", err)\n\t}\n\n\ts, err := spindle.New(ctx, coreCfg, map[string]models.Engine{\n\t\t\"nixery\": eng,\n\t})\n\tif err != nil {\n\t\treturn fmt.Errorf(\"setup spindle: %w\", err)\n\t}\n\n\treturn s.Start(ctx)\n}\n","path":"cmd/spindle/main.go","ref":"main"}