From 12436a5bf40742d5b15c33daea9e100983bcde12 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker <caarlos0@gmail.com> Date: Sat, 31 Dec 2016 10:03:25 -0200 Subject: [PATCH] improved config --- config/config.go | 74 +++++++++++++++++++++---------------------- config/config_test.go | 72 +++++++++++++++++++++++++++++------------ 2 files changed, 88 insertions(+), 58 deletions(-) diff --git a/config/config.go b/config/config.go index 42af9e2e9..96e12b33f 100644 --- a/config/config.go +++ b/config/config.go @@ -3,7 +3,6 @@ package config import ( "errors" "io/ioutil" - "log" "os" "path" "path/filepath" @@ -56,33 +55,43 @@ func Load(file string) (config ProjectConfig, err error) { return config, err } err = yaml.Unmarshal(data, &config) - config = fix(config) - config, err = fillGitData(config) - if err != nil { + config.fillBasicData() + if err := config.fillFiles(); err != nil { return config, err } - if config.BinaryName == "" { - return config, errors.New("missing binary_name") + if err := config.fillGitData(); err != nil { + return config, err } - if config.Repo == "" { - return config, errors.New("missing repo") - } - return config, err + return config, config.validade() } -func fix(config ProjectConfig) ProjectConfig { - if len(config.Files) == 0 { - config.Files = []string{} - - for _, pattern := range filePatterns { - matches, err := globPath(pattern) - if err != nil { - log.Fatalf("Error searching for %q: %v", pattern, err) - } - - config.Files = append(config.Files, matches...) - } +func (config *ProjectConfig) validade() (err error) { + if config.BinaryName == "" { + return errors.New("missing binary_name") } + if config.Repo == "" { + return errors.New("missing repo") + } + return +} + +func (config *ProjectConfig) fillFiles() (err error) { + if len(config.Files) != 0 { + return + } + config.Files = []string{} + for _, pattern := range filePatterns { + matches, err := globPath(pattern) + if err != nil { + return err + } + + config.Files = append(config.Files, matches...) + } + return +} + +func (config *ProjectConfig) fillBasicData() { if config.Token == "" { config.Token = os.Getenv("GITHUB_TOKEN") } @@ -98,37 +107,26 @@ func fix(config ProjectConfig) ProjectConfig { if len(config.Build.Arches) == 0 { config.Build.Arches = []string{"amd64", "386"} } - - return config } -func fillGitData(config ProjectConfig) (ProjectConfig, error) { +func (config *ProjectConfig) fillGitData() (err error) { tag, err := git.CurrentTag() if err != nil { - return config, err + return } previous, err := git.PreviousTag(tag) if err != nil { - return config, err + return } log, err := git.Log(previous, tag) if err != nil { - return config, err + return } config.Git.CurrentTag = tag config.Git.PreviousTag = previous config.Git.Diff = log - return config, nil -} - -func contains(s string, ss []string) bool { - for _, sx := range ss { - if sx == s { - return true - } - } - return false + return } func globPath(p string) (m []string, err error) { diff --git a/config/config_test.go b/config/config_test.go index e79e625dd..a141aca13 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -7,9 +7,10 @@ import ( "github.com/stretchr/testify/assert" ) -func TestFixConfig(t *testing.T) { +func TestFillBasicData(t *testing.T) { assert := assert.New(t) - config := fix(ProjectConfig{}) + config := ProjectConfig{} + config.fillBasicData() assert.Equal("main.go", config.Build.Main) assert.Contains(config.Build.Oses, "darwin") @@ -18,57 +19,88 @@ func TestFixConfig(t *testing.T) { assert.Contains(config.Build.Arches, "amd64") } -func TestFixConfigMissingFiles(t *testing.T) { +func TestFillFilesMissingFiles(t *testing.T) { assert := assert.New(t) - config := fix(ProjectConfig{}) + config := ProjectConfig{} + err := config.fillFiles() + assert.NoError(err) assert.Equal([]string{}, config.Files) } -func TestFixConfigUSENMarkdown(t *testing.T) { +func TestFillFilesUSENMarkdown(t *testing.T) { assert := assert.New(t) cwd, _ := os.Getwd() os.Chdir("./.test/1") + defer os.Chdir(cwd) - config := fix(ProjectConfig{}) + config := ProjectConfig{} + err := config.fillFiles() + + assert.NoError(err) assert.Equal([]string{"LICENSE.md", "README.md"}, config.Files) - - os.Chdir(cwd) } -func TestFixConfigRealENMarkdown(t *testing.T) { +func TestFillFilesRealENMarkdown(t *testing.T) { assert := assert.New(t) cwd, _ := os.Getwd() os.Chdir("./.test/2") + defer os.Chdir(cwd) - config := fix(ProjectConfig{}) + config := ProjectConfig{} + err := config.fillFiles() + + assert.NoError(err) assert.Equal([]string{"LICENCE.md", "README.md"}, config.Files) - - os.Chdir(cwd) } -func TestFixConfigArbitratryENTXT(t *testing.T) { +func TestFillFilesArbitratryENTXT(t *testing.T) { assert := assert.New(t) cwd, _ := os.Getwd() os.Chdir("./.test/3") + defer os.Chdir(cwd) - config := fix(ProjectConfig{}) + config := ProjectConfig{} + err := config.fillFiles() + + assert.NoError(err) assert.Equal([]string{"LICENCE.txt", "README.txt"}, config.Files) - - os.Chdir(cwd) } -func TestFixConfigArbitratryENNoSuffix(t *testing.T) { +func TestFillFilesArbitratryENNoSuffix(t *testing.T) { assert := assert.New(t) cwd, _ := os.Getwd() os.Chdir("./.test/4") + defer os.Chdir(cwd) - config := fix(ProjectConfig{}) + config := ProjectConfig{} + err := config.fillFiles() + + assert.NoError(err) assert.Equal([]string{"LICENCE"}, config.Files) - - os.Chdir(cwd) +} + +func TestValidadeMissingBinaryName(t *testing.T) { + assert := assert.New(t) + + config := ProjectConfig{Repo: "asd/asd"} + assert.Error(config.validade()) +} + +func TestValidadeMissingRepo(t *testing.T) { + assert := assert.New(t) + + config := ProjectConfig{BinaryName: "asd"} + assert.Error(config.validade()) +} + +func TestValidadeMinimalConfig(t *testing.T) { + assert := assert.New(t) + + config := ProjectConfig{BinaryName: "asd", Repo: "asd/asd"} + assert.NoError(config.validade()) }