Skip to content

Commit

Permalink
Relax validation for Builders apps (#260)
Browse files Browse the repository at this point in the history
  • Loading branch information
divolgin authored Jun 9, 2023
1 parent fbd008c commit 721c323
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 70 deletions.
50 changes: 26 additions & 24 deletions cli/cmd/release_create.go
Original file line number Diff line number Diff line change
Expand Up @@ -291,49 +291,51 @@ Prepared to create release with defaults:
}

func (r *runners) validateReleaseCreateParams() error {
if r.isFoundationApp {
if r.args.createReleaseYaml != "" {
return errors.New("--yaml cannot be used with Builders KOTS app, use --chart instead")
}
specSources := []string{
r.args.createReleaseYaml,
r.args.createReleaseYamlFile,
r.args.createReleaseYamlDir,
r.args.createReleaseChart,
}

if r.args.createReleaseYamlFile != "" {
return errors.New("--yaml-file cannot be used with Builders KOTS app, use --chart instead")
numSources := 0
for _, specSource := range specSources {
if specSource != "" {
numSources++
}
}

if r.args.createReleaseYamlDir != "" {
return errors.New("--yaml-dir cannot be used with Builders KOTS app, use --chart instead")
}
if numSources == 0 {
return errors.New("one of --yaml, --yaml-file, --yaml-dir, or --chart is required")
}

if r.args.createReleaseChart == "" {
return errors.New("--chart flag must be provided for Builders KOTS applications")
}
if numSources > 1 {
return errors.New("only one of --yaml, --yaml-file, --yaml-dir, or --chart may be specified")
}

if r.args.createReleaseLint {
return errors.New("--lint cannot be used with Builders KOTS app")
}
} else {
if r.args.createReleaseYaml == "" && r.args.createReleaseYamlFile == "" && r.appType != "kots" {
if r.appType != "kots" {
if r.args.createReleaseYaml == "" && r.args.createReleaseYamlFile == "" {
return errors.New("one of --yaml or --yaml-file must be provided")
}

if r.args.createReleaseYaml != "" && r.args.createReleaseYamlFile != "" {
return errors.New("only one of --yaml or --yaml-file may be specified")
}

if (strings.HasSuffix(r.args.createReleaseYaml, ".yaml") || strings.HasSuffix(r.args.createReleaseYaml, ".yml")) &&
len(strings.Split(r.args.createReleaseYaml, " ")) == 1 {
return errors.New("use the --yaml-file flag when passing a yaml filename")
}
} else {
if r.isFoundationApp && r.args.createReleaseLint {
return errors.New("--lint cannot be used with Builders KOTS app")
}

if r.args.createReleaseYamlDir == "" && r.appType == "kots" {
if !r.isFoundationApp && r.args.createReleaseYamlDir == "" {
return errors.New("--yaml-dir flag must be provided for KOTS applications")
}

if r.args.createReleaseYaml != "" && r.appType == "kots" {
if r.args.createReleaseYaml != "" {
return errors.Errorf("the --yaml flag is not supported for KOTS applications, use --yaml-dir instead")
}

if r.args.createReleaseYamlFile != "" && r.appType == "kots" {
if r.args.createReleaseYamlFile != "" {
return errors.Errorf("the --yaml-file flag is not supported for KOTS applications, use --yaml-dir instead")
}
}
Expand Down
4 changes: 0 additions & 4 deletions cli/cmd/release_promote.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,6 @@ func (r *runners) releasePromote(cmd *cobra.Command, args []string) error {
required = r.args.releaseRequired
}

if r.isFoundationApp && r.args.releaseVersion != "" {
return errors.New("--version cannot be set for foundation apps")
}

if err := r.api.PromoteRelease(r.appID, r.appType, seq, r.args.releaseVersion, r.args.releaseNotes, required, newID); err != nil {
return err
}
Expand Down
80 changes: 38 additions & 42 deletions cli/cmd/release_update.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,51 +28,47 @@ func (r *runners) InitReleaseUpdate(parent *cobra.Command) {
}

func (r *runners) releaseUpdate(cmd *cobra.Command, args []string) error {
if r.isFoundationApp {
if r.args.updateReleaseYaml != "" {
return errors.New("--yaml cannot be used with Builders KOTS app, use --chart instead")
}

if r.args.updateReleaseYamlFile != "" {
return errors.New("--yaml-file cannot be used with Builders KOTS app, use --chart instead")
}
specSources := []string{
r.args.updateReleaseYaml,
r.args.updateReleaseYamlFile,
r.args.updateReleaseYamlDir,
r.args.updateReleaseChart,
}

if r.args.updateReleaseYamlDir != "" {
return errors.New("--yaml-dir cannot be used with Builders KOTS app, use --chart instead")
numSources := 0
for _, specSource := range specSources {
if specSource != "" {
numSources++
}
}

if r.args.updateReleaseChart == "" {
return errors.New("--chart flag must be provided for Builders KOTS applications")
}
} else {
if r.args.updateReleaseYaml == "" && r.args.updateReleaseYamlFile == "" && r.args.updateReleaseYamlDir == "" {
return errors.New("one of --yaml or --yaml-file is required")
}
if numSources == 0 {
return errors.New("one of --yaml, --yaml-file, --yaml-dir, or --chart is required")
}

if r.args.updateReleaseYaml != "" && r.args.updateReleaseYamlFile != "" {
return errors.New("only one of --yaml or --yaml-file may be specified")
}
if numSources > 1 {
return errors.New("only one of --yaml, --yaml-file, --yaml-dir, or --chart may be specified")
}

if (strings.HasSuffix(r.args.updateReleaseYaml, ".yaml") || strings.HasSuffix(r.args.updateReleaseYaml, ".yml")) &&
len(strings.Split(r.args.updateReleaseYaml, " ")) == 1 {
return errors.New("use the --yaml-file flag when passing a yaml filename")
}
if (strings.HasSuffix(r.args.updateReleaseYaml, ".yaml") || strings.HasSuffix(r.args.updateReleaseYaml, ".yml")) &&
len(strings.Split(r.args.updateReleaseYaml, " ")) == 1 {
return errors.New("use the --yaml-file flag when passing a yaml filename")
}

if r.args.updateReleaseYaml == "-" {
bytes, err := ioutil.ReadAll(r.stdin)
if err != nil {
return err
}
r.args.updateReleaseYaml = string(bytes)
if r.args.updateReleaseYaml == "-" {
bytes, err := ioutil.ReadAll(r.stdin)
if err != nil {
return err
}
r.args.updateReleaseYaml = string(bytes)
}

if r.args.updateReleaseYamlFile != "" {
bytes, err := ioutil.ReadFile(r.args.updateReleaseYamlFile)
if err != nil {
return err
}
r.args.updateReleaseYaml = string(bytes)
if r.args.updateReleaseYamlFile != "" {
bytes, err := ioutil.ReadFile(r.args.updateReleaseYamlFile)
if err != nil {
return err
}
r.args.updateReleaseYaml = string(bytes)
}

if len(args) < 1 {
Expand All @@ -83,16 +79,16 @@ func (r *runners) releaseUpdate(cmd *cobra.Command, args []string) error {
return errors.Errorf("invalid release sequence: %s", args[0])
}

if r.isFoundationApp {
r.args.updateReleaseYaml, err = makeReleaseFromChart(r.args.updateReleaseChart)
if err != nil {
return errors.Wrap(err, "make release from chart")
}
} else if r.args.updateReleaseYamlDir != "" {
if r.args.updateReleaseYamlDir != "" {
r.args.updateReleaseYaml, err = makeReleaseFromDir(r.args.updateReleaseYamlDir)
if err != nil {
return errors.Wrap(err, "make release from dir")
}
} else if r.args.updateReleaseChart != "" {
r.args.updateReleaseYaml, err = makeReleaseFromChart(r.args.updateReleaseChart)
if err != nil {
return errors.Wrap(err, "make release from chart")
}
}

if err := r.api.UpdateRelease(r.appID, r.appType, seq, r.args.updateReleaseYaml); err != nil {
Expand Down

0 comments on commit 721c323

Please sign in to comment.