github.com/goreleaser/goreleaser@v1.25.1/internal/pipe/linkedin/linkedin.go (about)

     1  package linkedin
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/caarlos0/env/v9"
     7  	"github.com/caarlos0/log"
     8  	"github.com/goreleaser/goreleaser/internal/tmpl"
     9  	"github.com/goreleaser/goreleaser/pkg/context"
    10  )
    11  
    12  const defaultMessageTemplate = `{{ .ProjectName }} {{ .Tag }} is out! Check it out at {{ .ReleaseURL }}`
    13  
    14  type Pipe struct{}
    15  
    16  func (Pipe) String() string                 { return "linkedin" }
    17  func (Pipe) Skip(ctx *context.Context) bool { return !ctx.Config.Announce.LinkedIn.Enabled }
    18  
    19  type Config struct {
    20  	AccessToken string `env:"LINKEDIN_ACCESS_TOKEN,notEmpty"`
    21  }
    22  
    23  func (Pipe) Default(ctx *context.Context) error {
    24  	if ctx.Config.Announce.LinkedIn.MessageTemplate == "" {
    25  		ctx.Config.Announce.LinkedIn.MessageTemplate = defaultMessageTemplate
    26  	}
    27  
    28  	return nil
    29  }
    30  
    31  func (Pipe) Announce(ctx *context.Context) error {
    32  	message, err := tmpl.New(ctx).Apply(ctx.Config.Announce.LinkedIn.MessageTemplate)
    33  	if err != nil {
    34  		return fmt.Errorf("linkedin: %w", err)
    35  	}
    36  
    37  	var cfg Config
    38  	if err := env.Parse(&cfg); err != nil {
    39  		return fmt.Errorf("linkedin: %w", err)
    40  	}
    41  
    42  	c, err := createLinkedInClient(oauthClientConfig{
    43  		Context:     ctx,
    44  		AccessToken: cfg.AccessToken,
    45  	})
    46  	if err != nil {
    47  		return fmt.Errorf("linkedin: %w", err)
    48  	}
    49  
    50  	url, err := c.Share(message)
    51  	if err != nil {
    52  		return fmt.Errorf("linkedin: %w", err)
    53  	}
    54  
    55  	log.Infof("The text post is available at: %s\n", url)
    56  
    57  	return nil
    58  }