Skip to content
This repository has been archived by the owner on Jul 4, 2024. It is now read-only.

Commit

Permalink
Overrides via command line parameters (#42)
Browse files Browse the repository at this point in the history
Signed-off-by: Eugene Yarshevich <yarshevich@gmail.com>
  • Loading branch information
ghen authored Jun 12, 2023
1 parent d21d8d9 commit 9b232c0
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 4 deletions.
4 changes: 4 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ require (
github.com/sendgrid/rest v2.6.9+incompatible
github.com/spf13/cobra v1.6.0
github.com/stretchr/testify v1.8.1
github.com/tidwall/sjson v1.2.5
github.com/xeipuuv/gojsonschema v1.2.0
gopkg.in/yaml.v3 v3.0.1
)
Expand All @@ -19,6 +20,9 @@ require (
github.com/inconshreveable/mousetrap v1.0.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/tidwall/gjson v1.14.2 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.0 // indirect
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
)
8 changes: 8 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,14 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/tidwall/gjson v1.14.2 h1:6BBkirS0rAHjumnjHF6qgy5d2YAJ1TLIaFE2lzfOLqo=
github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c=
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=
Expand Down
2 changes: 2 additions & 0 deletions internal/command/consts.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ var (
appID string
envID string

overrideParams []string

// deltaID is a cli flag receiver used to support "score-humanitec delta --use foo"
deltaID string
deploy bool
Expand Down
2 changes: 2 additions & 0 deletions internal/command/delta.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ func init() {
deltaCmd.Flags().StringVar(&envID, "env", "", "Environment ID")
deltaCmd.MarkFlagRequired("env")

deltaCmd.Flags().StringArrayVarP(&overrideParams, "property", "p", nil, "Overrides selected property value")

deltaCmd.Flags().BoolVar(&deploy, "deploy", false, "Trigger a new delta deployment at the end")
deltaCmd.Flags().BoolVar(&retry, "retry", false, "Retry deployments when a deployment is currently in progress")
deltaCmd.Flags().BoolVar(&skipValidation, "skip-validation", false, "DEPRECATED: Disables Score file schema validation.")
Expand Down
2 changes: 2 additions & 0 deletions internal/command/draft.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ func init() {
draftCmd.Flags().StringVar(&envID, "env", "", "Environment ID")
draftCmd.MarkFlagRequired("env")

draftCmd.Flags().StringArrayVarP(&overrideParams, "property", "p", nil, "Overrides selected property value")

draftCmd.Flags().BoolVar(&deploy, "deploy", false, "Trigger a new draft deployment at the end")
draftCmd.Flags().BoolVar(&verbose, "verbose", false, "Enable diagnostic messages (written to STDERR)")

Expand Down
49 changes: 45 additions & 4 deletions internal/command/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,21 @@ import (
"io"
"log"
"os"
"strings"

"github.com/imdario/mergo"
"github.com/mitchellh/mapstructure"
loader "github.com/score-spec/score-go/loader"
schema "github.com/score-spec/score-go/schema"
score "github.com/score-spec/score-go/types"
"github.com/score-spec/score-humanitec/internal/humanitec"
"github.com/score-spec/score-humanitec/internal/humanitec/extensions"
"github.com/spf13/cobra"
"github.com/tidwall/sjson"
"github.com/xeipuuv/gojsonschema"

yaml "gopkg.in/yaml.v3"

loader "github.com/score-spec/score-go/loader"
schema "github.com/score-spec/score-go/schema"
score "github.com/score-spec/score-go/types"
)

func init() {
Expand All @@ -34,6 +38,8 @@ func init() {
runCmd.Flags().StringVar(&envID, "env", "", "Environment ID")
runCmd.MarkFlagRequired("env")

runCmd.Flags().StringArrayVarP(&overrideParams, "property", "p", nil, "Overrides selected property value")

runCmd.Flags().BoolVar(&skipValidation, "skip-validation", false, "DEPRECATED: Disables Score file schema validation.")
runCmd.Flags().BoolVar(&verbose, "verbose", false, "Enable diagnostic messages (written to STDERR)")

Expand Down Expand Up @@ -95,7 +101,7 @@ func loadSpec(scoreFile, overridesFile, extensionsFile string, skipValidation bo
return nil, nil, err
}

// Apply overrides (optional)
// Apply overrides from file (optional)
//
if overridesFile != "" {
log.Printf("Checking '%s'...\n", overridesFile)
Expand All @@ -115,6 +121,41 @@ func loadSpec(scoreFile, overridesFile, extensionsFile string, skipValidation bo
}
}

// Apply overrides from command line (optional)
//
for _, pstr := range overrideParams {
log.Print("Applying SCORE properties overrides...\n")

jsonBytes, err := json.Marshal(srcMap)
if err != nil {
return nil, nil, fmt.Errorf("marshalling score spec: %w", err)
}

pmap := strings.SplitN(pstr, "=", 2)
if len(pmap) <= 1 {
var path = pmap[0]
log.Printf("removing '%s'", path)
if jsonBytes, err = sjson.DeleteBytes(jsonBytes, path); err != nil {
return nil, nil, fmt.Errorf("removing '%s': %w", path, err)
}
} else {
var path = pmap[0]
var val interface{}
if err := yaml.Unmarshal([]byte(pmap[1]), &val); err != nil {
val = pmap[1]
}

log.Printf("overriding '%s' = '%s'", path, val)
if jsonBytes, err = sjson.SetBytes(jsonBytes, path, val); err != nil {
return nil, nil, fmt.Errorf("overriding '%s': %w", path, err)
}
}

if err = json.Unmarshal(jsonBytes, &srcMap); err != nil {
return nil, nil, fmt.Errorf("unmarshalling score spec: %w", err)
}
}

// Load extensions (optional)
//
var extMap = make(map[string]interface{})
Expand Down

0 comments on commit 9b232c0

Please sign in to comment.