github.com/windmeup/goreleaser@v1.21.95/internal/pipe/discord/discord.go (about) 1 package discord 2 3 import ( 4 "fmt" 5 "strconv" 6 7 "github.com/caarlos0/env/v9" 8 "github.com/caarlos0/log" 9 "github.com/disgoorg/disgo/discord" 10 "github.com/disgoorg/disgo/webhook" 11 "github.com/disgoorg/snowflake/v2" 12 "github.com/windmeup/goreleaser/internal/tmpl" 13 "github.com/windmeup/goreleaser/pkg/context" 14 ) 15 16 const ( 17 defaultAuthor = `GoReleaser` 18 defaultColor = "3888754" 19 defaultIcon = "https://goreleaser.com/static/avatar.png" 20 defaultMessageTemplate = `{{ .ProjectName }} {{ .Tag }} is out! Check it out at {{ .ReleaseURL }}` 21 ) 22 23 type Pipe struct{} 24 25 func (Pipe) String() string { return "discord" } 26 func (Pipe) Skip(ctx *context.Context) bool { return !ctx.Config.Announce.Discord.Enabled } 27 28 type Config struct { 29 WebhookID string `env:"DISCORD_WEBHOOK_ID,notEmpty"` 30 WebhookToken string `env:"DISCORD_WEBHOOK_TOKEN,notEmpty"` 31 } 32 33 func (p Pipe) Default(ctx *context.Context) error { 34 if ctx.Config.Announce.Discord.MessageTemplate == "" { 35 ctx.Config.Announce.Discord.MessageTemplate = defaultMessageTemplate 36 } 37 if ctx.Config.Announce.Discord.IconURL == "" { 38 ctx.Config.Announce.Discord.IconURL = defaultIcon 39 } 40 if ctx.Config.Announce.Discord.Author == "" { 41 ctx.Config.Announce.Discord.Author = defaultAuthor 42 } 43 if ctx.Config.Announce.Discord.Color == "" { 44 ctx.Config.Announce.Discord.Color = defaultColor 45 } 46 return nil 47 } 48 49 func (p Pipe) Announce(ctx *context.Context) error { 50 msg, err := tmpl.New(ctx).Apply(ctx.Config.Announce.Discord.MessageTemplate) 51 if err != nil { 52 return fmt.Errorf("discord: %w", err) 53 } 54 55 var cfg Config 56 if err = env.Parse(&cfg); err != nil { 57 return fmt.Errorf("discord: %w", err) 58 } 59 60 log.Infof("posting: '%s'", msg) 61 62 webhookID, err := snowflake.Parse(cfg.WebhookID) 63 if err != nil { 64 return fmt.Errorf("discord: %w", err) 65 } 66 67 color, err := strconv.Atoi(ctx.Config.Announce.Discord.Color) 68 if err != nil { 69 return fmt.Errorf("discord: %w", err) 70 } 71 if _, err = webhook.New(webhookID, cfg.WebhookToken).CreateMessage(discord.WebhookMessageCreate{ 72 Embeds: []discord.Embed{ 73 { 74 Author: &discord.EmbedAuthor{ 75 Name: ctx.Config.Announce.Discord.Author, 76 IconURL: ctx.Config.Announce.Discord.IconURL, 77 }, 78 Description: msg, 79 Color: color, 80 }, 81 }, 82 }); err != nil { 83 return fmt.Errorf("discord: %w", err) 84 } 85 return nil 86 }