github.com/lordnynex/goreleaser@v0.17.2-0.20170508230939-767968070d68/pipeline/defaults/defaults.go (about) 1 // Package defaults implements the Pipe interface providing default values 2 // for missing configuration. 3 package defaults 4 5 import ( 6 "fmt" 7 "io/ioutil" 8 "strings" 9 10 "github.com/lordnynex/goreleaser/context" 11 ) 12 13 var defaultFiles = []string{"licence", "license", "readme", "changelog"} 14 15 // NameTemplate default name_template for the archive. 16 const NameTemplate = "{{ .Binary }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}" 17 18 // SnapshotNameTemplate represents the default format for snapshot release names. 19 const SnapshotNameTemplate = "SNAPSHOT-{{ .Commit }}" 20 21 // Pipe for brew deployment 22 type Pipe struct{} 23 24 // Description of the pipe 25 func (Pipe) Description() string { 26 return "Setting defaults" 27 } 28 29 // Run the pipe 30 func (Pipe) Run(ctx *context.Context) error { 31 ctx.Config.Dist = "dist" 32 if ctx.Config.Snapshot.NameTemplate == "" { 33 ctx.Config.Snapshot.NameTemplate = SnapshotNameTemplate 34 } 35 if err := setReleaseDefaults(ctx); err != nil { 36 return err 37 } 38 setBuildDefaults(ctx) 39 if ctx.Config.Brew.Install == "" { 40 ctx.Config.Brew.Install = fmt.Sprintf( 41 `bin.install "%s"`, 42 ctx.Config.Build.Binary, 43 ) 44 } 45 return setArchiveDefaults(ctx) 46 } 47 48 func setReleaseDefaults(ctx *context.Context) error { 49 if ctx.Config.Release.GitHub.Name != "" { 50 return nil 51 } 52 repo, err := remoteRepo() 53 if err != nil { 54 return fmt.Errorf("failed reading repo from git: %v", err.Error()) 55 } 56 ctx.Config.Release.GitHub = repo 57 return nil 58 } 59 60 func setBuildDefaults(ctx *context.Context) { 61 if ctx.Config.Build.Binary == "" { 62 ctx.Config.Build.Binary = ctx.Config.Release.GitHub.Name 63 } 64 if ctx.Config.Build.Main == "" { 65 ctx.Config.Build.Main = "." 66 } 67 if len(ctx.Config.Build.Goos) == 0 { 68 ctx.Config.Build.Goos = []string{"linux", "darwin"} 69 } 70 if len(ctx.Config.Build.Goarch) == 0 { 71 ctx.Config.Build.Goarch = []string{"amd64", "386"} 72 } 73 if len(ctx.Config.Build.Goarm) == 0 { 74 ctx.Config.Build.Goarm = []string{"6"} 75 } 76 if ctx.Config.Build.Ldflags == "" { 77 ctx.Config.Build.Ldflags = "-s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}" 78 } 79 } 80 81 func setArchiveDefaults(ctx *context.Context) error { 82 if ctx.Config.Archive.NameTemplate == "" { 83 ctx.Config.Archive.NameTemplate = NameTemplate 84 } 85 if ctx.Config.Archive.Format == "" { 86 ctx.Config.Archive.Format = "tar.gz" 87 } 88 if len(ctx.Config.Archive.Replacements) == 0 { 89 ctx.Config.Archive.Replacements = map[string]string{ 90 "darwin": "Darwin", 91 "linux": "Linux", 92 "freebsd": "FreeBSD", 93 "openbsd": "OpenBSD", 94 "netbsd": "NetBSD", 95 "windows": "Windows", 96 "386": "i386", 97 "amd64": "x86_64", 98 } 99 } 100 if len(ctx.Config.Archive.Files) == 0 { 101 files, err := findFiles() 102 if err != nil { 103 return err 104 } 105 ctx.Config.Archive.Files = files 106 } 107 return nil 108 } 109 110 func findFiles() (files []string, err error) { 111 all, err := ioutil.ReadDir(".") 112 if err != nil { 113 return 114 } 115 for _, file := range all { 116 if accept(file.Name()) { 117 files = append(files, file.Name()) 118 } 119 } 120 return 121 } 122 123 func accept(file string) bool { 124 for _, accepted := range defaultFiles { 125 if strings.HasPrefix(strings.ToLower(file), accepted) { 126 return true 127 } 128 } 129 return false 130 }