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  }