https://github.com/bluesky-social/goat but with tangled's CI
8
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 77 lines 1.6 kB view raw
1package main 2 3import ( 4 "context" 5 "fmt" 6 "io" 7 "log/slog" 8 "os" 9 "strings" 10 11 "github.com/bluesky-social/indigo/atproto/identity" 12 "github.com/bluesky-social/indigo/atproto/syntax" 13 14 "github.com/earthboundkid/versioninfo/v2" 15 "github.com/urfave/cli/v3" 16) 17 18func resolveIdent(ctx context.Context, arg string) (*identity.Identity, error) { 19 id, err := syntax.ParseAtIdentifier(arg) 20 if err != nil { 21 return nil, err 22 } 23 24 dir := identity.DefaultDirectory() 25 return dir.Lookup(ctx, *id) 26} 27 28const stdIOPath = "-" 29 30func getFileOrStdin(path string) (io.Reader, error) { 31 if path == stdIOPath { 32 return os.Stdin, nil 33 } 34 file, err := os.Open(path) 35 if err != nil { 36 return nil, err 37 } 38 return file, nil 39} 40 41func getFileOrStdout(path string) (io.WriteCloser, error) { 42 if path == stdIOPath { 43 return os.Stdout, nil 44 } 45 file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0666) 46 if err != nil { 47 return nil, err 48 } 49 return file, nil 50} 51 52func configLogger(cmd *cli.Command, writer io.Writer) *slog.Logger { 53 var level slog.Level 54 switch strings.ToLower(cmd.String("log-level")) { 55 case "error": 56 level = slog.LevelError 57 case "warn": 58 level = slog.LevelWarn 59 case "info": 60 level = slog.LevelInfo 61 case "debug": 62 level = slog.LevelDebug 63 default: 64 level = slog.LevelInfo 65 } 66 logger := slog.New(slog.NewJSONHandler(writer, &slog.HandlerOptions{ 67 Level: level, 68 })) 69 slog.SetDefault(logger) 70 return logger 71} 72 73// returns a pointer because that is what xrpc.Client expects 74func userAgent() *string { 75 s := fmt.Sprintf("goat/%s", versioninfo.Short()) 76 return &s 77}