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  }