github.com/droot/goreleaser@v0.66.2-0.20180420030140-c2db5fb17157/pipeline/env/env.go (about) 1 // Package env implements the Pipe interface providing validation of 2 // missing environment variables needed by the release process. 3 package env 4 5 import ( 6 "bufio" 7 "os" 8 9 "github.com/goreleaser/goreleaser/context" 10 "github.com/goreleaser/goreleaser/pipeline" 11 homedir "github.com/mitchellh/go-homedir" 12 "github.com/pkg/errors" 13 ) 14 15 // ErrMissingToken indicates an error when GITHUB_TOKEN is missing in the environment 16 var ErrMissingToken = errors.New("missing GITHUB_TOKEN") 17 18 // Pipe for env 19 type Pipe struct{} 20 21 func (Pipe) String() string { 22 return "loading environment variables" 23 } 24 25 // Default sets the pipe defaults 26 func (Pipe) Default(ctx *context.Context) error { 27 var env = &ctx.Config.EnvFiles 28 if env.GitHubToken == "" { 29 env.GitHubToken = "~/.config/goreleaser/github_token" 30 } 31 return nil 32 } 33 34 // Run the pipe 35 func (Pipe) Run(ctx *context.Context) error { 36 token, err := loadEnv("GITHUB_TOKEN", ctx.Config.EnvFiles.GitHubToken) 37 ctx.Token = token 38 if ctx.SkipPublish { 39 return pipeline.ErrSkipPublishEnabled 40 } 41 if ctx.Token == "" && err == nil { 42 return ErrMissingToken 43 } 44 return errors.Wrap(err, "failed to load github token") 45 } 46 47 func loadEnv(env, path string) (string, error) { 48 val := os.Getenv(env) 49 if val != "" { 50 return val, nil 51 } 52 path, err := homedir.Expand(path) 53 if err != nil { 54 return "", err 55 } 56 f, err := os.Open(path) 57 if os.IsNotExist(err) { 58 return "", nil 59 } 60 if err != nil { 61 return "", err 62 } 63 bts, _, err := bufio.NewReader(f).ReadLine() 64 return string(bts), err 65 }