package diff import ( "fmt" "log/slog" pkgcmd "github.com/foomo/sesamy-cli/pkg/cmd" "github.com/foomo/sesamy-cli/pkg/tagmanager" "github.com/foomo/sesamy-cli/pkg/utils" "github.com/spf13/cobra" "github.com/spf13/viper" ) // NewServer represents the server command func NewServer(l *slog.Logger) *cobra.Command { c := viper.New() cmd := &cobra.Command{ Use: "server", Short: "Print Google Tag Manager Server Container status diff", Args: cobra.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { l.Info("☕ Retrieving Server Container status") cfg, err := pkgcmd.ReadConfig(l, c, cmd) if err != nil { return err } tm, err := tagmanager.New( cmd.Context(), l, cfg.GoogleTagManager.AccountID, cfg.GoogleTagManager.ServerContainer, tagmanager.WithRequestQuota(cfg.GoogleAPI.RequestQuota), tagmanager.WithClientOptions(cfg.GoogleAPI.GetClientOption()), ) if err != nil { return err } if err := tm.EnsureWorkspaceID(cmd.Context()); err != nil { return err } out, err := diff(cmd.Context(), l, tm) if err != nil { return err } if !c.GetBool("raw") { out = utils.Highlight(out) } _, err = fmt.Println(out) return err }, } flags := cmd.Flags() flags.Bool("raw", false, "print raw output") _ = c.BindPFlag("raw", flags.Lookup("raw")) flags.StringSliceP("config", "c", []string{"sesamy.yaml"}, "config files (default is sesamy.yaml)") _ = c.BindPFlag("config", flags.Lookup("config")) return cmd }