You've already forked goreleaser
mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-11-06 09:09:29 +02:00
* feat: replacing logs Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com> * fix: tests et al Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com> * feat: update termenv/lipgloss Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com> * wip: output Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com> * fix: pin dep Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com> * fix: update Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com> * fix: tests Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com> * fix: tests Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com> * fix: deps Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com> * fix: dep Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
82 lines
2.2 KiB
Go
82 lines
2.2 KiB
Go
// Package announce contains the announcing pipe.
|
|
package announce
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/caarlos0/log"
|
|
"github.com/goreleaser/goreleaser/internal/middleware/errhandler"
|
|
"github.com/goreleaser/goreleaser/internal/middleware/logging"
|
|
"github.com/goreleaser/goreleaser/internal/middleware/skip"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/discord"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/linkedin"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/mattermost"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/reddit"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/slack"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/smtp"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/teams"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/telegram"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/twitter"
|
|
"github.com/goreleaser/goreleaser/internal/pipe/webhook"
|
|
"github.com/goreleaser/goreleaser/internal/tmpl"
|
|
"github.com/goreleaser/goreleaser/pkg/context"
|
|
)
|
|
|
|
// Announcer should be implemented by pipes that want to announce releases.
|
|
type Announcer interface {
|
|
fmt.Stringer
|
|
Announce(ctx *context.Context) error
|
|
}
|
|
|
|
// nolint: gochecknoglobals
|
|
var announcers = []Announcer{
|
|
// XXX: keep asc sorting
|
|
discord.Pipe{},
|
|
linkedin.Pipe{},
|
|
mattermost.Pipe{},
|
|
reddit.Pipe{},
|
|
slack.Pipe{},
|
|
smtp.Pipe{},
|
|
teams.Pipe{},
|
|
telegram.Pipe{},
|
|
twitter.Pipe{},
|
|
webhook.Pipe{},
|
|
}
|
|
|
|
// Pipe that announces releases.
|
|
type Pipe struct{}
|
|
|
|
func (Pipe) String() string { return "announcing" }
|
|
|
|
func (Pipe) Skip(ctx *context.Context) bool {
|
|
if ctx.SkipAnnounce {
|
|
return true
|
|
}
|
|
if ctx.Config.Announce.Skip == "" {
|
|
return false
|
|
}
|
|
skip, err := tmpl.New(ctx).Apply(ctx.Config.Announce.Skip)
|
|
if err != nil {
|
|
log.Error("invalid announce.skip template, will skip the announcing step")
|
|
return true
|
|
}
|
|
log.Debugf("announce.skip evaluated from %q to %q", ctx.Config.Announce.Skip, skip)
|
|
return skip == "true"
|
|
}
|
|
|
|
// Run the pipe.
|
|
func (Pipe) Run(ctx *context.Context) error {
|
|
for _, announcer := range announcers {
|
|
if err := skip.Maybe(
|
|
announcer,
|
|
logging.PadLog(
|
|
announcer.String(),
|
|
errhandler.Handle(announcer.Announce),
|
|
),
|
|
)(ctx); err != nil {
|
|
return fmt.Errorf("%s: failed to announce release: %w", announcer.String(), err)
|
|
}
|
|
}
|
|
return nil
|
|
}
|