github.com/goreleaser/goreleaser@v1.25.1/internal/pipe/teams/teams.go (about) 1 package teams 2 3 import ( 4 "fmt" 5 6 goteamsnotify "github.com/atc0005/go-teams-notify/v2" 7 "github.com/atc0005/go-teams-notify/v2/messagecard" 8 "github.com/caarlos0/env/v9" 9 "github.com/caarlos0/log" 10 "github.com/goreleaser/goreleaser/internal/tmpl" 11 "github.com/goreleaser/goreleaser/pkg/context" 12 ) 13 14 const ( 15 defaultColor = "#2D313E" 16 defaultIcon = "https://goreleaser.com/static/avatar.png" 17 defaultMessageTemplate = `{{ .ProjectName }} {{ .Tag }} is out! Check it out at {{ .ReleaseURL }}` 18 defaultMessageTitle = `{{ .ProjectName }} {{ .Tag }} is out!` 19 ) 20 21 type Pipe struct{} 22 23 func (Pipe) String() string { return "teams" } 24 func (Pipe) Skip(ctx *context.Context) bool { return !ctx.Config.Announce.Teams.Enabled } 25 26 type Config struct { 27 Webhook string `env:"TEAMS_WEBHOOK,notEmpty"` 28 } 29 30 func (p Pipe) Default(ctx *context.Context) error { 31 if ctx.Config.Announce.Teams.MessageTemplate == "" { 32 ctx.Config.Announce.Teams.MessageTemplate = defaultMessageTemplate 33 } 34 if ctx.Config.Announce.Teams.TitleTemplate == "" { 35 ctx.Config.Announce.Teams.TitleTemplate = defaultMessageTitle 36 } 37 if ctx.Config.Announce.Teams.IconURL == "" { 38 ctx.Config.Announce.Teams.IconURL = defaultIcon 39 } 40 if ctx.Config.Announce.Teams.Color == "" { 41 ctx.Config.Announce.Teams.Color = defaultColor 42 } 43 return nil 44 } 45 46 func (p Pipe) Announce(ctx *context.Context) error { 47 title, err := tmpl.New(ctx).Apply(ctx.Config.Announce.Teams.TitleTemplate) 48 if err != nil { 49 return fmt.Errorf("teams: %w", err) 50 } 51 52 msg, err := tmpl.New(ctx).Apply(ctx.Config.Announce.Teams.MessageTemplate) 53 if err != nil { 54 return fmt.Errorf("teams: %w", err) 55 } 56 57 var cfg Config 58 if err := env.Parse(&cfg); err != nil { 59 return fmt.Errorf("teams: %w", err) 60 } 61 62 log.Infof("posting: '%s'", msg) 63 64 client := goteamsnotify.NewTeamsClient() 65 msgCard := messagecard.NewMessageCard() 66 msgCard.Summary = title 67 msgCard.ThemeColor = ctx.Config.Announce.Teams.Color 68 69 messageCardSection := messagecard.NewSection() 70 messageCardSection.ActivityTitle = title 71 messageCardSection.ActivityText = msg 72 messageCardSection.Markdown = true 73 messageCardSection.ActivityImage = ctx.Config.Announce.Teams.IconURL 74 err = msgCard.AddSection(messageCardSection) 75 if err != nil { 76 return fmt.Errorf("teams: %w", err) 77 } 78 err = client.Send(cfg.Webhook, msgCard) 79 if err != nil { 80 return fmt.Errorf("teams: %w", err) 81 } 82 return nil 83 }