github.com/joselitofilho/goreleaser@v0.155.1-0.20210123221854-e4891856c593/internal/pipe/milestone/milestone.go (about) 1 package milestone 2 3 import ( 4 "github.com/apex/log" 5 "github.com/goreleaser/goreleaser/internal/client" 6 "github.com/goreleaser/goreleaser/internal/git" 7 "github.com/goreleaser/goreleaser/internal/pipe" 8 "github.com/goreleaser/goreleaser/internal/tmpl" 9 "github.com/goreleaser/goreleaser/pkg/config" 10 "github.com/goreleaser/goreleaser/pkg/context" 11 ) 12 13 const defaultNameTemplate = "{{ .Tag }}" 14 15 // Pipe for milestone. 16 type Pipe struct{} 17 18 func (Pipe) String() string { 19 return "milestones" 20 } 21 22 // Default sets the pipe defaults. 23 func (Pipe) Default(ctx *context.Context) error { 24 if len(ctx.Config.Milestones) == 0 { 25 ctx.Config.Milestones = append(ctx.Config.Milestones, config.Milestone{}) 26 } 27 28 for i := range ctx.Config.Milestones { 29 milestone := &ctx.Config.Milestones[i] 30 31 if milestone.NameTemplate == "" { 32 milestone.NameTemplate = defaultNameTemplate 33 } 34 35 if milestone.Repo.Name == "" { 36 repo, err := git.ExtractRepoFromConfig() 37 38 if err != nil && !ctx.Snapshot { 39 return err 40 } 41 42 milestone.Repo = repo 43 } 44 } 45 46 return nil 47 } 48 49 // Publish the release. 50 func (Pipe) Publish(ctx *context.Context) error { 51 if ctx.SkipPublish { 52 return pipe.ErrSkipPublishEnabled 53 } 54 c, err := client.New(ctx) 55 if err != nil { 56 return err 57 } 58 return doPublish(ctx, c) 59 } 60 61 func doPublish(ctx *context.Context, vcsClient client.Client) error { 62 for i := range ctx.Config.Milestones { 63 milestone := &ctx.Config.Milestones[i] 64 65 if !milestone.Close { 66 return pipe.Skip("milestone pipe is disabled") 67 } 68 69 name, err := tmpl.New(ctx).Apply(milestone.NameTemplate) 70 71 if err != nil { 72 return err 73 } 74 75 repo := client.Repo{ 76 Name: milestone.Repo.Name, 77 Owner: milestone.Repo.Owner, 78 } 79 80 log.WithField("milestone", name). 81 WithField("repo", repo.String()). 82 Info("closing milestone") 83 84 err = vcsClient.CloseMilestone(ctx, repo, name) 85 86 if err != nil { 87 if milestone.FailOnError { 88 return err 89 } 90 91 log.WithField("milestone", name). 92 WithField("repo", repo.String()). 93 Warnf("error closing milestone: %s", err) 94 } 95 } 96 97 return nil 98 }