Files
simplexcalc/internal/cli/run.go
T
clawbot 9ce902fb05
check / check (push) Successful in 1m8s
Take the chat client's port from Run's caller (closes #4)
The test that runs the whole bot started its stand-in chat client on
5225, the port a real simplex-chat uses, so on a machine where one
listens there the test would have sent it the bot's set-up commands.
Run now takes the chat client's port: the run command passes
bot.ChatPort (5225), and the test a port it found free.

Model: opus-5-5
2026-09-29 02:08:56 +00:00

59 lines
1.2 KiB
Go

package cli
import (
"context"
"fmt"
"os"
"os/signal"
"runtime"
"syscall"
"github.com/spf13/cobra"
"sneak.berlin/go/simplexcalc/internal/bot"
"sneak.berlin/go/simplexcalc/internal/config"
"sneak.berlin/go/simplexcalc/internal/logger"
)
func runCmd(version string) *cobra.Command {
return &cobra.Command{
Use: "run",
Short: "run the bot",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, _ []string) error {
return run(cmd.Context(), version)
},
}
}
// run reads the configuration and runs the bot until SIGINT or SIGTERM,
// or until it fails. A failure is the process's exit status, so a
// supervisor restarts it.
func run(ctx context.Context, version string) error {
cfg, err := config.New()
if err != nil {
return fmt.Errorf("reading configuration: %w", err)
}
log := logger.New(os.Stdout, cfg.Debug)
log.Info("starting",
"appname", appname,
"version", version,
"arch", runtime.GOARCH,
"data_dir", cfg.DataDir,
)
ctx, stop := signal.NotifyContext(ctx, syscall.SIGINT, syscall.SIGTERM)
defer stop()
err = bot.Run(ctx, log, cfg, bot.ChatPort)
if err != nil {
log.Error("stopped", "error", err)
return err
}
log.Info("stopped")
return nil
}