1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-01-24 04:16:27 +02:00
goreleaser/config/config.go

154 lines
2.9 KiB
Go
Raw Normal View History

2016-12-21 10:35:34 -02:00
package config
import (
2016-12-28 23:40:59 -02:00
"errors"
2016-12-21 10:35:34 -02:00
"io/ioutil"
"os"
"path"
"path/filepath"
2016-12-21 10:35:34 -02:00
2016-12-30 09:27:35 -02:00
"github.com/goreleaser/releaser/config/git"
2016-12-21 10:35:34 -02:00
yaml "gopkg.in/yaml.v1"
)
var (
emptyBrew = Homebrew{}
2016-12-31 11:20:41 +00:00
filePatterns = []string{"LICENCE*", "LICENSE*", "README*"}
)
2016-12-21 10:35:34 -02:00
2016-12-30 12:41:59 -02:00
// Homebrew contains the brew section
type Homebrew struct {
2016-12-29 13:14:52 -02:00
Repo string
Token string
Caveats string
2016-12-21 10:35:34 -02:00
}
2016-12-30 12:41:59 -02:00
// BuildConfig contains the build configuration section
2016-12-21 11:37:31 -02:00
type BuildConfig struct {
Oses []string
Arches []string
2016-12-29 12:37:11 -02:00
Main string
2016-12-21 11:37:31 -02:00
}
2016-12-30 12:41:59 -02:00
// GitInfo includes tags and diffs used in some point
2016-12-30 09:27:35 -02:00
type GitInfo struct {
CurrentTag string
PreviousTag string
Diff string
}
2016-12-30 12:41:59 -02:00
// ProjectConfig includes all project configuration
2016-12-21 10:35:34 -02:00
type ProjectConfig struct {
Repo string
2016-12-28 23:50:37 -02:00
BinaryName string `yaml:"binary_name"`
Files []string
2016-12-30 12:41:59 -02:00
Brew Homebrew
2016-12-21 10:35:34 -02:00
Token string
2016-12-21 11:37:31 -02:00
Build BuildConfig
2016-12-30 09:27:35 -02:00
Git GitInfo `yaml:"_"`
2016-12-21 10:35:34 -02:00
}
2016-12-30 12:41:59 -02:00
// Load config file
2016-12-21 10:35:34 -02:00
func Load(file string) (config ProjectConfig, err error) {
data, err := ioutil.ReadFile(file)
if err != nil {
return config, err
}
err = yaml.Unmarshal(data, &config)
2016-12-31 10:03:25 -02:00
config.fillBasicData()
if err := config.fillFiles(); err != nil {
return config, err
}
if err := config.fillGitData(); err != nil {
2016-12-30 09:27:35 -02:00
return config, err
}
2016-12-31 10:03:25 -02:00
return config, config.validade()
}
func (config *ProjectConfig) validade() (err error) {
2016-12-28 23:35:45 -02:00
if config.BinaryName == "" {
2016-12-31 10:03:25 -02:00
return errors.New("missing binary_name")
2016-12-28 23:35:45 -02:00
}
if config.Repo == "" {
2016-12-31 10:03:25 -02:00
return errors.New("missing repo")
2016-12-28 23:35:45 -02:00
}
2016-12-31 10:03:25 -02:00
return
2016-12-21 10:35:34 -02:00
}
2016-12-31 10:03:25 -02:00
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
2016-12-21 10:35:34 -02:00
}
2016-12-31 10:03:25 -02:00
config.Files = append(config.Files, matches...)
2016-12-21 10:35:34 -02:00
}
2016-12-31 10:03:25 -02:00
return
}
func (config *ProjectConfig) fillBasicData() {
2016-12-21 10:35:34 -02:00
if config.Token == "" {
config.Token = os.Getenv("GITHUB_TOKEN")
}
if config.Brew != emptyBrew && config.Brew.Token == "" {
config.Brew.Token = config.Token
}
2016-12-29 14:03:17 -02:00
if config.Build.Main == "" {
config.Build.Main = "main.go"
}
2016-12-21 11:37:31 -02:00
if len(config.Build.Oses) == 0 {
config.Build.Oses = []string{"linux", "darwin"}
}
if len(config.Build.Arches) == 0 {
config.Build.Arches = []string{"amd64", "386"}
}
2016-12-21 10:35:34 -02:00
}
2016-12-31 10:03:25 -02:00
func (config *ProjectConfig) fillGitData() (err error) {
2016-12-30 09:27:35 -02:00
tag, err := git.CurrentTag()
if err != nil {
2016-12-31 10:03:25 -02:00
return
2016-12-30 09:27:35 -02:00
}
previous, err := git.PreviousTag(tag)
if err != nil {
2016-12-31 10:03:25 -02:00
return
2016-12-30 09:27:35 -02:00
}
log, err := git.Log(previous, tag)
if err != nil {
2016-12-31 10:03:25 -02:00
return
2016-12-30 09:27:35 -02:00
}
config.Git.CurrentTag = tag
config.Git.PreviousTag = previous
config.Git.Diff = log
2016-12-31 10:03:25 -02:00
return
2016-12-21 10:35:34 -02:00
}
func globPath(p string) (m []string, err error) {
var cwd string
var dirs []string
if cwd, err = os.Getwd(); err != nil {
return
}
fp := path.Join(cwd, p)
if dirs, err = filepath.Glob(fp); err != nil {
return
}
// Normalise to avoid nested dirs in tarball
for _, dir := range dirs {
_, f := filepath.Split(dir)
m = append(m, f)
}
return
}