github.com/goreleaser/goreleaser@v1.25.1/internal/pipe/linkedin/linkedin.go (about) 1 package linkedin 2 3 import ( 4 "fmt" 5 6 "github.com/caarlos0/env/v9" 7 "github.com/caarlos0/log" 8 "github.com/goreleaser/goreleaser/internal/tmpl" 9 "github.com/goreleaser/goreleaser/pkg/context" 10 ) 11 12 const defaultMessageTemplate = `{{ .ProjectName }} {{ .Tag }} is out! Check it out at {{ .ReleaseURL }}` 13 14 type Pipe struct{} 15 16 func (Pipe) String() string { return "linkedin" } 17 func (Pipe) Skip(ctx *context.Context) bool { return !ctx.Config.Announce.LinkedIn.Enabled } 18 19 type Config struct { 20 AccessToken string `env:"LINKEDIN_ACCESS_TOKEN,notEmpty"` 21 } 22 23 func (Pipe) Default(ctx *context.Context) error { 24 if ctx.Config.Announce.LinkedIn.MessageTemplate == "" { 25 ctx.Config.Announce.LinkedIn.MessageTemplate = defaultMessageTemplate 26 } 27 28 return nil 29 } 30 31 func (Pipe) Announce(ctx *context.Context) error { 32 message, err := tmpl.New(ctx).Apply(ctx.Config.Announce.LinkedIn.MessageTemplate) 33 if err != nil { 34 return fmt.Errorf("linkedin: %w", err) 35 } 36 37 var cfg Config 38 if err := env.Parse(&cfg); err != nil { 39 return fmt.Errorf("linkedin: %w", err) 40 } 41 42 c, err := createLinkedInClient(oauthClientConfig{ 43 Context: ctx, 44 AccessToken: cfg.AccessToken, 45 }) 46 if err != nil { 47 return fmt.Errorf("linkedin: %w", err) 48 } 49 50 url, err := c.Share(message) 51 if err != nil { 52 return fmt.Errorf("linkedin: %w", err) 53 } 54 55 log.Infof("The text post is available at: %s\n", url) 56 57 return nil 58 }