mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-03-17 20:47:50 +02:00
Merge pull request #14 from goreleaser/improve-config-code
Improve config code
This commit is contained in:
commit
79d621e9d8
@ -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.validate()
|
||||
}
|
||||
|
||||
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) validate() (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) {
|
||||
|
@ -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.validate())
|
||||
}
|
||||
|
||||
func TestValidadeMissingRepo(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
|
||||
config := ProjectConfig{BinaryName: "asd"}
|
||||
assert.Error(config.validate())
|
||||
}
|
||||
|
||||
func TestValidadeMinimalConfig(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
|
||||
config := ProjectConfig{BinaryName: "asd", Repo: "asd/asd"}
|
||||
assert.NoError(config.validate())
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user