github.com/Racer159/jackal@v0.32.7-0.20240401174413-0bd2339e4f2e/src/pkg/packager/variables/variables.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // SPDX-FileCopyrightText: 2021-Present The Jackal Authors
     3  
     4  // Package variables contains functions for working with variables within Jackal packages.
     5  package variables
     6  
     7  import (
     8  	"github.com/Racer159/jackal/src/config"
     9  	"github.com/Racer159/jackal/src/pkg/interactive"
    10  	"github.com/Racer159/jackal/src/types"
    11  )
    12  
    13  // SetVariableMapInConfig handles setting the active variables used to template component files.
    14  func SetVariableMapInConfig(cfg *types.PackagerConfig) error {
    15  	for name, value := range cfg.PkgOpts.SetVariables {
    16  		cfg.SetVariable(name, value, false, false, "")
    17  	}
    18  
    19  	for _, variable := range cfg.Pkg.Variables {
    20  		_, present := cfg.SetVariableMap[variable.Name]
    21  
    22  		// Variable is present, no need to continue checking
    23  		if present {
    24  			cfg.SetVariableMap[variable.Name].Sensitive = variable.Sensitive
    25  			cfg.SetVariableMap[variable.Name].AutoIndent = variable.AutoIndent
    26  			cfg.SetVariableMap[variable.Name].Type = variable.Type
    27  			if err := cfg.CheckVariablePattern(variable.Name, variable.Pattern); err != nil {
    28  				return err
    29  			}
    30  			continue
    31  		}
    32  
    33  		// First set default (may be overridden by prompt)
    34  		cfg.SetVariable(variable.Name, variable.Default, variable.Sensitive, variable.AutoIndent, variable.Type)
    35  
    36  		// Variable is set to prompt the user
    37  		if variable.Prompt && !config.CommonOptions.Confirm {
    38  			// Prompt the user for the variable
    39  			val, err := interactive.PromptVariable(variable)
    40  
    41  			if err != nil {
    42  				return err
    43  			}
    44  
    45  			cfg.SetVariable(variable.Name, val, variable.Sensitive, variable.AutoIndent, variable.Type)
    46  		}
    47  
    48  		if err := cfg.CheckVariablePattern(variable.Name, variable.Pattern); err != nil {
    49  			return err
    50  		}
    51  	}
    52  
    53  	return nil
    54  }