From 16e1b95308107d51d6e63e434315e1a2a837c9fc Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Wed, 4 Jan 2017 10:13:49 -0200 Subject: [PATCH 01/15] name template wip --- config/config.go | 48 ++++++++++++++++++++++++++++++----- config/config_test.go | 11 ++++++++ goreleaser.yml | 1 + pipeline/build/build.go | 13 +++++----- pipeline/compress/compress.go | 19 ++++++-------- pipeline/release/release.go | 9 ++++--- 6 files changed, 73 insertions(+), 28 deletions(-) diff --git a/config/config.go b/config/config.go index 1004a2ff9..ae01f386f 100644 --- a/config/config.go +++ b/config/config.go @@ -9,6 +9,9 @@ import ( "github.com/goreleaser/releaser/config/git" yaml "gopkg.in/yaml.v1" + "bytes" + "text/template" + "github.com/goreleaser/releaser/uname" ) var filePatterns = []string{"LICENCE*", "LICENSE*", "README*", "CHANGELOG*"} @@ -36,13 +39,14 @@ type GitInfo struct { // ProjectConfig includes all project configuration type ProjectConfig struct { - Repo string - BinaryName string `yaml:"binary_name"` - Files []string - Brew Homebrew - Token string `yaml:"-"` - Build BuildConfig - Git GitInfo `yaml:"-"` + Repo string + BinaryName string `yaml:"binary_name"` + Files []string + Brew Homebrew + Token string `yaml:"-"` + Build BuildConfig + Git GitInfo `yaml:"-"` + NameTemplate string } // Load config file @@ -64,6 +68,33 @@ func Load(file string) (config ProjectConfig, err error) { return config, config.validate() } +type NameData struct { + Goos string + Goarch string + Os string + Arch string + Version string + BinaryName string +} + +func (config *ProjectConfig) NameFor(goos, goarch, version string) (string, error) { + var data = NameData{ + Goos: goos, + Goarch: goarch, + Os: uname.FromGo(goos), + Arch: uname.FromGo(goarch), + Version: version, + BinaryName: config.BinaryName, + } + var out bytes.Buffer + template, err := template.New(data.BinaryName).Parse(config.NameTemplate) + if err != nil { + + } + err = template.Execute(&out, data) + return out.String(), err +} + func (config *ProjectConfig) validate() (err error) { if config.BinaryName == "" { return errors.New("missing binary_name") @@ -106,6 +137,9 @@ func (config *ProjectConfig) fillBasicData() { if len(config.Build.Arches) == 0 { config.Build.Arches = []string{"amd64", "386"} } + if config.NameTemplate == "" { + config.NameTemplate = "{{.BinaryName}}_{{.Os}}_{{.Arch}}" + } } func (config *ProjectConfig) fillGitData() (err error) { diff --git a/config/config_test.go b/config/config_test.go index 110f6178a..53b957ea1 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -69,6 +69,17 @@ func TestValidadeMinimalConfig(t *testing.T) { assert.NoError(config.validate()) } +func TestNameTemplate(t *testing.T) { + assert := assert.New(t) + var config = ProjectConfig{ + BinaryName: "test", + NameTemplate : "{{.BinaryName}}_{{.Os}}_{{.Goos}}_{{.Arch}}_{{.Goarch}}_{{.Version}}", + } + name, err := config.NameFor("darwin", "amd64", "v1.2.3") + assert.NoError(err) + assert.Equal("test_Darwin_darwin_x86_64_amd64_v1.2.3", name) +} + func assertFiles(t *testing.T, dir string, files []string) { assert := assert.New(t) diff --git a/goreleaser.yml b/goreleaser.yml index f349a31be..97812a8c3 100644 --- a/goreleaser.yml +++ b/goreleaser.yml @@ -10,3 +10,4 @@ build: - windows - darwin - linux +NameTemplate: {{.BinaryName}}_{{.Version}}_{{.Os}}_{{.Arch}} diff --git a/pipeline/build/build.go b/pipeline/build/build.go index 8ff989c1b..8fa1b8e15 100644 --- a/pipeline/build/build.go +++ b/pipeline/build/build.go @@ -37,11 +37,15 @@ func (Pipe) Run(config config.ProjectConfig) error { func build(system, arch string, config config.ProjectConfig) error { log.Println("Building", system+"/"+arch, "...") + name, err := config.NameFor(system, arch, config.Git.CurrentTag) + if err != nil { + return err + } cmd := exec.Command( "go", "build", "-ldflags=-s -w -X main.version="+config.Git.CurrentTag, - "-o", target(system, arch, config.BinaryName), + "-o", "dist/"+name+"/"+config.BinaryName, config.Build.Main, ) cmd.Env = append( @@ -54,13 +58,8 @@ func build(system, arch string, config config.ProjectConfig) error { var stdout bytes.Buffer cmd.Stdout = &stdout cmd.Stderr = &stdout - err := cmd.Run() - if err != nil { + if err := cmd.Run(); err != nil { return errors.New(stdout.String()) } return nil } - -func target(system, arch, binary string) string { - return "dist/" + binary + "_" + uname.FromGo(system) + "_" + uname.FromGo(arch) + "/" + binary -} diff --git a/pipeline/compress/compress.go b/pipeline/compress/compress.go index fd0a7efa6..e18ce0a94 100644 --- a/pipeline/compress/compress.go +++ b/pipeline/compress/compress.go @@ -10,6 +10,7 @@ import ( "github.com/goreleaser/releaser/config" "github.com/goreleaser/releaser/uname" "golang.org/x/sync/errgroup" + "google.golang.org/appengine/file" ) // Pipe for compress @@ -36,7 +37,11 @@ func (Pipe) Run(config config.ProjectConfig) error { } func create(system, arch string, config config.ProjectConfig) error { - file, err := os.Create("dist/" + nameFor(system, arch, config.BinaryName) + ".tar.gz") + name, err := config.NameFor(system, arch, config.Git.CurrentTag) + if err != nil { + return err + } + file, err := os.Create("dist/" + name + ".tar.gz") log.Println("Creating", file.Name(), "...") if err != nil { return err @@ -53,7 +58,7 @@ func create(system, arch string, config config.ProjectConfig) error { return err } } - return addFile(tw, config.BinaryName+ext(system), binaryPath(system, arch, config.BinaryName)) + return addFile(tw, config.BinaryName+extFor(system), "dist/"+name+"/"+config.BinaryName) } func addFile(tw *tar.Writer, name, path string) (err error) { @@ -82,15 +87,7 @@ func addFile(tw *tar.Writer, name, path string) (err error) { return } -func nameFor(system, arch, binary string) string { - return binary + "_" + uname.FromGo(system) + "_" + uname.FromGo(arch) -} - -func binaryPath(system, arch, binary string) string { - return "dist/" + nameFor(system, arch, binary) + "/" + binary -} - -func ext(system string) string { +func extFor(system string) string { if system == "windows" { return ".exe" } diff --git a/pipeline/release/release.go b/pipeline/release/release.go index 9f3c463e4..bc64e44e6 100644 --- a/pipeline/release/release.go +++ b/pipeline/release/release.go @@ -46,7 +46,11 @@ func (Pipe) Run(config config.ProjectConfig) error { system := system arch := arch g.Go(func() error { - return upload(client, *r.ID, owner, repo, system, arch, config.BinaryName) + name, err := config.NameFor(system, arch, config.Git.CurrentTag) + if err != nil { + return err + } + return upload(client, *r.ID, owner, repo, name+".tar.gz") }) } } @@ -63,8 +67,7 @@ func description(diff string) string { return result + "\nBuilt with " + string(bts) } -func upload(client *github.Client, releaseID int, owner, repo, system, arch, binaryName string) error { - name := binaryName + "_" + uname.FromGo(system) + "_" + uname.FromGo(arch) + ".tar.gz" +func upload(client *github.Client, releaseID int, owner, repo, name string) error { file, err := os.Open("dist/" + name) if err != nil { return err From 41386c001f5236b506c8fe8c88fec83f202d1dff Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Wed, 4 Jan 2017 10:16:18 -0200 Subject: [PATCH 02/15] imports --- pipeline/build/build.go | 1 - pipeline/release/release.go | 1 - 2 files changed, 2 deletions(-) diff --git a/pipeline/build/build.go b/pipeline/build/build.go index 8fa1b8e15..c72e9692c 100644 --- a/pipeline/build/build.go +++ b/pipeline/build/build.go @@ -8,7 +8,6 @@ import ( "os/exec" "github.com/goreleaser/releaser/config" - "github.com/goreleaser/releaser/uname" "golang.org/x/sync/errgroup" ) diff --git a/pipeline/release/release.go b/pipeline/release/release.go index bc64e44e6..5c849bb0e 100644 --- a/pipeline/release/release.go +++ b/pipeline/release/release.go @@ -9,7 +9,6 @@ import ( "github.com/google/go-github/github" "github.com/goreleaser/releaser/config" "github.com/goreleaser/releaser/split" - "github.com/goreleaser/releaser/uname" "golang.org/x/oauth2" "golang.org/x/sync/errgroup" ) From 43f1f9c714e4c01b001c6316e1137f412c07c4a2 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Fri, 6 Jan 2017 11:07:41 -0200 Subject: [PATCH 03/15] continuing --- config/config.go | 30 ------------------------------ config/config_test.go | 11 ----------- name/name.go | 32 ++++++++++++++++++++++++++++++++ name/name_test.go | 22 ++++++++++++++++++++++ pipeline/brew/brew.go | 19 +++++++++++++++++-- pipeline/brew/brew_test.go | 15 +++++++++++++++ pipeline/build/build.go | 3 ++- pipeline/compress/compress.go | 5 ++--- pipeline/release/release.go | 3 ++- 9 files changed, 92 insertions(+), 48 deletions(-) create mode 100644 name/name.go create mode 100644 name/name_test.go diff --git a/config/config.go b/config/config.go index ae01f386f..138ccfbc0 100644 --- a/config/config.go +++ b/config/config.go @@ -9,9 +9,6 @@ import ( "github.com/goreleaser/releaser/config/git" yaml "gopkg.in/yaml.v1" - "bytes" - "text/template" - "github.com/goreleaser/releaser/uname" ) var filePatterns = []string{"LICENCE*", "LICENSE*", "README*", "CHANGELOG*"} @@ -68,33 +65,6 @@ func Load(file string) (config ProjectConfig, err error) { return config, config.validate() } -type NameData struct { - Goos string - Goarch string - Os string - Arch string - Version string - BinaryName string -} - -func (config *ProjectConfig) NameFor(goos, goarch, version string) (string, error) { - var data = NameData{ - Goos: goos, - Goarch: goarch, - Os: uname.FromGo(goos), - Arch: uname.FromGo(goarch), - Version: version, - BinaryName: config.BinaryName, - } - var out bytes.Buffer - template, err := template.New(data.BinaryName).Parse(config.NameTemplate) - if err != nil { - - } - err = template.Execute(&out, data) - return out.String(), err -} - func (config *ProjectConfig) validate() (err error) { if config.BinaryName == "" { return errors.New("missing binary_name") diff --git a/config/config_test.go b/config/config_test.go index 53b957ea1..110f6178a 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -69,17 +69,6 @@ func TestValidadeMinimalConfig(t *testing.T) { assert.NoError(config.validate()) } -func TestNameTemplate(t *testing.T) { - assert := assert.New(t) - var config = ProjectConfig{ - BinaryName: "test", - NameTemplate : "{{.BinaryName}}_{{.Os}}_{{.Goos}}_{{.Arch}}_{{.Goarch}}_{{.Version}}", - } - name, err := config.NameFor("darwin", "amd64", "v1.2.3") - assert.NoError(err) - assert.Equal("test_Darwin_darwin_x86_64_amd64_v1.2.3", name) -} - func assertFiles(t *testing.T, dir string, files []string) { assert := assert.New(t) diff --git a/name/name.go b/name/name.go new file mode 100644 index 000000000..84dd07769 --- /dev/null +++ b/name/name.go @@ -0,0 +1,32 @@ +package name + +import ( + "bytes" + "text/template" + + "github.com/goreleaser/releaser/config" + "github.com/goreleaser/releaser/uname" +) + +type nameData struct { + Os string + Arch string + Version string + BinaryName string +} + +func For(config config.ProjectConfig, goos, goarch string) (string, error) { + var data = nameData{ + Os: uname.FromGo(goos), + Arch: uname.FromGo(goarch), + Version: config.Git.CurrentTag, + BinaryName: config.BinaryName, + } + var out bytes.Buffer + template, err := template.New(data.BinaryName).Parse(config.NameTemplate) + if err != nil { + return "", err + } + err = template.Execute(&out, data) + return out.String(), err +} diff --git a/name/name_test.go b/name/name_test.go new file mode 100644 index 000000000..88ea6c3cb --- /dev/null +++ b/name/name_test.go @@ -0,0 +1,22 @@ +package name + +import ( + "testing" + + "github.com/goreleaser/releaser/config" + "github.com/stretchr/testify/assert" +) + +func TestNameTemplate(t *testing.T) { + assert := assert.New(t) + var config = config.ProjectConfig{ + BinaryName: "test", + NameTemplate: "{{.BinaryName}}_{{.Os}}_{{.Arch}}_{{.Version}}", + Git: config.GitInfo{ + CurrentTag: "v1.2.3", + }, + } + name, err := For(config, "darwin", "amd64") + assert.NoError(err) + assert.Equal("test_Darwin_x86_64_v1.2.3", name) +} diff --git a/pipeline/brew/brew.go b/pipeline/brew/brew.go index 0160f2c29..c48b71e0b 100644 --- a/pipeline/brew/brew.go +++ b/pipeline/brew/brew.go @@ -13,12 +13,13 @@ import ( "github.com/goreleaser/releaser/config" "github.com/goreleaser/releaser/split" "golang.org/x/oauth2" + "github.com/goreleaser/releaser/name" ) const formulae = `class {{ .Name }} < Formula desc "{{ .Desc }}" homepage "{{ .Homepage }}" - url "https://github.com/{{ .Repo }}/releases/download/{{ .Tag }}/{{ .BinaryName }}_#{%x(uname -s).gsub(/\n/, '')}_#{%x(uname -m).gsub(/\n/, '')}.tar.gz" + url "https://github.com/{{ .Repo }}/releases/download/{{ .Tag }}/{{ .File }}.tar.gz" head "https://github.com/{{ .Repo }}.git" version "{{ .Tag }}" @@ -36,7 +37,7 @@ end ` type templateData struct { - Name, Desc, Homepage, Repo, Tag, BinaryName, Caveats string + Name, Desc, Homepage, Repo, Tag, BinaryName, Caveats, File string } // Pipe for brew deployment @@ -83,6 +84,7 @@ func (Pipe) Run(config config.ProjectConfig) error { ) return err } + func sha(client *github.Client, owner, repo, name string, out bytes.Buffer) (*string, error) { file, _, _, err := client.Repositories.GetContents( owner, repo, name, &github.RepositoryContentGetOptions{}, @@ -129,6 +131,10 @@ func dataFor(config config.ProjectConfig, client *github.Client) (result templat } else { description = *rep.Description } + file, err := fileName(config) + if err != nil { + return result, err + } return templateData{ Name: formulaNameFor(config.BinaryName), Desc: description, @@ -137,9 +143,18 @@ func dataFor(config config.ProjectConfig, client *github.Client) (result templat Tag: config.Git.CurrentTag, BinaryName: config.BinaryName, Caveats: config.Brew.Caveats, + File: file, }, err } +func fileName(config config.ProjectConfig) (string, error) { + return name.For( + config, + "#{%x(uname -s).gsub(/\n/, '')}", + "#{%x(uname -m).gsub(/\n/, '')}", + ) +} + func formulaNameFor(name string) string { name = strings.Replace(name, "-", " ", -1) name = strings.Replace(name, "_", " ", -1) diff --git a/pipeline/brew/brew_test.go b/pipeline/brew/brew_test.go index 310cfa046..48913f488 100644 --- a/pipeline/brew/brew_test.go +++ b/pipeline/brew/brew_test.go @@ -4,6 +4,7 @@ import ( "testing" "github.com/stretchr/testify/assert" + "github.com/goreleaser/releaser/config" ) func TestNameWithDash(t *testing.T) { @@ -25,6 +26,7 @@ var defaultTemplateData = templateData{ Name: "Test", Repo: "caarlos0/test", Tag: "v0.1.3", + File: "test_#{%x(uname -s).gsub(/\\n/, '')}_#{%x(uname -m).gsub(/\\n/, '')}", } func assertDefaultTemplateData(t *testing.T, formulae string) { @@ -57,3 +59,16 @@ func TestFormulaeNoCaveats(t *testing.T) { assertDefaultTemplateData(t, formulae) assert.NotContains(formulae, "def caveats") } + +func TestFilename(t *testing.T) { + assert := assert.New(t) + name, err := fileName(config.ProjectConfig{ + BinaryName: "test", + NameTemplate: "{{.BinaryName}}_{{.Os}}_{{.Arch}}", + Git: config.GitInfo{ + CurrentTag:"v1.2.3", + }, + }) + assert.NoError(err) + assert.Equal("test_#{%x(uname -s).gsub(/\n/, '')}_#{%x(uname -m).gsub(/\n/, '')}", name) +} diff --git a/pipeline/build/build.go b/pipeline/build/build.go index c72e9692c..157cbaf8a 100644 --- a/pipeline/build/build.go +++ b/pipeline/build/build.go @@ -8,6 +8,7 @@ import ( "os/exec" "github.com/goreleaser/releaser/config" + "github.com/goreleaser/releaser/name" "golang.org/x/sync/errgroup" ) @@ -36,7 +37,7 @@ func (Pipe) Run(config config.ProjectConfig) error { func build(system, arch string, config config.ProjectConfig) error { log.Println("Building", system+"/"+arch, "...") - name, err := config.NameFor(system, arch, config.Git.CurrentTag) + name, err := name.For(config, system, arch) if err != nil { return err } diff --git a/pipeline/compress/compress.go b/pipeline/compress/compress.go index e18ce0a94..03537903c 100644 --- a/pipeline/compress/compress.go +++ b/pipeline/compress/compress.go @@ -8,9 +8,8 @@ import ( "os" "github.com/goreleaser/releaser/config" - "github.com/goreleaser/releaser/uname" + "github.com/goreleaser/releaser/name" "golang.org/x/sync/errgroup" - "google.golang.org/appengine/file" ) // Pipe for compress @@ -37,7 +36,7 @@ func (Pipe) Run(config config.ProjectConfig) error { } func create(system, arch string, config config.ProjectConfig) error { - name, err := config.NameFor(system, arch, config.Git.CurrentTag) + name, err := name.For(config, system, arch) if err != nil { return err } diff --git a/pipeline/release/release.go b/pipeline/release/release.go index 5c849bb0e..9aa519912 100644 --- a/pipeline/release/release.go +++ b/pipeline/release/release.go @@ -8,6 +8,7 @@ import ( "github.com/google/go-github/github" "github.com/goreleaser/releaser/config" + "github.com/goreleaser/releaser/name" "github.com/goreleaser/releaser/split" "golang.org/x/oauth2" "golang.org/x/sync/errgroup" @@ -45,7 +46,7 @@ func (Pipe) Run(config config.ProjectConfig) error { system := system arch := arch g.Go(func() error { - name, err := config.NameFor(system, arch, config.Git.CurrentTag) + name, err := name.For(config, system, arch) if err != nil { return err } From d715fe38a2ed3a3452ee5c65826e03d2c2069502 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Fri, 6 Jan 2017 11:13:17 -0200 Subject: [PATCH 04/15] gofmt and goimports --- pipeline/brew/brew.go | 2 +- pipeline/brew/brew_test.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pipeline/brew/brew.go b/pipeline/brew/brew.go index c48b71e0b..88b4d6dea 100644 --- a/pipeline/brew/brew.go +++ b/pipeline/brew/brew.go @@ -11,9 +11,9 @@ import ( "github.com/google/go-github/github" "github.com/goreleaser/releaser/config" + "github.com/goreleaser/releaser/name" "github.com/goreleaser/releaser/split" "golang.org/x/oauth2" - "github.com/goreleaser/releaser/name" ) const formulae = `class {{ .Name }} < Formula diff --git a/pipeline/brew/brew_test.go b/pipeline/brew/brew_test.go index 48913f488..c572a5b84 100644 --- a/pipeline/brew/brew_test.go +++ b/pipeline/brew/brew_test.go @@ -3,8 +3,8 @@ package brew import ( "testing" - "github.com/stretchr/testify/assert" "github.com/goreleaser/releaser/config" + "github.com/stretchr/testify/assert" ) func TestNameWithDash(t *testing.T) { @@ -66,7 +66,7 @@ func TestFilename(t *testing.T) { BinaryName: "test", NameTemplate: "{{.BinaryName}}_{{.Os}}_{{.Arch}}", Git: config.GitInfo{ - CurrentTag:"v1.2.3", + CurrentTag: "v1.2.3", }, }) assert.NoError(err) From 84b5954f478fb9f0ac284cc42a266c3e195c56d6 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Fri, 6 Jan 2017 11:14:55 -0200 Subject: [PATCH 05/15] fix test --- pipeline/compress/compress_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pipeline/compress/compress_test.go b/pipeline/compress/compress_test.go index 4e7c76191..5b2c7c910 100644 --- a/pipeline/compress/compress_test.go +++ b/pipeline/compress/compress_test.go @@ -7,9 +7,9 @@ import ( ) func TestExtWindows(t *testing.T) { - assert.Equal(t, ext("windows"), ".exe") + assert.Equal(t, extFor("windows"), ".exe") } func TestExtOthers(t *testing.T) { - assert.Empty(t, ext("linux")) + assert.Empty(t, extFor("linux")) } From 9c0373c25a7dc6249aa4014275ce24d80b9a5ca1 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Fri, 6 Jan 2017 11:17:59 -0200 Subject: [PATCH 06/15] docs --- README.md | 11 +++++++++++ config/config.go | 2 +- goreleaser.yml | 1 - 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c569b83f7..1c8cbaaaa 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,17 @@ build: > `oses` and `arches` should be in `GOOS`/`GOARCH`-compatible format. +### Custom final file name + + +```yaml +repo: user/repo +binary_name: my-binary +name_template: "{{.BinaryName}}_{{.Version}}_{{.Os}}_{{.Arch}}" +``` + +> Default is "{{.BinaryName}}_{{.Os}}_{{.Arch}}" + ### Add more files You might also want to change the files that are packaged by adding a `files` diff --git a/config/config.go b/config/config.go index 138ccfbc0..a49c184cb 100644 --- a/config/config.go +++ b/config/config.go @@ -43,7 +43,7 @@ type ProjectConfig struct { Token string `yaml:"-"` Build BuildConfig Git GitInfo `yaml:"-"` - NameTemplate string + NameTemplate string `yaml:"name_template"` } // Load config file diff --git a/goreleaser.yml b/goreleaser.yml index 97812a8c3..f349a31be 100644 --- a/goreleaser.yml +++ b/goreleaser.yml @@ -10,4 +10,3 @@ build: - windows - darwin - linux -NameTemplate: {{.BinaryName}}_{{.Version}}_{{.Os}}_{{.Arch}} From a949ac1e425e640f8417eeef5f0a773334b60e98 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Fri, 6 Jan 2017 11:42:58 -0200 Subject: [PATCH 07/15] go fmt --- config/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.go b/config/config.go index a49c184cb..9034eb2e1 100644 --- a/config/config.go +++ b/config/config.go @@ -43,7 +43,7 @@ type ProjectConfig struct { Token string `yaml:"-"` Build BuildConfig Git GitInfo `yaml:"-"` - NameTemplate string `yaml:"name_template"` + NameTemplate string `yaml:"name_template"` } // Load config file From 811b9ee1690691498329dedb2cac2e54e43d2b85 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Fri, 6 Jan 2017 13:40:49 -0200 Subject: [PATCH 08/15] readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1c8cbaaaa..b8d67a6ad 100644 --- a/README.md +++ b/README.md @@ -62,8 +62,9 @@ build: > `oses` and `arches` should be in `GOOS`/`GOARCH`-compatible format. -### Custom final file name +### Custom archive file name +You can customize the name of the archive using the name_template config: ```yaml repo: user/repo From d13667d1730903e3feb8f88559e12299471af8ea Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Wed, 11 Jan 2017 14:28:12 -0200 Subject: [PATCH 09/15] fixes --- config/config.go | 2 +- pipeline/brew/brew.go | 19 +++++-------------- pipeline/brew/brew_test.go | 16 +--------------- pipeline/compress/compress.go | 3 +-- pipeline/release/release.go | 8 ++++---- 5 files changed, 12 insertions(+), 36 deletions(-) diff --git a/config/config.go b/config/config.go index cc4ebcb78..3076c0866 100644 --- a/config/config.go +++ b/config/config.go @@ -115,7 +115,7 @@ func (config *ProjectConfig) fillBasicData() { } if config.NameTemplate == "" { config.NameTemplate = "{{.BinaryName}}_{{.Os}}_{{.Arch}}" - } + } if config.Archive.Format == "" { config.Archive.Format = "tar.gz" } diff --git a/pipeline/brew/brew.go b/pipeline/brew/brew.go index 496bb0d4f..363cd05e4 100644 --- a/pipeline/brew/brew.go +++ b/pipeline/brew/brew.go @@ -21,7 +21,6 @@ const formulae = `class {{ .Name }} < Formula desc "{{ .Desc }}" homepage "{{ .Homepage }}" url "https://github.com/{{ .Repo }}/releases/download/{{ .Tag }}/{{ .File }}.{{ .Format }}" - head "https://github.com/{{ .Repo }}.git" version "{{ .Tag }}" sha256 "{{ .SHA256 }}" @@ -123,7 +122,11 @@ func dataFor(config config.ProjectConfig, client *github.Client) (result templat if err != nil { return } - sum, err := sha256sum.For("dist/" + config.BinaryName + "_Darwin_x86_64." + config.Archive.Format) + file, err := name.For(config, "darwin", "amd64") + if err != nil { + return + } + sum, err := sha256sum.For("dist/" + file + config.Archive.Format) if err != nil { return } @@ -137,10 +140,6 @@ func dataFor(config config.ProjectConfig, client *github.Client) (result templat } else { description = *rep.Description } - file, err := fileName(config) - if err != nil { - return result, err - } return templateData{ Name: formulaNameFor(config.BinaryName), Desc: description, @@ -155,14 +154,6 @@ func dataFor(config config.ProjectConfig, client *github.Client) (result templat }, err } -func fileName(config config.ProjectConfig) (string, error) { - return name.For( - config, - "#{%x(uname -s).gsub(/\n/, '')}", - "#{%x(uname -m).gsub(/\n/, '')}", - ) -} - func formulaNameFor(name string) string { name = strings.Replace(name, "-", " ", -1) name = strings.Replace(name, "_", " ", -1) diff --git a/pipeline/brew/brew_test.go b/pipeline/brew/brew_test.go index 653ac325e..16c2603a7 100644 --- a/pipeline/brew/brew_test.go +++ b/pipeline/brew/brew_test.go @@ -3,7 +3,6 @@ package brew import ( "testing" - "github.com/goreleaser/releaser/config" "github.com/stretchr/testify/assert" ) @@ -26,7 +25,7 @@ var defaultTemplateData = templateData{ Name: "Test", Repo: "caarlos0/test", Tag: "v0.1.3", - File: "test_#{%x(uname -s).gsub(/\\n/, '')}_#{%x(uname -m).gsub(/\\n/, '')}", + File: "test_Darwin_x86_64", SHA256: "1633f61598ab0791e213135923624eb342196b3494909c91899bcd0560f84c68", Format: "tar.gz", } @@ -62,16 +61,3 @@ func TestFormulaeNoCaveats(t *testing.T) { assertDefaultTemplateData(t, formulae) assert.NotContains(formulae, "def caveats") } - -func TestFilename(t *testing.T) { - assert := assert.New(t) - name, err := fileName(config.ProjectConfig{ - BinaryName: "test", - NameTemplate: "{{.BinaryName}}_{{.Os}}_{{.Arch}}", - Git: config.GitInfo{ - CurrentTag: "v1.2.3", - }, - }) - assert.NoError(err) - assert.Equal("test_#{%x(uname -s).gsub(/\n/, '')}_#{%x(uname -m).gsub(/\n/, '')}", name) -} diff --git a/pipeline/compress/compress.go b/pipeline/compress/compress.go index 8f46ec705..8f5707154 100644 --- a/pipeline/compress/compress.go +++ b/pipeline/compress/compress.go @@ -8,7 +8,6 @@ import ( "github.com/goreleaser/releaser/name" "github.com/goreleaser/releaser/pipeline/compress/tar" "github.com/goreleaser/releaser/pipeline/compress/zip" - "github.com/goreleaser/releaser/uname" "golang.org/x/sync/errgroup" ) @@ -58,7 +57,7 @@ func create(system, arch string, config config.ProjectConfig) error { return err } } - return addFile(tw, config.BinaryName+extFor(system), "dist/"+name+"/"+config.BinaryName) + return archive.Add(config.BinaryName+extFor(system), "dist/"+name+"/"+config.BinaryName) } func archiveFor(file *os.File, format string) Archive { diff --git a/pipeline/release/release.go b/pipeline/release/release.go index a0fc838bd..b84f6ccae 100644 --- a/pipeline/release/release.go +++ b/pipeline/release/release.go @@ -65,10 +65,10 @@ func description(diff string) string { func upload(client *github.Client, releaseID int, system, arch string, config config.ProjectConfig) error { owner, repo := split.OnSlash(config.Repo) - name, err := name.For(config, system, arch) - if err != nil { - return err - } + name, err := name.For(config, system, arch) + if err != nil { + return err + } name = name + "." + config.Archive.Format file, err := os.Open("dist/" + name) if err != nil { From 8731ef7ece3d9c35b40e214d1078b625573f76dc Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Wed, 11 Jan 2017 14:47:56 -0200 Subject: [PATCH 10/15] refactory --- config/archive_config.go | 38 +++++++++++++++++++++++++++++++++++ config/archive_config_test.go | 23 +++++++++++++++++++++ config/config.go | 26 +++++++++--------------- name/name.go | 32 ----------------------------- name/name_test.go | 22 -------------------- pipeline/brew/brew.go | 3 +-- pipeline/build/build.go | 3 +-- pipeline/compress/compress.go | 3 +-- pipeline/release/release.go | 3 +-- 9 files changed, 75 insertions(+), 78 deletions(-) create mode 100644 config/archive_config.go create mode 100644 config/archive_config_test.go delete mode 100644 name/name.go delete mode 100644 name/name_test.go diff --git a/config/archive_config.go b/config/archive_config.go new file mode 100644 index 000000000..cfca9d185 --- /dev/null +++ b/config/archive_config.go @@ -0,0 +1,38 @@ +package config + +import ( + "bytes" + "html/template" + + "github.com/goreleaser/releaser/uname" +) + +// ArchiveConfig config used for the archive +type ArchiveConfig struct { + Format string + NameTemplate string `yaml:"name_template"` +} + +type archiveNameData struct { + Os string + Arch string + Version string + BinaryName string +} + +// ArchiveName following the given template +func (config ProjectConfig) ArchiveName(goos, goarch string) (string, error) { + var data = archiveNameData{ + Os: uname.FromGo(goos), + Arch: uname.FromGo(goarch), + Version: config.Git.CurrentTag, + BinaryName: config.BinaryName, + } + var out bytes.Buffer + t, err := template.New(data.BinaryName).Parse(config.Archive.NameTemplate) + if err != nil { + return "", err + } + err = t.Execute(&out, data) + return out.String(), err +} diff --git a/config/archive_config_test.go b/config/archive_config_test.go new file mode 100644 index 000000000..f0265848f --- /dev/null +++ b/config/archive_config_test.go @@ -0,0 +1,23 @@ +package config + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestNameTemplate(t *testing.T) { + assert := assert.New(t) + var config = ProjectConfig{ + BinaryName: "test", + Git: GitInfo{ + CurrentTag: "v1.2.3", + }, + Archive: ArchiveConfig{ + NameTemplate: "{{.BinaryName}}_{{.Os}}_{{.Arch}}_{{.Version}}", + }, + } + name, err := config.ArchiveName("darwin", "amd64") + assert.NoError(err) + assert.Equal("test_Darwin_x86_64_v1.2.3", name) +} diff --git a/config/config.go b/config/config.go index 3076c0866..58869c6be 100644 --- a/config/config.go +++ b/config/config.go @@ -34,22 +34,16 @@ type GitInfo struct { Diff string } -// ArchiveConfig -type ArchiveConfig struct { - Format string -} - // ProjectConfig includes all project configuration type ProjectConfig struct { - Repo string - BinaryName string `yaml:"binary_name"` - Files []string - Brew Homebrew - Token string `yaml:"-"` - Build BuildConfig - Git GitInfo `yaml:"-"` - NameTemplate string `yaml:"name_template"` - Archive ArchiveConfig + Repo string + BinaryName string `yaml:"binary_name"` + Files []string + Brew Homebrew + Token string `yaml:"-"` + Build BuildConfig + Git GitInfo `yaml:"-"` + Archive ArchiveConfig } // Load config file @@ -113,8 +107,8 @@ func (config *ProjectConfig) fillBasicData() { if len(config.Build.Arches) == 0 { config.Build.Arches = []string{"amd64", "386"} } - if config.NameTemplate == "" { - config.NameTemplate = "{{.BinaryName}}_{{.Os}}_{{.Arch}}" + if config.Archive.NameTemplate == "" { + config.Archive.NameTemplate = "{{.BinaryName}}_{{.Os}}_{{.Arch}}" } if config.Archive.Format == "" { config.Archive.Format = "tar.gz" diff --git a/name/name.go b/name/name.go deleted file mode 100644 index 84dd07769..000000000 --- a/name/name.go +++ /dev/null @@ -1,32 +0,0 @@ -package name - -import ( - "bytes" - "text/template" - - "github.com/goreleaser/releaser/config" - "github.com/goreleaser/releaser/uname" -) - -type nameData struct { - Os string - Arch string - Version string - BinaryName string -} - -func For(config config.ProjectConfig, goos, goarch string) (string, error) { - var data = nameData{ - Os: uname.FromGo(goos), - Arch: uname.FromGo(goarch), - Version: config.Git.CurrentTag, - BinaryName: config.BinaryName, - } - var out bytes.Buffer - template, err := template.New(data.BinaryName).Parse(config.NameTemplate) - if err != nil { - return "", err - } - err = template.Execute(&out, data) - return out.String(), err -} diff --git a/name/name_test.go b/name/name_test.go deleted file mode 100644 index 88ea6c3cb..000000000 --- a/name/name_test.go +++ /dev/null @@ -1,22 +0,0 @@ -package name - -import ( - "testing" - - "github.com/goreleaser/releaser/config" - "github.com/stretchr/testify/assert" -) - -func TestNameTemplate(t *testing.T) { - assert := assert.New(t) - var config = config.ProjectConfig{ - BinaryName: "test", - NameTemplate: "{{.BinaryName}}_{{.Os}}_{{.Arch}}_{{.Version}}", - Git: config.GitInfo{ - CurrentTag: "v1.2.3", - }, - } - name, err := For(config, "darwin", "amd64") - assert.NoError(err) - assert.Equal("test_Darwin_x86_64_v1.2.3", name) -} diff --git a/pipeline/brew/brew.go b/pipeline/brew/brew.go index 363cd05e4..e431744bd 100644 --- a/pipeline/brew/brew.go +++ b/pipeline/brew/brew.go @@ -11,7 +11,6 @@ import ( "github.com/google/go-github/github" "github.com/goreleaser/releaser/config" - "github.com/goreleaser/releaser/name" "github.com/goreleaser/releaser/sha256sum" "github.com/goreleaser/releaser/split" "golang.org/x/oauth2" @@ -122,7 +121,7 @@ func dataFor(config config.ProjectConfig, client *github.Client) (result templat if err != nil { return } - file, err := name.For(config, "darwin", "amd64") + file, err := config.ArchiveName("darwin", "amd64") if err != nil { return } diff --git a/pipeline/build/build.go b/pipeline/build/build.go index 157cbaf8a..0f73913ee 100644 --- a/pipeline/build/build.go +++ b/pipeline/build/build.go @@ -8,7 +8,6 @@ import ( "os/exec" "github.com/goreleaser/releaser/config" - "github.com/goreleaser/releaser/name" "golang.org/x/sync/errgroup" ) @@ -37,7 +36,7 @@ func (Pipe) Run(config config.ProjectConfig) error { func build(system, arch string, config config.ProjectConfig) error { log.Println("Building", system+"/"+arch, "...") - name, err := name.For(config, system, arch) + name, err := config.ArchiveName(system, arch) if err != nil { return err } diff --git a/pipeline/compress/compress.go b/pipeline/compress/compress.go index 8f5707154..0b4c9f880 100644 --- a/pipeline/compress/compress.go +++ b/pipeline/compress/compress.go @@ -5,7 +5,6 @@ import ( "os" "github.com/goreleaser/releaser/config" - "github.com/goreleaser/releaser/name" "github.com/goreleaser/releaser/pipeline/compress/tar" "github.com/goreleaser/releaser/pipeline/compress/zip" "golang.org/x/sync/errgroup" @@ -40,7 +39,7 @@ type Archive interface { } func create(system, arch string, config config.ProjectConfig) error { - name, err := name.For(config, system, arch) + name, err := config.ArchiveName(system, arch) if err != nil { return err } diff --git a/pipeline/release/release.go b/pipeline/release/release.go index b84f6ccae..ecf0697af 100644 --- a/pipeline/release/release.go +++ b/pipeline/release/release.go @@ -8,7 +8,6 @@ import ( "github.com/google/go-github/github" "github.com/goreleaser/releaser/config" - "github.com/goreleaser/releaser/name" "github.com/goreleaser/releaser/split" "golang.org/x/oauth2" "golang.org/x/sync/errgroup" @@ -65,7 +64,7 @@ func description(diff string) string { func upload(client *github.Client, releaseID int, system, arch string, config config.ProjectConfig) error { owner, repo := split.OnSlash(config.Repo) - name, err := name.For(config, system, arch) + name, err := config.ArchiveName(system, arch) if err != nil { return err } From 362d2c61dcae84090be16ca161ceec845d3f1a99 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Wed, 11 Jan 2017 14:52:30 -0200 Subject: [PATCH 11/15] readme --- README.md | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index a24941bb0..90528ffaa 100644 --- a/README.md +++ b/README.md @@ -32,8 +32,8 @@ curl -s https://raw.githubusercontent.com/goreleaser/get/master/latest | bash ``` This will build `main.go` file as `my-binary`, for _Darwin_ and _Linux_, -_x86_64_ and _i386_, packaging the binary, `LICENSE.md` and `README.md` -and publish a new github release in the `user/repo` repository with +_x86_64_ and _i386_, packaging the binary, `LICENSE.*`, `CHANGELOG.*` and +`README.*` and publish a new github release in the `user/repo` repository with the `.tar.gz` files there. ### Homebrew @@ -66,17 +66,21 @@ build: > `oses` and `arches` should be in `GOOS`/`GOARCH`-compatible format. -### Custom archive file name +### Archive customization -You can customize the name of the archive using the name_template config: +You can customize the name and format of the archive adding an `archive` +section: ```yaml repo: user/repo binary_name: my-binary -name_template: "{{.BinaryName}}_{{.Version}}_{{.Os}}_{{.Arch}}" +archive: + name_template: "{{.BinaryName}}_{{.Version}}_{{.Os}}_{{.Arch}}" + format: tar.gz ``` > Default is "{{.BinaryName}}_{{.Os}}_{{.Arch}}" +> Valid formats are `tar.gz` and `zip` ### Add more files @@ -92,6 +96,9 @@ files: - CHANGELOG.md ``` +> By default GoReleaser adds the binary itself, `LICENCE*`, `LICENSE*`, +`README*` and `CHANGELOG*`. + ## Wire it with travis-ci You may want to wire this to auto-deploy your new tags on travis, for example: @@ -112,11 +119,11 @@ And the [homebrew formulae](https://github.com/goreleaser/homebrew-formulae/blob ```rb class Release < Formula - desc "Deliver Go binaries as fast and easily as possible." + desc "Deliver Go binaries as fast and easily as possible" homepage "https://github.com/goreleaser/releaser" - url "https://github.com/goreleaser/releaser/releases/download/v0.2.0/release_#{%x(uname -s).gsub(/\n/, '')}_#{%x(uname -m).gsub(/\n/, '')}.tar.gz" - head "https://github.com/goreleaser/releaser.git" - version "v0.2.0" + url "https://github.com/goreleaser/releaser/releases/download/v0.2.8/release_Darwin_x86_64.tar.gz" + version "v0.2.8" + sha256 "9ee30fc358fae8d248a2d7538957089885da321dca3f09e3296fe2058e7fff74" def install bin.install "release" From 22e9fb8b437aa7db11c22f59f15896249232e266 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Wed, 11 Jan 2017 14:55:16 -0200 Subject: [PATCH 12/15] tabs vs spaces --- Makefile | 2 +- README.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index c8d29e325..a0d36099c 100644 --- a/Makefile +++ b/Makefile @@ -24,7 +24,7 @@ lint: ## Run all the linters --enable=errcheck \ --enable=vet \ --enable=vetshadow \ - --deadline=20s \ + --deadline=1m \ ./... ci: lint test ## Run all the tests and code checks diff --git a/README.md b/README.md index 90528ffaa..647d676e8 100644 --- a/README.md +++ b/README.md @@ -75,8 +75,8 @@ section: repo: user/repo binary_name: my-binary archive: - name_template: "{{.BinaryName}}_{{.Version}}_{{.Os}}_{{.Arch}}" - format: tar.gz + name_template: "{{.BinaryName}}_{{.Version}}_{{.Os}}_{{.Arch}}" + format: tar.gz ``` > Default is "{{.BinaryName}}_{{.Os}}_{{.Arch}}" From 6b563b1dbf180c0e02af6347150368cba4aed895 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Wed, 11 Jan 2017 14:55:51 -0200 Subject: [PATCH 13/15] tabs vs spaces --- .editorconfig | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.editorconfig b/.editorconfig index 85365caa0..ffa0cca3e 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,3 +8,7 @@ insert_final_newline = true trim_trailing_whitespace = true insert_final_newline = true charset = utf-8 + +[*.md] +indent_size = 2 +indent_style = space From c70edac82fa18ba5bab791a7f3e8fb8270c0a06d Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Wed, 11 Jan 2017 14:59:06 -0200 Subject: [PATCH 14/15] readme improvements --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 647d676e8..865a174e7 100644 --- a/README.md +++ b/README.md @@ -31,14 +31,14 @@ You may then run releaser at the root of your repository: curl -s https://raw.githubusercontent.com/goreleaser/get/master/latest | bash ``` -This will build `main.go` file as `my-binary`, for _Darwin_ and _Linux_, -_x86_64_ and _i386_, packaging the binary, `LICENSE.*`, `CHANGELOG.*` and -`README.*` and publish a new github release in the `user/repo` repository with -the `.tar.gz` files there. +This will build `main.go` as `my-binary`, for `Darwin` and `Linux` +(`amd64` and `i386`), archive the binary and common files as `.tar.gz`, +and finally, publish a new github release in the `user/repo` repository with +archives uploaded. ### Homebrew -To push it to a homebrew repo, just add a `brew` section: +To push a basic formulae a homebrew tap repo, just add a `brew` section: ```yaml repo: user/repo From ee73594f2e00a0a7411dcb1a9d66611a8ae217b5 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Wed, 11 Jan 2017 14:59:55 -0200 Subject: [PATCH 15/15] adding defaults --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 865a174e7..a2d7b1c50 100644 --- a/README.md +++ b/README.md @@ -79,8 +79,8 @@ archive: format: tar.gz ``` -> Default is "{{.BinaryName}}_{{.Os}}_{{.Arch}}" -> Valid formats are `tar.gz` and `zip` +> Default `name_template` is "{{.BinaryName}}_{{.Os}}_{{.Arch}}" +> Valid formats are `tar.gz` and `zip`, default is `tar.gz` ### Add more files