From dab3f0a9f947f6f3b0cb9e3cceaab52e6d2ca49a Mon Sep 17 00:00:00 2001 From: Brad Rydzewski Date: Mon, 26 Jun 2017 15:37:47 -0400 Subject: [PATCH] enable globals (#2091) * fixes #1523 to ensure json-file driver * added environment * inject globals --- model/environ.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ server/build.go | 14 ++++++++++++++ server/hook.go | 9 +++++++++ server/rpc.go | 1 + 4 files changed, 72 insertions(+) create mode 100644 model/environ.go diff --git a/model/environ.go b/model/environ.go new file mode 100644 index 000000000..3e3e00b5b --- /dev/null +++ b/model/environ.go @@ -0,0 +1,48 @@ +package model + +import ( + "errors" +) + +var ( + errEnvironNameInvalid = errors.New("Invalid Environment Variable Name") + errEnvironValueInvalid = errors.New("Invalid Environment Variable Value") +) + +// EnvironService defines a service for managing environment variables. +type EnvironService interface { + EnvironList(*Repo) ([]*Environ, error) +} + +// EnvironStore persists environment information to storage. +type EnvironStore interface { + EnvironList(*Repo) ([]*Environ, error) +} + +// Environ represents an environment variable. +// swagger:model environ +type Environ struct { + ID int64 `json:"id" meddler:"env_id,pk"` + Name string `json:"name" meddler:"env_name"` + Value string `json:"value,omitempty" meddler:"env_value"` +} + +// Validate validates the required fields and formats. +func (e *Environ) Validate() error { + switch { + case len(e.Name) == 0: + return errEnvironNameInvalid + case len(e.Value) == 0: + return errEnvironValueInvalid + default: + return nil + } +} + +// Copy makes a copy of the environment variable without the value. +func (e *Environ) Copy() *Environ { + return &Environ{ + ID: e.ID, + Name: e.Name, + } +} diff --git a/server/build.go b/server/build.go index 44fbf95d6..f709245a2 100644 --- a/server/build.go +++ b/server/build.go @@ -205,6 +205,13 @@ func PostApproval(c *gin.Context) { if err != nil { logrus.Debugf("Error getting registry credentials for %s#%d. %s", repo.FullName, build.Number, err) } + envs := map[string]string{} + if Config.Services.Environ != nil { + globals, _ := Config.Services.Environ.EnvironList(repo) + for _, global := range globals { + envs[global.Name] = global.Value + } + } defer func() { uri := fmt.Sprintf("%s/%s/%d", httputil.GetURL(c.Request), repo.FullName, build.Number) @@ -223,6 +230,7 @@ func PostApproval(c *gin.Context) { Regs: regs, Link: httputil.GetURL(c.Request), Yaml: conf.Data, + Envs: envs, } items, err := b.Build() if err != nil { @@ -484,6 +492,12 @@ func PostBuild(c *gin.Context) { if err != nil { logrus.Debugf("Error getting registry credentials for %s#%d. %s", repo.FullName, build.Number, err) } + if Config.Services.Environ != nil { + globals, _ := Config.Services.Environ.EnvironList(repo) + for _, global := range globals { + buildParams[global.Name] = global.Value + } + } b := builder{ Repo: repo, diff --git a/server/hook.go b/server/hook.go index e8b21efcb..c427d176d 100644 --- a/server/hook.go +++ b/server/hook.go @@ -201,6 +201,14 @@ func PostHook(c *gin.Context) { return } + envs := map[string]string{} + if Config.Services.Environ != nil { + globals, _ := Config.Services.Environ.EnvironList(repo) + for _, global := range globals { + envs[global.Name] = global.Value + } + } + secs, err := Config.Services.Secrets.SecretListBuild(repo, build) if err != nil { logrus.Debugf("Error getting secrets for %s#%d. %s", repo.FullName, build.Number, err) @@ -234,6 +242,7 @@ func PostHook(c *gin.Context) { Netrc: netrc, Secs: secs, Regs: regs, + Envs: envs, Link: httputil.GetURL(c.Request), Yaml: conf.Data, } diff --git a/server/rpc.go b/server/rpc.go index 099bcfccb..6fceca422 100644 --- a/server/rpc.go +++ b/server/rpc.go @@ -35,6 +35,7 @@ var Config = struct { Senders model.SenderService Secrets model.SecretService Registries model.RegistryService + Environ model.EnvironService } Storage struct { // Users model.UserStore