github.com/ahmet2mir/goreleaser@v0.180.3-0.20210927151101-8e5ee5a9b8c5/internal/pipe/slack/slack.go (about) 1 package slack 2 3 import ( 4 "fmt" 5 6 "github.com/apex/log" 7 "github.com/caarlos0/env/v6" 8 "github.com/goreleaser/goreleaser/internal/tmpl" 9 "github.com/goreleaser/goreleaser/pkg/context" 10 "github.com/slack-go/slack" 11 ) 12 13 const ( 14 defaultUsername = `GoReleaser` 15 defaultMessageTemplate = `{{ .ProjectName }} {{ .Tag }} is out! Check it out at {{ .GitURL }}/releases/tag/{{ .Tag }}` 16 ) 17 18 type Pipe struct{} 19 20 func (Pipe) String() string { return "slack" } 21 func (Pipe) Skip(ctx *context.Context) bool { return !ctx.Config.Announce.Slack.Enabled } 22 23 type Config struct { 24 Webhook string `env:"SLACK_WEBHOOK,notEmpty"` 25 } 26 27 func (Pipe) Default(ctx *context.Context) error { 28 if ctx.Config.Announce.Slack.MessageTemplate == "" { 29 ctx.Config.Announce.Slack.MessageTemplate = defaultMessageTemplate 30 } 31 if ctx.Config.Announce.Slack.Username == "" { 32 ctx.Config.Announce.Slack.Username = defaultUsername 33 } 34 return nil 35 } 36 37 func (Pipe) Announce(ctx *context.Context) error { 38 msg, err := tmpl.New(ctx).Apply(ctx.Config.Announce.Slack.MessageTemplate) 39 if err != nil { 40 return fmt.Errorf("announce: failed to announce to slack: %w", err) 41 } 42 43 var cfg Config 44 if err := env.Parse(&cfg); err != nil { 45 return fmt.Errorf("announce: failed to announce to slack: %w", err) 46 } 47 48 log.Infof("posting: '%s'", msg) 49 50 wm := &slack.WebhookMessage{ 51 Username: ctx.Config.Announce.Slack.Username, 52 IconEmoji: ctx.Config.Announce.Slack.IconEmoji, 53 IconURL: ctx.Config.Announce.Slack.IconURL, 54 Channel: ctx.Config.Announce.Slack.Channel, 55 Text: msg, 56 } 57 58 err = slack.PostWebhook(cfg.Webhook, wm) 59 if err != nil { 60 return fmt.Errorf("announce: failed to announce to slack: %w", err) 61 } 62 63 return nil 64 }