github.com/ahmet2mir/goreleaser@v0.180.3-0.20210927151101-8e5ee5a9b8c5/internal/pipe/milestone/milestone.go (about) 1 // Package milestone implements Pipe and manages VCS milestones. 2 package milestone 3 4 import ( 5 "github.com/apex/log" 6 "github.com/goreleaser/goreleaser/internal/client" 7 "github.com/goreleaser/goreleaser/internal/git" 8 "github.com/goreleaser/goreleaser/internal/pipe" 9 "github.com/goreleaser/goreleaser/internal/tmpl" 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 { return "milestones" } 19 func (Pipe) Skip(ctx *context.Context) bool { return len(ctx.Config.Milestones) == 0 } 20 21 // Default sets the pipe defaults. 22 func (Pipe) Default(ctx *context.Context) error { 23 for i := range ctx.Config.Milestones { 24 milestone := &ctx.Config.Milestones[i] 25 26 if milestone.NameTemplate == "" { 27 milestone.NameTemplate = defaultNameTemplate 28 } 29 30 if milestone.Repo.Name == "" { 31 repo, err := git.ExtractRepoFromConfig() 32 33 if err != nil && !ctx.Snapshot { 34 return err 35 } 36 37 milestone.Repo = repo 38 } 39 } 40 41 return nil 42 } 43 44 // Publish the release. 45 func (Pipe) Publish(ctx *context.Context) error { 46 c, err := client.New(ctx) 47 if err != nil { 48 return err 49 } 50 return doPublish(ctx, c) 51 } 52 53 func doPublish(ctx *context.Context, vcsClient client.Client) error { 54 for i := range ctx.Config.Milestones { 55 milestone := &ctx.Config.Milestones[i] 56 57 if !milestone.Close { 58 return pipe.Skip("closing not enabled") 59 } 60 61 name, err := tmpl.New(ctx).Apply(milestone.NameTemplate) 62 if err != nil { 63 return err 64 } 65 66 repo := client.Repo{ 67 Name: milestone.Repo.Name, 68 Owner: milestone.Repo.Owner, 69 } 70 71 log.WithField("milestone", name). 72 WithField("repo", repo.String()). 73 Info("closing milestone") 74 75 err = vcsClient.CloseMilestone(ctx, repo, name) 76 77 if err != nil { 78 if milestone.FailOnError { 79 return err 80 } 81 82 log.WithField("milestone", name). 83 WithField("repo", repo.String()). 84 Warnf("error closing milestone: %s", err) 85 } 86 } 87 88 return nil 89 }